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 |
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.
#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üssel, 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
#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
#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.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
}
Quellen: Espressif API Preferences
Letzte Aktualisierung: