Ich muss wissen, wie ich ganzzahlige Werte in das EEPROM schreiben und den Wert beim Einschalten beibehalten kann.
char *Red = strstr(myTestUrl, "/R");
if (Red) {
int RedValue = atoi(Red + 2);
analogWrite(12, RedValue);
Serial.println("Red :");
Serial.println(RedValue);
}
Ich möchte RedValue
in EEPROM schreiben . Wie geht das?
arduino-ide
esp8266
eeprom
Eingebetteter Geek
quelle
quelle
Antworten:
Während
EEPROM.read
undEEPROM.write
sind gültige Methoden, ist es wie das Wischen des Bodens mit einer Zahnbürste. Verwenden SieEEPROM.put
undEEPROM.get
stattdessen.Zum Beispiel:
UPDATE : Wenn Sie verstehen möchten, wie das "EEPROM" im ESP8266 emuliert wird, sollten Sie speziell auf https://github.com/esp8266/Arduino/tree/master/libraries/EEPROM verweisen
EEPROM.h
.Wird auch
EEPROM.end
nicht benötigt, löscht es einfach den lokalen Byte-Array-Cache des Flash / EEPROM aus dem RAM. Es dient einer anderen Funktion.quelle
EEPROM.write(pos, val)
schreibt ein Byte (val
) an die Adresse vonpos
. Ein "int" in ESP8266 benötigt 4 Bytes, ist also etwas komplizierter, da das EEPROM in Bytes und nicht ints arbeitet.Hier ist ein Code zum Schreiben eines Int
val
an einer bestimmten Stellepos
im EEPROM:und natürlich müssen Sie es zurücklesen:
In Arduino rufen Sie an
EEPROM.begin()
, aber in ESP8266 müssen Sie anrufenEEPROM.begin(n)
, won
sich die Gesamtzahl der benötigten Bytes befindet.Und denken Sie daran, dass EEPROM eine kurze Lebensdauer haben (nach Anzahl der Schreibvorgänge). Sie müssen die Anzahl der Schreibvorgänge minimieren!
EEPROM ist permanent; Sie müssen nichts tun.
quelle
Methode unter Verwendung der Anzahl der Buchstaben.
quelle
Ich verwende 2 separate Funktionen in meinem Code auf ESP8266 - eine mit
EEPROM.put()
, eine mitEEPROM.get()
.Ich hatte
EEPROM.begin(sizeof...);
nur inEEPROM.put()
Funktion undput
arbeitete. Aber es hat eine ganze Weile gedauert, bis ich herausgefunden habe, dass es auch vorher verwendet werden mussEEPROM.get()
.quelle
Verwenden
#include <EEPROM.h>
quelle
EEPROM.begin()