Provides ESP32-compatible Preferences API for a wider variety of platforms:
- ESP8266 using LittleFS
- RP2040 boards with Pico core
- Realtek boards with Ameba Arduino SDK
- Arduino Nano 33 IoT, MKR1010, MKR VIDOR using WiFiNINA storage
- Particle: Argon, Boron, Xenon, Tracker, BSOM, P2 (Photon 2)
Available from: Arduino Library Manager
, PlatformIO
, Particle Build
#include <Preferences.h>
Preferences prefs;
void setup() {
Serial.begin(115200);
prefs.begin("my-app");
int counter = prefs.getInt("counter", 1); // default to 1
Serial.print("Reboot count: ");
Serial.println(counter);
counter++;
prefs.putInt("counter", counter);
}
void loop() {}
Preferences are stored in the internal flash filesystem in a bunch of /nvs/{namespace}/{property}
files.
Filesystem should handle flash wearing, bad sectors and atomic rename
file operation.
LittleFS
handles all that, so this is the default FS driver for ESP8266.SPIFFS
use is possible, but it is discouraged.- Particle Gen3 devices also operate on a built-in
LittleFS
filesystem. - Arduino Nano and MKR devices use the storage of the U-blox NINA module.
Check out ESP32 Preferences library API. Differences:
partition_label
argument is not supported inbegin()
getType()
andfreeEntries()
methods are not supported (returning dummy values)putBytes()
andputString()
allow writing empty values (length = 0)put*()
andget*()
operations don't fail if the existing value has a different type
Important
Keys are ASCII strings. The maximum key length is 15 characters
clear()
is not working on Arduino Nano 33 IoT, MKR1010, MKR VIDOR. This cannot be implemented, as WiFiNINA storage doesn't provide any API to remove or enumerate directories (along with other bugs). If you need to clear a namespace on these devices, you'll have to erase each key individually usingremove()
.