Si è notato spesso che impostazioni, variabili o input non sono più disponibili dopo il riavvio di ESP32. Oggi ti mostriamo come salvare le variabili o le impostazioni in modo permanente, dopo un'interruzione di corrente o un riavvio.
Arduino ha una memoria EEPROM, dove tali valori possono essere salvati. Un ESP32 non ha tale memoria. Per ESP32 è presente una memoria flash (simile a una chiavetta SSD / USB).
Per poter accedervi, utilizziamo le Preferenze, che sono incluse nella libreria ESP. Se non hai ancora installato questa libreria sul tuo computer, dai un'occhiata a questo ebook: Modulo Lora ESP32 con OLED
Iniziamo un nuovo progetto IDE di Arduino e incolliamo questo codice:
#include <Preferenze.B> Preferenze preferenze; vuoto configurazione() { serial.iniziare(115200); serial.println(); preferenze.iniziare("Az", falso); // Crea / usa la cartella az //preferences.clear (); // Elimina tutti i "file" nella cartella az //preferences.remove("Start "); // elimina "file" start unsigned int contatore = preferenze.getUInt("Start", 0); // Leggi "file" avvia e scrive sul contatore delle variabili // ", 0" significa che, se start non esiste, passa il valore predefinito 0 contatore++; // Aumenta il contatore delle variabili di 1 serial.printf("Numero di avviamenti:% u \ n", contatore); // Uscita seriale contatore variabile preferenze.putUInt("Start", contatore); // Salva il contatore delle variabili in "File" Start preferenze.fine(); // esci dalle preferenze serial.println("Riavvia tra 10 secondi ..."); ritardo(10000); // tempo di attesa 10000ms = 10s ESP.nuovo inizio(); } vuoto cappio() {}
Cosa fa questo codice?
Innanzitutto creiamo una nuova cartella o la usiamo come cartella corrente.
preferenze.iniziare("Az", falso);
Se si desidera eliminare tutto il contenuto nella cartella az, utilizzare:
preferenze.chiaro();
Puoi anche eliminare un file specifico:
preferenze.remove("Start");
Con gli ordini
preferenze.putUInt
i dati interi possono essere salvati e con
preferenze.getUInt
i dati interi memorizzati possono essere letti nuovamente.
Ci sono anche le seguenti altre opzioni (String, Long ...) per salvare e leggere i file:
putchar putUChar putShort putUShort putInt putUInt putLong putULong putLong64 putULong64 putFloat mettere doppia putBool putString putString putBytes |
getchar getUChar getShort getUShort getInt getUInt getLong getULong getLong64 getULong64 getFloat getDouble GetBool getString getString getBytes |
unsigned int contatore = preferenze.getUInt("Start", 0);
Con getUInt leggiamo il file "Start" e lo scriviamo nel contatore delle variabili. Se il file "Start" non esiste, viene utilizzato un valore predefinito, in questo caso uno 0. Il valore predefinito viene aggiunto dopo il file con una virgola.
Dopo aver aumentato e generato la variabile, salviamo il contatore delle variabili nel file Start:
preferenze.putUInt("Start", contatore);
Dopo aver salvato tutto, chiudiamo di nuovo la nostra cartella az con il comando:
preferenze.fine();
Ora riavviamo ESP32 e ricominciamo. Ora possiamo anche scollegare l'alimentatore e sapere sempre con esattezza con che frequenza è stato avviato l'ESP, perché questo valore viene ora letto all'accensione e salvato nuovamente aumentato di uno.
Con questa funzione, ora è possibile salvare e utilizzare altri valori, ad es. Dati di accesso WLAN, ultimo stato ... escogitare qualcosa.
Divertiti a sperimentare!
7 commenti
Andreas Wolter
@Georg: da Quellcode meistens schlechter lesbar ist, wenn lange Zeilen zu oft umgebrochen werden, werden die Zeilen nicht umgebrochen und daher Scrollbalken verwendet.
Ich empfehle, den kompletten Code in einen Editor Ihrer Wahl zu kopieren und auf dem gesamten Bildschirm anzuzeigen.
Die Codebeispiele sollen nur zur ersten Ansicht dienen. Ein vollständiges Review sollte jeder in seinem Editor durchführen.
Grüße,
Andreas Wolter
AZ-Delivery Blog
Georg
Eure Beiträge sind super und sehr hilfreich. Bedauerlicherweise ist es jedoch sehr umständlich diese zu lesen, da das Design der Webseite so schlecht ist wie die Blog-Artikel gut sind. Wieso muss ich auf einem normalen Bildschirm mit 1920 Pixeln Breite seitlich scrollen um den Quellcode des Beispiels lesen zu können, obwohl ein Großteil des Bildschirms ungenutzt ist? Leider scheint dieser Unsinn mittlerweile überall Standard zu sein… O_o
Markus
Danke für den guten Beitrag.
Kann ich eigentlich die Preferences und Spiffs in einem Sketch gleichzeitig nutzen. Oder gibt es da Probleme bei der Nutzung des NVS.
Brian
Ist es richtig, dass dieser Speicher beim ESP eine begrenzte Anzahl von Schreibzyclen hat? Wie hoch ist diese?
Noob-nerd
if (preferences.getUInt(“Start”, -1) == -1 ){
//gibt nichts
}
Peter Pi.
Danke! Mich würde interessieren, wie man erfährt, ob bei einem get ein Schlüssel überhaupt existiert.
Hoktaar
Hi & Danke für diesen sehr guten Beitrag.
Geht das auch mit einem ESP8266 oder gibt es dort etwas ähnliches was so einfach ist?