"Überlebt tiefen Schlaf, aber nicht zurückgesetzt, Powercycle oder Reflashing."
Verwenden Sie diese Bibliothek nicht, wenn Sie nur möchten, dass die Daten in einigen Variablen den tiefen Schlaf überleben. Markieren Sie einfach die Variablen RTC_DATA_ATTR und Sie sind alle festgelegt. Hier gibt es ein Tutorial. Diese Bibliothek ist nur für Sie geeignet, wenn Sie einen vorhandenen Code haben, EEPROM.h verwendet.
Flash kann von neu geschrieben werden. Flash in Espressifs eigenen Modulen garantiert 100.000 Schreibvorgänge, generische SPI -Flash -Module werden im Allgemeinen zwischen 10.000 und 100.000 bewertet. Dies setzt jedoch im Allgemeinen davon aus, dass der Chip bei 68 ° F bei 20 ° C liegt. In einem Modul wird es immer heißer, und es gibt viele Horrorgeschichten im Netz von SPI -Flash -Chips, die weniger als beworbene Größenzyklen beauftragt sind.
Der ESP32-Arduino-Code von Espressif enthält eine Arduino-EEPROM-Implementierung, die das EEPROM als Blob in ihren NVS-Schlüsselwertspeicher in Flash schreibt. Dies bedeutet effektiv, dass Ihr gesamtes EEPROM für jede Änderung von nur einem bisschen im "EEPROM" zu Flash, die alte Kopie, die gelöscht wurde, umgeschrieben wird, und wenn die Flash -Seite füllt, wird eine neue Seite aktiv markiert und so fort. Dies kann zu mehr Flash -Verschleiß führen, als man es erwarten würde. Die genauen Details sind hier.
Wenn Ihre Anwendung das ESP32-batteriebetriebene Batteriebetrieben aufnimmt, sie jedoch in einen tiefen Schlaf versetzt, ist es so wenig Strom, dass es in Bezug auf die Akkulaufzeit effektiv abfällt. Sie können es wieder aufwachen lassen, nachdem eine bestimmte Zeit abgelaufen ist und/oder wenn ein GPIO (dh Knopf) hoch oder niedrig ist.
Diese Bibliothek wird EEPROM in RTC RAM emulieren, das während des tiefen Schlafes angetrieben bleibt. Um mehr über Deep Sleep zu erfahren, lesen Sie dieses einfache Tutorial oder die Dokumentation von Espressif, wenn Sie alle Details wünschen. Verwenden Sie diese Bibliothek, wie oben erwähnt, nur, wenn Ihr vorhandener Code EEPROM verwendet. Einfach einige Variablen zu haben, die tiefen Schlaf überleben, ist viel einfacher, überprüfen Sie das Tutorial.
Wenn Sie EEPROM.toNVS() nennen, wird eine Kopie Ihrer EEPROM -Daten auf dem Schlüssel "EEPROM" in NVS -Blitz gespeichert, genau wie wenn Sie das ursprüngliche EEPROM.h verwenden würden. Immer wenn das ESP32_RTC_EEPROM mit einem leeren RTC -RAM (der durch das Vorhandensein eines magischen Wortes erfasst wird) aufwacht, wird versucht, festzustellen, ob eine gespeicherte Kopie der richtigen Größe vorliegt. Wenn ja, ist das geladen. Sie können auch manuell zum letzten Save zurückkehren, indem Sie EEPROM.fromNVS() anrufen.
Die Funktion EEPROM.wasRestored() zeigt, ob der Inhalt in diesem Startzyklus automatisch aus NVS wiederhergestellt wurde oder nicht.
Fügen Sie diese Bibliothek mit dem Bibliotheksmanager oder durch Klonen dieses Repositorys in Ihren Arduino -Bibliotheksordner hinzu.
Ersetzen Sie #include <EEPROM.h> in Ihrem Code durch #include <ESP32_RTC_EEPROM.h> .
Es gibt keine 3, du bist fertig.
Diese Bibliothek wird immer EEPROM_SIZE (festgelegt auf 2048, Änderung in der .H -Datei) Bytes des RTC -RAM (sie haben 8K) beanspruchen. Sie können eine niedrigere Nummer festlegen, wenn Sie EEPROM.begin() aufrufen, aber diese Zahl schränkt nur ein, was Ihr Code lesen/schreiben kann (und wie viel an NVS -Blitz jedes Mal bei der Sicherung geschrieben wird), nicht den tatsächlichen RTC -RAM.
Ich kann es nicht oft genug wiederholen: Nur nützlich in Kombination mit dem tiefen Schlaf des ESP überlebt Daten in diesem gefälschten EEPROM kein Powercycling, Zurücksetzen oder Überflaschen