ESP32 Daten und Einstellungen dauerhaft speichern - AZ-Delivery

Vous avez souvent remarqué que les paramètres, les variables ou les entrées ne sont plus disponibles après le redémarrage de l'ESP32. Aujourd'hui, nous vous montrons comment enregistrer des variables ou des paramètres de façon permanente, après une panne de courant ou un redémarrage.

Arduino a une mémoire EEPROM, où de telles valeurs peuvent être enregistrées. Un ESP32 n'a pas une telle mémoire. Pour ESP32, il existe une mémoire flash (similaire à une clé SSD / USB).

Pour pouvoir y accéder, nous utilisons les Préférences, qui sont incluses dans la bibliothèque ESP. Si vous n'avez pas encore installé cette bibliothèque sur votre ordinateur, consultez cet ebook: Module ESP32 Lora avec OLED

Commençons un nouveau projet Arduino IDE et collez ce code:

 

#include <Préférences.h>

Préférences préférences;                         nul configuration() {   Série.commencer(115200);   Série.println();   préférences.commencer("az", faux);                         // Créer / utiliser le dossier az   //preferences.clear (); // Supprimer tous les "fichiers" du dossier az   //preferences.remove("Start "); // supprime "file" start   non signé int compteur = préférences.getUInt("Démarrer", 0); // Lire le début du "fichier" et écrire sur le compteur de variables                                                           // ", 0" signifie que si le début n'existe pas, passez la valeur par défaut 0

 compteur++;                                               // Augmente le compteur variable de 1   Série.printf("Nombre de démarrages:% u \ n", compteur);          // Sortie compteur variable série   préférences.putUInt("Démarrer", compteur);                  // Enregistrez le compteur de variables sous "Fichier" Démarrer   préférences.fin();                                      // quitter les préférences   Série.println("Redémarrez dans 10 secondes ...");   retard(10000);                                           // temps d'attente 10000 ms = 10 s   ESP.redémarrer();
}

nul boucle() {}

 

Que fait ce code?

Nous créons d'abord un nouveau dossier ou nous l'utilisons comme dossier actuel.

préférences.commencer("az", faux);  

Si vous souhaitez supprimer tout le contenu du dossier az, utilisez:

préférences.clair();  

 

Vous pouvez également supprimer un fichier spécifique:

préférences.supprimer("Démarrer");  

 

Avec les commandes

préférences.putUInt

les données entières peuvent être enregistrées et avec

préférences.getUInt

les données entières stockées peuvent être lues à nouveau.

Il existe également les autres options suivantes (String, Long ...) pour enregistrer et lire des fichiers:

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

 

non signé int compteur = préférences.getUInt("Démarrer", 0);

Avec getUInt, nous lisons le fichier "Start" et l'écrivons dans le compteur de variables. Si le fichier "Démarrer" n'existe pas, une valeur par défaut est utilisée, dans ce cas un 0. La valeur par défaut est ajoutée après le fichier avec une virgule.

Après avoir augmenté et sorti la variable, nous enregistrons le compteur de variables dans le fichier Start:

préférences.putUInt("Démarrer", compteur);  

Après avoir tout enregistré, nous fermons à nouveau notre dossier az avec la commande:

préférences.fin();  

Maintenant, nous redémarrons l'ESP32 et recommençons. Nous pouvons maintenant également déconnecter l'alimentation et toujours savoir exactement à quelle fréquence l'ESP a été démarré, car cette valeur est maintenant lue à la mise sous tension et enregistrée à nouveau augmentée d'une unité.

Avec cette fonction, d'autres valeurs peuvent maintenant être enregistrées et utilisées, par ex. Données d'accès WLAN, dernier état ... trouver quelque chose.

Amusez-vous à expérimenter!

 

 

 

Esp-32Grundlagen software

7 commentaires

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?

Laisser un commentaire

Tous les commentaires sont modérés avant d'être publiés

Articles de blog recommandés

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery