ESP8266 deep-sleep + EEPROM

OP #4698680
Lesenswert?

Hallo,

ich möchte mit dem ESP8266 Daten im EEPROM ablegen. Dies soll er später 
alle 30 minuten machen weshalb ich einen deep-sleep um Energie zu sparen 
mit ein gebaut habe.
Das Problem ist allerdings, das der ESP nachdem er aufwacht ist immer 
einen neustart macht und somit im EEPROM alle Adressen wieder auf 255 
zurücksetzt. Im Anhang seht ihr mein Beispiel Code.

Würde mich über jede Hilfe freuen.
LG Alex
1
#include <EEPROM.h>
2

3
void setup()
4
{
5
  Serial.begin(9600); 
6
  EEPROM.begin(512);
7
  
8
  delay(3000);
9
  Serial.println("1 -> " + String(EEPROM.read(1)));    // Ausgabe --> Adresse 1 wird gelesen.
10
  delay(3000);
11
  EEPROM.write(1,10);                                 // Schreibe in Adresse 1 eine 10. 
12
  delay(1000);
13
  Serial.println("1 -> " + String(EEPROM.read(1)));    // Ausgabe --> Adresse 1 wird gelesen.
14

15
  ESP.deepSleep(3 * 1000000);                         // ESP schläft 3 sekunden lang und startet dann automatisch wieder neu.
16
}
17

18
void loop(){ }
Gast #4698709
Lesenswert?

Da fehlt ein EEPROM.commit(); sonst speichert der nichts. Bzw. landet 
das nicht eh im Flash? Also Schreibvorgänge beachten, evtl. Wear 
Leveling einbauen.
Außerdem wäre das alles in der loop besser aufgehoben.
#4698762
Lesenswert?

Hallo,

ja, es landet durch EEPROM.commit(); in Flash, der ESP hat keinen 
EEPROM.
Mit EEPROM.begin() wird der Bereich im Ram reserviert und der 
Flashbereich in den Ram kopiert. Dort wird dann gearbeitet und mit 
EEPROM.commit() wird der Rambereich dann wieder in den Flash kopiert.

Gruß aus Berlin
Michael

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren