Actualizar el firmware del PLC desde el navegador con un servidor web embebido
Tres endpoints, un servidor diminuto
Cómo funciona la subida OTA
Por qué importa en producción
Un fragmento de la implementación
Tal cual del ejemplo desplegado en el ESP32 PLC — cópialo libremente:
void setupOTA() {
server.on("/update", HTTP_POST, []() {
server.sendHeader("Connection", "close");
server.send(200, "text/plain", Update.hasError() ? "FAIL" : "OK - rebooting");
delay(1000);
ESP.restart(); // boots with the new firmware
}, []() {
HTTPUpload &up = server.upload();
if (up.status == UPLOAD_FILE_START) {
Serial.println("OTA: receiving " + up.filename);
if (!Update.begin(UPDATE_SIZE_UNKNOWN)) Update.printError(Serial);
} else if (up.status == UPLOAD_FILE_WRITE) {
if (Update.write(up.buf, up.currentSize) != up.currentSize)
Update.printError(Serial);
} else if (up.status == UPLOAD_FILE_END) {
if (Update.end(true))
Serial.println("OTA OK: " + String(up.totalSize) + " bytes");
else
Update.printError(Serial);
}
});
}El ejemplo completo es un programa entero — cabecera de conexionado, setup y bucle principal — listo para adaptar a tu aplicación.
Preguntas frecuentes
¿Es seguro dejar el endpoint OTA abierto en la red de planta?
Mantén los PLC en una VLAN aislada y añade autenticación HTTP básica a la ruta /update en producción. La red de planta nunca debería ser alcanzable desde fuera de las instalaciones.
¿Qué pasa si la subida se interrumpe a mitad?
Update.end() no llega a ejecutarse, así que la imagen nueva no se activa y el PLC continúa con el firmware actual. Simplemente reintenta la subida.
¿Puedo lanzar diagnósticos sin el navegador?
Sí. El mismo despliegue lo combina con comandos remotos MQTT, de modo que una consola Node-RED puede pedir información del sistema o listados de la SD a toda la flota, mientras el servidor web cubre el trabajo por dispositivo, como el flasheo.