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!
7 comentarios
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?