Logotipo de sheen.bot

← Ideas y reflexiones

¿Por qué se activa el relé al arrancar el ESP32? (Y cómo solucionarlo)

31 oct 2026·Sheen Robotics
¿Por qué se activa el relé al arrancar el ESP32? (Y cómo solucionarlo)

Los relés conectados a un ESP32 sufren microactivaciones al arrancar porque los módulos activos a nivel bajo se disparan cuando los pines de configuración («strapping») quedan flotantes o emiten pulsos en el reinicio. Utiliza pines GPIO seguros y resistencias pull-up adecuadas para evitar conmutaciones accidentales.

El relé se activa durante una fracción de segundo al arrancar porque es casi seguro que estés utilizando un módulo de relé activo a nivel bajo (active-low) conectado a un pin del ESP32 que emite una señal PWM de depuración de alta frecuencia, queda en estado flotante o actúa como pin de configuración («strapping pin») mientras el microcontrolador se reinicia. Durante los 100 a 400 milisegundos que transcurren antes de que tu código ejecute digitalWrite(pin, HIGH), el optoacoplador de la placa de relés detecta una ruta a tierra y conmuta la bobina.

En un invernadero escolar o en un proyecto de domótica para el aula, un microcorte momentáneo suena como un simple clic inofensivo. En la práctica, tras una conmutación habitual por cortes de suministro eléctrico programados («load-shedding») o un reinicio por caída de tensión («brownout»), ese fallo de un cuarto de segundo puede inundar una bandeja de semilleros desatendida, enviar un pulso a un motor de 12V CC o activar un dispositivo de red de alta intensidad.

Anatomía del microdisparo en relés activos a nivel bajo

La mayoría de los módulos de relé para aficionados que se venden en Sudáfrica son «activos a nivel bajo» (active-low). Su circuito de entrada contiene un diodo optoacoplador cuyo ánodo está conectado de forma fija a la línea de alimentación de 5V o 3,3V a través de una resistencia integrada. Para activar el relé, el pin del microcontrolador debe caer a nivel bajo, a 0V (tierra), permitiendo que fluya corriente a través del diodo.

Esto genera un modo de fallo crítico al encenderse:

  • Estado de alta impedancia (flotante): cuando el ESP32 se enciende o se recupera de una caída de tensión, sus pines de entrada/salida de propósito general (GPIO) se inicializan como entradas de alta impedancia. Si alguna resistencia pull-down interna o externa arrastra ese pin hacia tierra, el optoacoplador conducirá de inmediato.
  • Registro serie del gestor de arranque en ROM: por defecto, el gestor de arranque («bootloader») interno del ESP32 envía mensajes de depuración a 115.200 baudios a través de pines específicos en cuanto recibe alimentación. Para un optoacoplador, esta ráfaga de lógica digital parece una señal activa.
  • Ejecución retardada de setup(): hasta que el núcleo de FreeRTOS arranca y llega a la rutina setup() de tu programa —donde configuras explícitamente pinMode() y mantienes el pin en nivel ALTO (HIGH)—, el estado del pin a nivel de hardware depende exclusivamente de los valores predeterminados de fábrica del chip de Espressif.

Los pines conflictivos: pines de arranque («strapping») y GPIO con artefactos de inicio

El ESP32 estándar (WROOM-32) dispone de varios pines multipropósito que jamás deberías conectar directamente a un actuador o relé sin circuitería externa de apoyo. En concreto, evita utilizar estos pines para conmutar cargas:

Pin GPIOComportamiento por defecto al encenderPor qué falla con relés
GPIO 0Pull-up interno débil; pin de configuración («strapping») para el bootloaderPasa a nivel ALTO, pero el ruido o las cargas bajas durante el arranque fuerzan el modo de flasheo.
GPIO 2Pull-down interno débil; pin de strapping; conectado al LED integradoPasa a nivel bajo en el reinicio; dispara relés activos a nivel bajo al instante durante el encendido.
GPIO 5Emite un pulso de sincronización PWM durante el reinicio (pin de strapping)Provoca un repiqueteo o traqueteo audible y rápido en los contactos del relé durante el arranque.
GPIO 12Pull-down interno débil; pin de strapping (selección de tensión)Pasa a nivel bajo en el reinicio; dispara módulos activos a nivel bajo. Forzarlo a nivel alto externamente puede impedir el arranque.
GPIO 15Emite registros de depuración de la ROM (onda cuadrada PWM silenciosa) al arrancarActiva relés activos a nivel bajo hasta que el firmware se inicializa por completo.

Los pines GPIO 34, 35, 36 (VP) y 39 (VN) son pines de solo entrada; carecen por completo de etapas de salida internas y no pueden controlar un módulo de relé bajo ninguna circunstancia.

Pines GPIO seguros que conviene utilizar

Si buscas un comportamiento de arranque predecible y silencioso, sin rebotes en los contactos al restablecerse la alimentación, conecta la línea de señal del relé a uno de los pines de propósito general verdaderamente neutros:

  • GPIO 18
  • GPIO 19
  • GPIO 21
  • GPIO 22
  • GPIO 23
  • GPIO 25, 26, 27, 32, 33

Ninguno de estos pines emite tráfico serie de depuración de la ROM ni actúa como pin crítico de configuración del modo de arranque durante el primer milisegundo de inicio del silicio.

Corrección en el firmware: el orden de las operaciones importa

Incluso en un pin seguro, el código estándar al estilo Arduino suele introducir un microerror transitorio debido al orden en que se escriben las instrucciones. Muchos alumnos escriben:

pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH); // En activo a nivel bajo: HIGH = APAGADO

En el instante en que se ejecuta pinMode(..., OUTPUT), el ESP32 establece por defecto el registro de salida a LOW (0V) durante varios microsegundos hasta que se procesa la siguiente línea. En optoacopladores sensibles, esa caída de unos microsegundos basta para activar la bobina.

Invierte el orden en tu rutina de configuración para precargar el búfer de salida antes de que el pin pase a comportarse como salida:

digitalWrite(RELAY_PIN, HIGH); // Preconfigura el estado en APAGADO
pinMode(RELAY_PIN, OUTPUT); // Activa ahora la etapa de salida

La solución por hardware: resistencias pull-up externas

El firmware por sí solo no puede proteger la carga durante un bloqueo inesperado del ESP32, una caída de tensión por debajo del umbral de «brownout» de 2,7V o la subida inicial de tensión en la línea de alimentación. Si tu relé controla una bomba de agua inductiva o un cierre electromagnético de seguridad en el aula, recurre al hardware.

Coloca una resistencia pull-up externa de 4,7 kΩ o 10 kΩ entre el pin de señal del ESP32 y la línea de 3,3V. Esto garantiza que la puerta o el optoacoplador se mantengan en nivel alto mientras arranca el microcontrolador, evitando que el pin quede flotante y caiga en la zona de disparo activo. Otra opción es cambiar a un módulo de relé activo a nivel alto (active-high), donde una entrada flotante permanece de forma inocua a 0V hasta que el código aplica expresamente 3,3V.

Para los docentes que diseñan sistemas automatizados en el aula, bancos de prueba o implementaciones de IoT escolar que deban tolerar cortes de energía imprevistos sin fallos, Sheen Robotics ofrece esquemas de referencia y módulos curriculares a través de Sheen IoT para ayudar a que tus alumnos diseñen sistemas robustos desde la propia mesa de trabajo.

#esp32#electrónica#iot#relés#educación stem

Más de Ideas y reflexiones