Ir al contenido

← Todas las funcionalidades

Piso móvil hidráulico (app BLE)ESP32 PLC 38RNVSDatalogging

Contadores de máquina persistentes en un PLC ESP32 con NVS (Preferences)

Los totales de una máquina no valen nada si desaparecen con cada ciclo de alimentación. Con NVS Preferences del ESP32 el PLC conserva su número de serie, los contadores de ciclos de carga/descarga, los totales acumulados, el volumen de aceite y un flag de activación en la flash interna — sin tarjeta SD y sin batería. Este patrón procede de un despliegue real en una máquina hidráulica móvil alimentada desde un camión, que se apaga bruscamente varias veces al día y cuyos contadores de garantía no deben ponerse a cero jamás.

Un namespace, claves tipadas

La librería Preferences envuelve la partición NVS del ESP32 en una API clave-valor sencilla: 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

La flash NVS soporta un número finito de ciclos de escritura, así que escribir en cada evento es una forma lenta de matar el chip. El ejemplo activa un dirty flag cuando cambia un contador y hace commit como mucho una vez cada pocos segundos. Un corte de alimentación puede costarte, en el peor caso, los últimos segundos de datos — un intercambio aceptable a cambio de años de vida de la flash.

Contadores que la app móvil puede leer

En la máquina completa estos valores se reportan por BLE como tramas [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.

Funcionalidades relacionadas