
Einführung
Der ESP32 kann einen Teil seines Flash-Speichers für die permanente Speicherung von Daten verwenden. Die gespeicherten Daten bleiben auch nach der Trennung von der Stromzufuhr oder nach einem Reset erhalten. Der NVS (Non-volatile storage = nicht flüchtiger Speicher) kann alle Typen von ⇒Variablen schreiben und lesen.
Ein permanenter Speicher ist hilfreich um die Daten des heimischen WLANs dauerhaft abzuspeichern, oft verwendete Variablen verfügbar zu machen oder den letzten Zustand einer Hardwarekomponente zu merken.
Die Bibliothek erwartet die Definition eines Namensraumes. Dieser kann für verschiedene Zwecke unterschiedlich sein. put speichert einen Schlüssel und den dazugehörigen Wert, get liest beides aus dem Speicher. Bei jeder put- und get-Operation muss dieses Schlüssel-Wert-Paar angegeben werden.
Funktionen der Bibliothek Preferences
| Schlüsselwort | Parameter | Aktion |
| begin(Namensraum, readonly); | readonly = true -> nur lesen readonly = false -> lesen und schreiben | Preferences starten |
| end(); | aktuellen Namensraum schließen | |
| clear(); | alle Schlüssel-Wert-Paare des aktuellen Namensraums löschen | |
| remove(Schlüssel); | ein Schlüssel-Wert-Paar löschen | |
| putInt(Schlüssel, Wert) ; putUInt(Schlüssel, Wert); | Variablen vom Typ int und unsigned int schreiben | |
| putBool(Schlüssel, Wert); | Variable vom Typ bool schreiben | |
| putString(Schlüssel, Zeichenkette); | Variable vom Typ String schreiben | |
| getInt(Schlüssel, Wert) ; getUInt(Schlüssel, Wert); | Variablen vom Typ int und unsigned int lesen | |
| getFloat(Schlüssel, Wert) ; getDouble(Schlüssel, Wert); | Variablen vom Typ float und double lesen | |
| getBool(Schlüssel, Wert); | Variable vom Typ bool lesen | |
| getString(Schlüssel, Zeichenkette); | Variable vom Typ String lesen |
Konfiguration der Mikrocontroller
Variable speichern und lesen
Das Programm legt verschiedene Variable (int, bool und String) an und schreibt sie in den Speicher. Die int-Variable wird jeweils um 1 erhöht, die boolsche-Variable verändert jeweils ihren Zustand von true zu false und der String wird wechselweise in Großbuchstaben und in Kleinbuchstaben dargestellt.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | #include “Preferences.h” // Namensraum festlegen Preferences Daten; // verschiedene Variable String Passwort = “geheimesPasswort”; String LEDStatus; int Zaehler = 0; bool LED = false; // Pause zwischen der Darstellung im Seriellen Monitor int Wartezeit = 5000; void setup() { Serial.begin(9600); delay(1000); /* Preferences starten: Namensraum festlegen readonly: true -> nur lesen, false -> lesen und schreiben */ Daten.begin(“Werte”, false); // Namensraum leeren Daten.clear(); } void loop() { // Werte Daten Wertepaar: Name des Schlüssels, Wert (Standard = 0) */ Daten.putUInt(“Zaehler”, Zaehler); Daten.putString(“Passwort”, Passwort); Daten.putBool(“StatusLED”, LED); Serial.println(“——————————”); Serial.println(“Nächste Werte in ” + String(Wartezeit / 1000) + ” Sekunden”); // Werte holen Zaehler = Daten.getUInt(“Zaehler”, 0); Passwort = Daten.getString(“Passwort”, “”); LEDStatus = Daten.getBool(“StatusLED”, 0); // Werte anzeigen Serial.println(“Zähler: ” + String(Zaehler)); Serial.println(“Passwort: ” + Passwort); Serial.println(“Status der LED: ” + String(LED)); delay(Wartezeit); // Zaehler um 1 erhöhen // Status von LED “umkehren” // aus true wird false, aus false wird true Zaehler++; LED = !LED; // wenn LED = true Passwort in Großbuchstaben umwandeln // wenn LED = false Passwort in Kleinbuchstaben umwandeln if (LED) Passwort.toUpperCase(); else Passwort.toLowerCase(); } |
WLAN-Einstellungen speichern
Auch die WLAN-Einstellungen können im Speicher abgelegt werden, damit wird die Angabe der Daten im Kopf des Programms überflüssig. Zunächst müssen die Daten geschrieben werden. Das Programm muss nur einmal hochgeladen werden.
Daten schreiben
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #include “Preferences.h” // Namensraum der Preferences festlegen Preferences Speichern; // WiFi-Daten char Router[] = “Router_SSID”; char Passwort[] = “xxxxxxxx”; void setup() { Serial.begin(9600); Serial.println(); /* Preferences starten: Namensraum festlegen readonly: true -> nur lesen, false -> lesen und schreiben */ Speichern.begin(“WiFi_Daten”, false); // Speicher leeren Speichern.clear(); // putString -> Daten schreiben Speichern.putString(“RouterSSID”, Router); Speichern.putString(“Passwort”, Passwort); // getString -> Daten lesen und anzeigen Serial.println(“Router SSID: ” + Speichern.getString(“RouterSSID”, Router)); Serial.println(“Passwort: ” + Speichern.getString(“Passwort”, Passwort)); Speichern.end(); } void loop() { // bleibt leer, Programm läuft nur einmal } |
Daten lesen und WiFi-Verbindung aufbauen
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #include “WiFi.h” #include “Preferences.h” // Name der Preferences festlegen Preferences Daten; String Router; String Passwort; void setup() { Serial.begin(9600); delay(1000); /* Preferences starten: Name festlegen true -> nur lesen */ Daten.begin(“WiFi_Daten”, true); // Daten lesen und den Strings zuordnen Router = Daten.getString(“RouterSSID”, Router); Passwort = Daten.getString(“Passwort”, Passwort); // WiFi starten WiFi.mode(WIFI_STA); WiFi.begin(Router, Passwort); while (WiFi.status() != WL_CONNECTED) { delay(200); Serial.print(“.”); } // Verbindung im Seriellen Monitor anzeigen Serial.println(); Serial.print(“Verbunden mit ”); Serial.println(Router); Serial.print(“IP über DHCP: ”); Serial.println(WiFi.localIP()); } void loop() { // bleibt leer, Programm läuft nur einmal } |
Quelle
Letzte Aktualisierung: