Skip to content

Commit fb52db4

Browse files
committed
Fix EEPROM defaults on first load.
Fix leading zeros missing in MAC based name.
1 parent d1cfadc commit fb52db4

File tree

2 files changed

+56
-50
lines changed

2 files changed

+56
-50
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ build/
44
buildcache/
55
arduino.json
66
c_cpp_properties.json
7+
.vscode

esp8266-fastled-webserver.ino

Lines changed: 55 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ CRGB leds[NUM_LEDS];
7171

7272
const uint8_t brightnessCount = 5;
7373
uint8_t brightnessMap[brightnessCount] = { 16, 32, 64, 128, 255 };
74-
uint8_t brightnessIndex = 0;
74+
uint8_t brightnessIndex = 3;
7575

7676
// ten seconds per color palette makes a good demo
7777
// 20-120 is better for deployment
@@ -231,7 +231,7 @@ void setup() {
231231
FastLED.show();
232232

233233
EEPROM.begin(512);
234-
loadSettings();
234+
readSettings();
235235

236236
FastLED.setBrightness(brightness);
237237

@@ -246,6 +246,7 @@ void setup() {
246246
Serial.print( F("Flash ID: ") ); Serial.println(spi_flash_get_id());
247247
Serial.print( F("Flash Size: ") ); Serial.println(ESP.getFlashChipRealSize());
248248
Serial.print( F("Vcc: ") ); Serial.println(ESP.getVcc());
249+
Serial.print( F("MAC Address: ") ); Serial.println(WiFi.macAddress());
249250
Serial.println();
250251

251252
SPIFFS.begin();
@@ -263,13 +264,20 @@ void setup() {
263264

264265
// Do a little work to get a unique-ish name. Get the
265266
// last two bytes of the MAC (HEX'd)":
267+
268+
// copy the mac address to a byte array
266269
uint8_t mac[WL_MAC_ADDR_LENGTH];
267270
WiFi.softAPmacAddress(mac);
268-
String macID = String(mac[WL_MAC_ADDR_LENGTH - 2], HEX) +
269-
String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
270-
macID.toUpperCase();
271271

272-
nameString = "ESP8266-" + macID;
272+
// format the last two digits to hex character array, like 0A0B
273+
char macID[5];
274+
sprintf(macID, "%02X%02X", mac[WL_MAC_ADDR_LENGTH - 2], mac[WL_MAC_ADDR_LENGTH - 1]);
275+
276+
// convert the character array to a string
277+
String macIdString = macID;
278+
macIdString.toUpperCase();
279+
280+
nameString = "ESP8266-" + macIdString;
273281

274282
char nameChar[nameString.length() + 1];
275283
memset(nameChar, 0, nameString.length() + 1);
@@ -326,8 +334,7 @@ void setup() {
326334
webServer.on("/cooling", HTTP_POST, []() {
327335
String value = webServer.arg("value");
328336
cooling = value.toInt();
329-
EEPROM.write(11, cooling);
330-
EEPROM.commit();
337+
writeAndCommitSettings();
331338
broadcastInt("cooling", cooling);
332339
webServer.sendHeader("Access-Control-Allow-Origin", "*");
333340
sendInt(cooling);
@@ -336,8 +343,7 @@ void setup() {
336343
webServer.on("/sparking", HTTP_POST, []() {
337344
String value = webServer.arg("value");
338345
sparking = value.toInt();
339-
EEPROM.write(12, sparking);
340-
EEPROM.commit();
346+
writeAndCommitSettings();
341347
broadcastInt("sparking", sparking);
342348
webServer.sendHeader("Access-Control-Allow-Origin", "*");
343349
sendInt(sparking);
@@ -356,8 +362,7 @@ void setup() {
356362
twinkleSpeed = value.toInt();
357363
if (twinkleSpeed < 0) twinkleSpeed = 0;
358364
else if (twinkleSpeed > 8) twinkleSpeed = 8;
359-
EEPROM.write(9, twinkleSpeed);
360-
EEPROM.commit();
365+
writeAndCommitSettings();
361366
broadcastInt("twinkleSpeed", twinkleSpeed);
362367
webServer.sendHeader("Access-Control-Allow-Origin", "*");
363368
sendInt(twinkleSpeed);
@@ -368,8 +373,7 @@ void setup() {
368373
twinkleDensity = value.toInt();
369374
if (twinkleDensity < 0) twinkleDensity = 0;
370375
else if (twinkleDensity > 8) twinkleDensity = 8;
371-
EEPROM.write(10, twinkleDensity);
372-
EEPROM.commit();
376+
writeAndCommitSettings();
373377
broadcastInt("twinkleDensity", twinkleDensity);
374378
webServer.sendHeader("Access-Control-Allow-Origin", "*");
375379
sendInt(twinkleDensity);
@@ -380,8 +384,7 @@ void setup() {
380384
coolLikeIncandescent = value.toInt();
381385
if (coolLikeIncandescent < 0) coolLikeIncandescent = 0;
382386
else if (coolLikeIncandescent > 1) coolLikeIncandescent = 1;
383-
EEPROM.write(13, coolLikeIncandescent);
384-
EEPROM.commit();
387+
writeAndCommitSettings();
385388
broadcastInt("coolLikeIncandescent", coolLikeIncandescent);
386389
sendInt(coolLikeIncandescent);
387390
});
@@ -815,8 +818,15 @@ void loop() {
815818
// }
816819
//}
817820

818-
void loadSettings()
821+
void readSettings()
819822
{
823+
// check for "magic number" so we know settings have been written to EEPROM
824+
// and it's not just full of random bytes
825+
826+
if (EEPROM.read(511) != 55) {
827+
return;
828+
}
829+
820830
brightness = EEPROM.read(0);
821831

822832
currentPatternIndex = EEPROM.read(1);
@@ -857,33 +867,44 @@ void loadSettings()
857867
coolLikeIncandescent = EEPROM.read(13);
858868
}
859869

860-
void setPower(uint8_t value)
870+
void writeAndCommitSettings()
861871
{
862-
power = value == 0 ? 0 : 1;
863-
872+
EEPROM.write(0, brightness);
873+
EEPROM.write(1, currentPatternIndex);
874+
EEPROM.write(2, solidColor.r);
875+
EEPROM.write(3, solidColor.g);
876+
EEPROM.write(4, solidColor.b);
864877
EEPROM.write(5, power);
878+
EEPROM.write(6, autoplay);
879+
EEPROM.write(7, autoplayDuration);
880+
EEPROM.write(8, currentPaletteIndex);
881+
EEPROM.write(9, twinkleSpeed);
882+
EEPROM.write(10, twinkleDensity);
883+
EEPROM.write(11, cooling);
884+
EEPROM.write(12, sparking);
885+
886+
EEPROM.write(511, 55);
865887
EEPROM.commit();
888+
}
866889

890+
void setPower(uint8_t value)
891+
{
892+
power = value == 0 ? 0 : 1;
893+
writeAndCommitSettings();
867894
broadcastInt("power", power);
868895
}
869896

870897
void setAutoplay(uint8_t value)
871898
{
872899
autoplay = value == 0 ? 0 : 1;
873-
874-
EEPROM.write(6, autoplay);
875-
EEPROM.commit();
876-
900+
writeAndCommitSettings();
877901
broadcastInt("autoplay", autoplay);
878902
}
879903

880904
void setAutoplayDuration(uint8_t value)
881905
{
882906
autoplayDuration = value;
883-
884-
EEPROM.write(7, autoplayDuration);
885-
EEPROM.commit();
886-
907+
writeAndCommitSettings();
887908
autoPlayTimeout = millis() + (autoplayDuration * 1000);
888909

889910
broadcastInt("autoplayDuration", autoplayDuration);
@@ -897,12 +918,7 @@ void setSolidColor(CRGB color)
897918
void setSolidColor(uint8_t r, uint8_t g, uint8_t b)
898919
{
899920
solidColor = CRGB(r, g, b);
900-
901-
EEPROM.write(2, r);
902-
EEPROM.write(3, g);
903-
EEPROM.write(4, b);
904-
EEPROM.commit();
905-
921+
writeAndCommitSettings();
906922
setPattern(patternCount - 1);
907923

908924
broadcastString("color", String(solidColor.r) + "," + String(solidColor.g) + "," + String(solidColor.b));
@@ -923,8 +939,7 @@ void adjustPattern(bool up)
923939
currentPatternIndex = 0;
924940

925941
if (autoplay == 0) {
926-
EEPROM.write(1, currentPatternIndex);
927-
EEPROM.commit();
942+
writeAndCommitSettings();
928943
}
929944

930945
broadcastInt("pattern", currentPatternIndex);
@@ -938,8 +953,7 @@ void setPattern(uint8_t value)
938953
currentPatternIndex = value;
939954

940955
if (autoplay == 0) {
941-
EEPROM.write(1, currentPatternIndex);
942-
EEPROM.commit();
956+
writeAndCommitSettings();
943957
}
944958

945959
broadcastInt("pattern", currentPatternIndex);
@@ -961,10 +975,7 @@ void setPalette(uint8_t value)
961975
value = paletteCount - 1;
962976

963977
currentPaletteIndex = value;
964-
965-
EEPROM.write(8, currentPaletteIndex);
966-
EEPROM.commit();
967-
978+
writeAndCommitSettings();
968979
broadcastInt("palette", currentPaletteIndex);
969980
}
970981

@@ -988,10 +999,7 @@ void adjustBrightness(bool up)
988999
brightness = brightnessMap[brightnessIndex];
9891000

9901001
FastLED.setBrightness(brightness);
991-
992-
EEPROM.write(0, brightness);
993-
EEPROM.commit();
994-
1002+
writeAndCommitSettings();
9951003
broadcastInt("brightness", brightness);
9961004
}
9971005

@@ -1004,10 +1012,7 @@ void setBrightness(uint8_t value)
10041012
brightness = value;
10051013

10061014
FastLED.setBrightness(brightness);
1007-
1008-
EEPROM.write(0, brightness);
1009-
EEPROM.commit();
1010-
1015+
writeAndCommitSettings();
10111016
broadcastInt("brightness", brightness);
10121017
}
10131018

0 commit comments

Comments
 (0)