Contadores de máquina persistentes en un PLC ESP32 con NVS (Preferences)
Un namespace, claves tipadas
putInt, putFloat, putString y putBool bajo un único namespace "nvdata", con getters equivalentes que aceptan un valor por defecto. Al arrancar, el firmware lo relee todo en una sola pasada, de modo que un PLC recién flasheado arranca limpio a cero mientras que una unidad que vuelve del campo continúa exactamente donde lo dejó — el mismo código, sin casos especiales.Escrituras diferidas que protegen la flash
Contadores que la app móvil puede leer
[C1] y [C2], de modo que el teléfono de un técnico muestra los ciclos de carga y descarga acumulados sin abrir el armario eléctrico ni conectar un portátil. El mismo almacenamiento respalda también el contador de reinicios del watchdog hardware y el flag de activación usado en la puesta en marcha, lo que convierte a NVS, en la práctica, en el libro de registro integrado y resistente a manipulaciones de la máquina.Un fragmento de la implementación
Tal cual del ejemplo desplegado en el ESP32 PLC 38R — cópialo libremente:
void setup() {
Serial.begin(115200);
pinMode(BTN_LOAD, INPUT);
pinMode(BTN_UNLOAD, INPUT);
loadNVS(); // the counters come back exactly as they were after every reboot
Serial.println("=== Persistent counters (NVS) ===");
Serial.println("Serial: " + serialNum);
Serial.println("Loads: " + String(counterLoad));
Serial.println("Unloads: " + String(counterUnload));
Serial.println("Lifetime: " + String(counterLife));
Serial.println("Oil: " + String(oilVolume, 1) + " L");
Serial.println("Activated: " + String(activated ? "yes" : "no"));
}El ejemplo completo es un programa entero — cabecera de conexionado, setup y bucle principal — listo para adaptar a tu aplicación.
Preguntas frecuentes
¿Cuántos ciclos de escritura aguanta la flash NVS del ESP32?
La flash subyacente soporta en torno a 100.000 ciclos de borrado por sector, y NVS reparte el desgaste por toda su partición. Con escrituras diferidas cada pocos segundos obtienes muchos años de servicio en la práctica.
¿Qué pasa con mis contadores cuando subo firmware nuevo?
Nada. NVS vive en su propia partición de flash, así que las actualizaciones OTA y el reflasheo por USB de la aplicación dejan intactos los valores guardados, salvo que borres explícitamente toda la flash.
¿Es Preferences mejor que la emulación de EEPROM en el ESP32?
Sí. La librería EEPROM en el ESP32 es una capa de compatibilidad sobre un único blob de NVS, mientras que Preferences ofrece de forma nativa claves tipadas, wear leveling y commits atómicos.