preferences.ino

Arduino Nano ESP32 · Archivo : preferences.ino · Lenguaje : Arduino · Uso : Stocker identifiants et réglages en NVS

El ESP32 no tiene EEPROM pero sí una partición NVS en la flash: la librería Preferences guarda ahí claves y valores con desgaste repartido. Este sketch persiste un ajuste editable por serie: la base limpia de una configuración de producto.

Hardware

Un Arduino Nano ESP32 (ESP32-S3 de doble núcleo, Wi-Fi 2,4 GHz + Bluetooth Low Energy, formato físico compatible con el Nano, USB nativo, pines de 3,3 V únicamente). Nano ESP32 sola; la NVS es una partición de la flash embarcada (hasta ~200 KB según particionado).

Cableado

Sin cableado; prueba "seuil=700" en el monitor serie y reinicia.

Funcionamiento

prefs.begin(namespace, readOnly) abre un almacén estanco; los put* escriben en flash con wear-leveling interno. Los get* con valor por defecto cubren el primer arranque.

Ejecución

Instala el paquete Arduino ESP32 Boards (o sigue la guía oficial del Nano ESP32), selecciona Arduino Nano ESP32 y carga. Los pines son de 3,3 V: nunca envíes 5 V a una entrada. El monitor serie usa el USB nativo.

Variantes

Guarda las contraseñas WiFi en un namespace aparte, o borra todo (prefs.clear()) con un botón mantenido al arrancar para un reset de fábrica.

preferences.ino

// La NVs de l'ESP32 (partition flash) remplace l'EEPROM des AVR.
// La lib Preferences offre un key-value persistant simple.
#include <Preferences.h>

Preferences prefs;

void setup() {
  Serial.begin(115200);
  prefs.begin("config", false); // namespace ferme

  String ssid = prefs.getString("ssid", "");
  int seuil = prefs.getInt("seuil", 512);
  bool premier = prefs.getBool("deja", false);

  if (!premier) {
    Serial.println(F("Premier demarrage : reglages par defaut"));
    prefs.putString("ssid", "MonReseau");
    prefs.putInt("seuil", 512);
    prefs.putBool("deja", true);
  }
  Serial.print(F("ssid=")); Serial.print(ssid);
  Serial.print(F(" seuil=")); Serial.println(seuil);
  prefs.end();
}

void loop() {
  static String ligne = "";
  while (Serial.available()) {
    char c = Serial.read();
    if (c == '\n') {
      if (ligne.startsWith("seuil=")) {
        prefs.begin("config", false);
        prefs.putInt("seuil", ligne.substring(6).toInt());
        prefs.end();
        Serial.println(F("persiste"));
      }
      ligne = "";
    } else ligne += c;
  }
}

← Volver a la ficha