ESP32 Daten und Einstellungen dauerhaft speichern - AZ-Delivery

U hebt vaak gemerkt dat instellingen, variabelen of ingangen niet meer bestaan na het opnieuw opstarten van de ESP32. Vandaag laten we u zien hoe u variabelen of instellingen permanent opslaan, waarbij een stroomstoring wordt afgenomen of opnieuw worden opgestart.

Bij Arduino is er een EEPROM geheugen waar dergelijke waarden kunnen worden opgeslagen. Een ESP32 heeft niet zo'n geheugen. EsP32 heeft een flashgeheugen (vergelijkbaar met een SSD/USB-stick).

Om toegang te krijgen, gebruiken we voorkeuren die zijn opgenomen in de ESP-bibliotheek. Als u deze bibliotheek nog niet op uw computer hebt geïnstalleerd, raadpleegt u dit e-book: ESP32 Lora module met OLED

Laten we beginnen met een nieuw Arduino IDE-project en voeg deze code in:

 

#include <Voorkeuren.H>

Voorkeuren Voorkeuren;                         Void Setup() {   Seriële.Beginnen(115200);   Seriële.println();   Voorkeuren.Beginnen("AZ", Valse);                         Map az maken/gebruiken   voorkeuren.duidelijk();                                  Alle "bestanden" onder de az-map verwijderen   voorkeuren.verwijderen("Start");                          Start 'Bestand' Verwijderen   Unsigned Int Teller = Voorkeuren.getUInt getUInt("Begin", 0); "Bestand" Start lezen en schrijven in variabele teller                                                           " 0": als start niet bestaat om standaardwaarde 0 door te geven

 Teller++;                                               Variabele teller met 1 verhogen   Seriële.Printf("Aantal starts: %u'n", Teller);          Variabele teller Seriële uitvoer   Voorkeuren.putUInt("Begin", Teller);                  Variabele teller opslaan onder 'Bestand' starten   Voorkeuren.Einde();                                      Voorkeuren beëindigen   Seriële.println("Herstart in 10 seconden...");   Vertraging(10000);                                           Wachttijd 10000ms = 10s   Ihb.Opnieuw starten();
}

Void Lus() {}

 

Wat doet deze code?

Eerst maken we een nieuwe map of gebruiken we deze als de huidige map.

Voorkeuren.Beginnen("AZ", Valse);  

Als u alle inhoud in de map az wilt verwijderen, gebruikt u:

Voorkeuren.Duidelijk();  

 

U ook een specifiek bestand verwijderen:

Voorkeuren.Verwijderen("Begin");  

 

Met de opdrachten

Voorkeuren.putUInt

integer-gegevens kunnen worden opgeslagen en

Voorkeuren.getUInt getUInt

opgeslagen gehele gegevens kunnen opnieuw worden uitgelezen.

Daarnaast zijn er de volgende extra mogelijkheden (String, Long...) Bestanden opslaan en lezen:

putChar putChar
putUChar
putShort
putUShort
putInt
putUInt
putLong
putULong
putLong64
putULong64
putFloat
putDouble
putBool putBool
putString
putString
putBytes
Getchar (Getchar)
getUChar (getUChar)
getShort
getUShort
getInt
getUInt getUInt
getLong
getULong getULong
getLong64
getULong64
Getfloat
Getdouble
getBool (getBool)
Getstring
Getstring
Ontvangbytes

 

Unsigned Int Teller = Voorkeuren.getUInt getUInt("Begin", 0);

met getUInt lezen we het bestand "Start" en schrijven het in de variabele teller. Als het bestand 'Start' niet bestaat, wordt een standaardwaarde genomen, in dit geval een 0. De standaardwaarde wordt na het bestand met een komma toegevoegd.

Nadat we de variabele hebben verhoogd en uitgevoerd, slaan we de variabele teller op in het begin van het bestand:

Voorkeuren.putUInt("Begin", Teller);  

Nadat we alles hebben opgeslagen, sluiten we onze map az weer, met het commando:

Voorkeuren.Einde();  

Nu herstarten we de ESP32 en beginnen we opnieuw vanaf het begin. We kunnen nu ook de voeding loskoppelen en weten altijd precies hoe vaak de ESP is gestart, omdat deze waarde nu wordt uitgelezen wanneer ingeschakeld en opnieuw opgeslagen met een verhoogd.

Met deze functie kunnen nu ook andere waarden worden opgeslagen en gebruikt, bijvoorbeeld WLAN-toegangsgegevens, laadstatus... laat iets in me opkomen.

Veel plezier experimenteren!

 

 

 

Esp-32Grundlagen software

7 Reacties

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?

Laat een reactie achter

Alle opmerkingen worden voor publicatie gecontroleerd door een moderator

Aanbevolen blogberichten

  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