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