ESP32 Daten und Einstellungen dauerhaft speichern - AZ-Delivery

A menudo ha notado que la configuración, las variables o las entradas ya no están disponibles después de reiniciar el ESP32. Hoy le mostramos cómo puede guardar variables o configuraciones de forma permanente, después de un corte de energía o reiniciar.

Arduino tiene una memoria EEPROM, donde se pueden guardar dichos valores. Un ESP32 no tiene tal memoria. Para ESP32 hay una memoria flash (similar a una memoria SSD / USB).

Para poder acceder a él, utilizamos Preferencias, que se incluyen en la biblioteca ESP. Si aún no ha instalado esta biblioteca en su computadora, consulte este libro electrónico: Módulo ESP32 Lora con OLED

Comencemos un nuevo proyecto IDE de Arduino y peguemos este código:

 

#include <Preferencias.h>

Preferencias preferencias;                         nulo configuración() {   De serie.comenzar(115200);   De serie.println();   preferencias.comenzar("az", falso);                         // Crear / usar carpeta az   //preferences.clear (); // Eliminar todos los "archivos" en la carpeta az   //preferences.remove("Start "); // eliminar el inicio del "archivo"   sin firmar int contador = preferencias.getUInt("Inicio", 0); // Leer el inicio del "archivo" y escribir en el contador variable                                                           // ", 0" significa que, si el inicio no existe, pase el valor predeterminado 0

 contador++;                                               // Incrementa el contador variable en 1   De serie.printf("Número de inicios:% u \ n", contador);          // Contador variable de salida en serie   preferencias.putUInt("Inicio", contador);                  // Guarde el contador variable en "Archivo" Inicio   preferencias.fin();                                      // salir de las preferencias   De serie.println("Reiniciar en 10 segundos ...");   retrasar(10000);                                           // tiempo de espera 10000ms = 10s   ESP.reiniciar();
}

nulo bucle() {}

 

¿Qué hace este código?

Primero creamos una nueva carpeta o la usamos como la carpeta actual.

preferencias.comenzar("az", falso);  

Si desea eliminar todo el contenido de la carpeta az, use:

preferencias.claro();  

 

También puede eliminar un archivo específico:

preferencias.quitar("Inicio");  

 

Con las ordenes

preferencias.putUInt

los datos enteros se pueden guardar y con

preferencias.getUInt

los datos enteros almacenados se pueden volver a leer.

También hay otras opciones (String, Long ...) para guardar y leer archivos:

putChar
putUChar
putShort
putUShort
putInt
putUInt
putLong
putULong
putLong64
putULong64
putFloat
putDouble
putBool
putString
putString
putBytes
getChar
getUChar
getShort
getUShort
getInt
getUInt
getLong
getULong
getLong64
getULong64
getFloat
getDouble
getBool
getString
getString
getBytes

 

sin firmar int contador = preferencias.getUInt("Inicio", 0);

Con getUInt leemos el archivo "Inicio" y lo escribimos en el contador de variables. Si el archivo "Inicio" no existe, se utiliza un valor predeterminado, en este caso un 0. El valor predeterminado se agrega después del archivo con una coma.

Después de aumentar y generar la variable, guardamos el contador de variables en el archivo Inicio:

preferencias.putUInt("Inicio", contador);  

Después de haber guardado todo, cerramos nuestra carpeta az nuevamente con el comando:

preferencias.fin();  

Ahora reiniciamos el ESP32 y comenzamos de nuevo. Ahora también podemos desconectar la fuente de alimentación y siempre saber exactamente con qué frecuencia se inició el ESP, ya que este valor ahora se lee cuando se enciende y se guarda nuevamente aumentado en uno.

Con esta función, ahora se pueden guardar y usar otros valores, p. Datos de acceso a WLAN, último estado ... inventa algo.

Diviértete experimentando!

 

 

 

Esp-32Grundlagen software

7 comentarios

Andreas Wolter

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

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

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

Brian

Ist es richtig, dass dieser Speicher beim ESP eine begrenzte Anzahl von Schreibzyclen hat? Wie hoch ist diese?

Noob-nerd

Noob-nerd

if (preferences.getUInt(“Start”, -1) == -1 ){
//gibt nichts
}

Peter Pi.

Peter Pi.

Danke! Mich würde interessieren, wie man erfährt, ob bei einem get ein Schlüssel überhaupt existiert.

Hoktaar

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?

Deja un comentario

Todos los comentarios son moderados antes de ser publicados