Problemas en la comunicación con PLC's de Industrial Shields
ESP32 PLC21 de Industrial Shields no sube el programa: "Wrong boot mode detected" y cómo solucionarlo de verdad
Si has llegado aquí buscando el error Failed to connect to ESP32: Wrong boot mode detected (0x12)! The chip needs to be in download mode. al intentar subir un sketch a un PLC21 (o a cualquier otro modelo de la familia ESP32 PLC) de Industrial Shields desde el Arduino IDE, este post es para ti.
A veces nos cuesta varias horas encontrar la causa real, y casi toda la información que circula por internet sobre este error apunta a soluciones que, en este hardware concreto, no sirven de nada. Aquí va el resumen de lo que probamos, lo que no funcionó, y lo que finalmente lo arregló.
El síntoma
El sketch compila perfectamente. El problema aparece al subirlo:
esptool.py v4.2.1
Serial port COM3
Connecting.....................
A fatal error occurred: Failed to connect to ESP32: Wrong boot mode detected (0x12)!
The chip needs to be in download mode.
Failed uploading: uploading error: exit status 2
Este error significa que el ESP32 no ha entrado en modo bootloader (modo descarga) durante la subida. En una placa de desarrollo típica (una ESP32 DevKit, por ejemplo), esto casi siempre se soluciona manteniendo pulsado el botón BOOT mientras se pulsa RESET. Pero un PLC industrial no es una placa de prototipos, y ahí es donde empiezan los problemas.
Lo que probamos que NO solucionó nada
Antes de dar con la causa real, agotamos toda la lista de soluciones "estándar" que se recomiendan para este error en foros de Arduino y en la documentación de esptool:
- Bajar la velocidad de subida (de 921600/460800 a 115200). No cambió nada.
- Reinstalar el driver del chip USB-serie (en nuestro caso, un Silicon Labs CP210x). El driver ya estaba correctamente instalado.
- Probar varios puertos USB del PC, directos a la placa base, evitando hubs. Sin cambios.
- Desactivar el ahorro de energía del puerto USB en el Administrador de dispositivos de Windows. Sin cambios.
- Actualizar el paquete de placas de Industrial Shields en el Boards Manager del Arduino IDE. Ya estaba en la última versión disponible.
- Puentear manualmente GPIO0 a GND en el borne correspondiente antes de resetear y subir. Tampoco funcionó por sí solo.
Si estás en esta misma situación, puedes ahorrarte tiempo: ninguna de estas es la causa en este hardware, aunque es recomendable verificarlas como hicimos en PLC32Control.
La causa real: un interruptor físico, no el auto-reset por USB
En una placa de desarrollo, el auto-reset que pone el ESP32 en modo bootloader se hace automáticamente por software, a través de las líneas DTR/RTS del USB, sin que el usuario tenga que tocar nada. En el PLC21 este mecanismo automático no funciona de forma fiable (al menos con ciertos PCs/configuraciones), así que Industrial Shields ha resuelto el problema con un interruptor físico justo debajo del conector USB, en el lateral de la carcasa.
La documentación oficial de Industrial Shields para esta familia de placas habla de un procedimiento con botones "BOOT" y "EN" — pero en la práctica, en el PLC21, esto se traduce en un pequeño interruptor deslizante (no dos botones separados) más el botón de reset habitual.


El procedimiento que sí funciona
- Antes de subir el sketch, mueve el interruptor que hay debajo del conector USB hacia el lado de programación (en nuestra unidad, hacia la derecha).
- Dale a Subir en el Arduino IDE. Ahora sí debería conectar y completar la subida sin el error de "wrong boot mode".
- Una vez terminada la subida, vuelve a poner el interruptor en su posición original (hacia la izquierda, modo RUN).
- Si el sketch no arranca solo, pulsa el botón de RESET de la placa.
Con esta secuencia, la subida funciona de forma consistente, cada vez.
Por qué esto pilla a tanta gente por sorpresa
La mayoría de tutoriales y foros sobre "wrong boot mode" en ESP32 asumen una placa de desarrollo con auto-reset por software y botones BOOT/EN accesibles. En un PLC industrial montado en carril DIN, ese enfoque no es tan directo, y muchos (nosotros incluidos) pasamos horas revisando drivers, cables y configuraciones de energía antes de fijarnos en el propio interruptor de la carcasa, que estaba ahí desde el principio.
Si tienes un PLC21 u otro modelo de la familia ESP32 PLC de Industrial Shields y te encuentras con este mismo error, mira primero el interruptor junto al puerto USB antes de perder tiempo con drivers y configuraciones de Windows.
Primera consulta sin compromiso.
Cuéntame qué equipo tienes y qué quieres controlar o medir.