ESP32 gegevens en instellingen permanent bewaren

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

5 Kommentare

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?

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert

Aanbevolen blog berichten

  1. Installeer ESP32 nu van de raad van bestuur
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - ESP Programmeren via Wi-Fi