Ir al contenido

← Todas las funcionalidades

Monitorización textil (tejeduría)ESP32 PLCSDDatalogging

Datalogging en SD con ficheros diarios que sobrevive a los cortes de red

El datalogging en tarjeta SD es la póliza de seguros de todo nodo IoT industrial: cuando el WiFi o el broker se caen, los datos tienen que aterrizar en algún sitio. Este ejemplo para el PLC ESP32 añade cada registro JSON a un fichero con el nombre de la fecha actual — /2026-06-10.json — de modo que la rotación ocurre sola a medianoche. El patrón procede de un despliegue real de monitorización de máquinas textiles donde meses de datos de producción sobrevivieron a todos los incidentes de red.

Un fichero por día, nombrado por el RTC

El nombre del fichero se construye a partir del RTC hardware — año, mes, día — así que a medianoche empieza un fichero nuevo sin ninguna lógica adicional. Los ficheros diarios mantienen cada fichero lo bastante pequeño para subirlo por HTTP en una sola petición, hacen trivial la recuperación manual (saca la tarjeta, lee el día que necesites) y dan al backend una clave de particionado natural. Si el RTC no tiene hora válida, los registros caen a un fichero de rescate en lugar de perderse.

Escrituras append-only con remontaje en caliente

Cada registro es una única línea JSON añadida con FILE_APPEND, y el fichero se cierra inmediatamente tras cada escritura — así que un corte de corriente súbito te cuesta como mucho la línea en vuelo. Si una escritura falla por el motivo que sea, el código marca la tarjeta como no disponible y reintenta discretamente SD.begin() en el siguiente intento, con lo que una tarjeta que se recupera (o que un técnico sustituye) se remonta al vuelo sin reiniciar nunca el PLC.

Un inventario para la recuperación posterior

Una pequeña función de listado de directorio recorre la raíz de la tarjeta e informa de cada fichero .json junto con su tamaño — el inventario propio del dispositivo de lo que sigue almacenado en local. En el sistema de producción esto es exactamente lo que el comando MQTT remoto "list" devuelve al operador, y exactamente lo que el módulo de subida HTTP recorre para empujar los días pendientes al concentrador Node-RED cuando vuelve la red.

Un fragmento de la implementación

Tal cual del ejemplo desplegado en el ESP32 PLC — cópialo libremente:

void setup() {
  Serial.begin(115200);

  RTC.begin();                        // in production: synchronized via NTP
  sdAvailable = SD.begin();
  Serial.println(sdAvailable ? "SD mounted" : "SD NOT available");

  listFiles();                        // which days are still pending upload
}

El ejemplo completo es un programa entero — cabecera de conexionado, setup y bucle principal — listo para adaptar a tu aplicación.

Preguntas frecuentes

¿Cuánto histórico cabe en una tarjeta microSD?

Una máquina con actividad que genera una línea JSON cada pocos segundos produce unos pocos megabytes al día. Incluso una tarjeta industrial pequeña de 8 GB almacena años de datos, así que la capacidad nunca es el factor limitante.

¿Qué pasa si se corta la corriente durante una escritura?

Como cada registro se añade y el fichero se cierra de inmediato, el peor caso es perder la línea que se estaba escribiendo. La corrupción de FAT32 es rara con este patrón, y la organización en ficheros diarios limita cualquier daño a un solo día.

¿Cómo recupero en remoto los ficheros almacenados en la tarjeta?

Combina este módulo con una rutina de subida por HTTP POST, en la que el PLC envía por streaming el fichero diario solicitado a un endpoint del servidor con basic auth, disparado por un comando MQTT, para que nadie tenga que tocar la tarjeta en planta.

Funcionalidades relacionadas