Logotipo de sheen.bot

← Ideas y reflexiones

Por qué el sensor analógico del ESP32 se vuelve loco cuando se conecta el wifi

15 oct 2026·Sheen Robotics
Por qué el sensor analógico del ESP32 se vuelve loco cuando se conecta el wifi

Si tu sensor analógico arroja valores sin sentido en cuanto se inicia el wifi, lo has conectado a un pin ADC2. La radio wifi del ESP32 monopoliza el ADC2; cambiar el sensor al ADC1 soluciona el problema de inmediato.

Tu sensor analógico devuelve valores limpios y fiables mientras haces pruebas a través del puerto serie por USB. En el instante en que tu código ejecuta WiFi.begin() y establece la conexión, las lecturas oscilan de forma errática, se quedan clavadas en 4095 o caen directamente a cero. El sensor no está dañado, no te falta ninguna resistencia de polarización (pull-up) y la placa no es defectuosa. Simplemente has conectado el sensor a un pin del ADC2.

El cuello de botella del silicio: ADC1 frente a ADC2

El silicio estándar del ESP32 contiene dos periféricos convertidores analógico-digital (ADC) de 12 bits independientes: ADC1 y ADC2. Entre ambos, dan servicio a un máximo de 18 pines de entrada analógica en el chip base, aunque las placas de desarrollo solo exponen un subconjunto de ellos.

El ADC1 funciona de manera independiente. En cambio, el ADC2 comparte recursos de hardware internos con el subsistema de radio wifi y Bluetooth del ESP32. Cuando el controlador wifi se activa —ya sea para escanear un SSID, gestionar la negociación DHCP o transmitir un paquete de telemetría MQTT—, la pila de red reclama acceso exclusivo al ADC2 para calibrar la radiofrecuencia y realizar mediciones internas de potencia.

Si el código llama a analogRead() en un pin del ADC2 mientras el controlador wifi está en ejecución, este interrumpe o bloquea la lectura. En entornos como Arduino Core y MicroPython, esto se manifiesta de dos formas: la función de lectura falla y devuelve un valor nulo o basura, o la ráfaga de radiofrecuencia inyecta un fuerte ruido eléctrico directamente en el periférico, haciendo oscilar la conversión entre la saturación (4095) y masa (0).

Reasignación de pines: pines seguros frente a no seguros

La solución no requiere ningún parche en el código: basta con desconectar el cable de señal del sensor del ADC2 y pasarlo a un pin del ADC1. Los canales del ADC1 son eléctricamente independientes de la banda base wifi y siguen realizando conversiones de forma fiable con independencia de la actividad de la red.

Unidad ADCNúmeros de GPIO¿Seguro con wifi?Notas para el aula
ADC1GPIO 32, 33, 34, 35, 36 (VP), 39 (VN)SíSeguro para cualquier sensor analógico mientras el wifi transmite. Ten en cuenta que los GPIO 34, 35, 36 y 39 son pines exclusivamente de entrada (no disponen de resistencias internas de pull-up ni pull-down).
ADC2GPIO 0, 2, 4, 12, 13, 14, 15, 25, 26, 27NoInutilizable para muestreo analógico una vez que se llama a WiFi.begin(). Muchos de ellos actúan además como pines de arranque (bootstrapping).

Los GPIO 36 y 39 suelen venir etiquetados como VP y VN en las placas habituales NodeMCU/DevKit de 30 y 38 pines del ESP32. Estos pines, junto con los GPIO 32, 33, 34 y 35, son tus opciones principales para la captura de datos analógicos.

Ejemplo práctico de asignación de pines

Pensemos en un proyecto típico de IoT en el aula: un monitor de plantas automatizado que registra la humedad del suelo o un sensor de luz ambiental. Un alumno conecta una sonda analógica de humedad del suelo al GPIO 4 (canal 0 del ADC2) porque queda justo al lado del pin de tierra. En pruebas sin conexión, el monitor serie muestra valores estables de entre 1500 y 2800. En cuanto la placa se conecta al punto de acceso del centro educativo para enviar datos a un panel de control, las lecturas se disparan a 4095.

Para solucionar el problema:

  • Cambia el cable puente (jumper) de señal del GPIO 4 al GPIO 34 (o al 32, 33, 35).
  • Actualiza la definición del pin en el código: const int sensorPin = 34;.
  • Deja el GPIO 4 libre para salidas digitales, como activar un módulo de relé o un transistor que controle una bomba sumergible de 5V.

Si estás diseñando estaciones multisensor para monitorización ambiental, puedes consultar hardware adaptado al currículo y esquemas de patillaje en Sheen IoT.

Factor secundario: caída de tensión en la línea de alimentación

Si has cambiado el sensor al ADC1 (por ejemplo, al GPIO 32) y sigues observando pequeños picos erráticos durante la transmisión, estás ante un problema de integridad de alimentación y no de bloqueo del ADC. Cuando el ESP32 enciende su transmisor de radio, el consumo de corriente se dispara bruscamente de ~50mA a más de 300–400mA durante unos pocos milisegundos.

Si la placa se alimenta desde un puerto USB ruidoso en un carrito antiguo de ordenadores portátiles del aula, o mediante cables de prototipado finos en una protoboard, la línea de alimentación de 3.3V sufre caídas momentáneas. Dado que las conversiones analógicas miden el voltaje en relación con la línea de alimentación (la tensión de referencia), una caída en esta hace que los voltajes analógicos externos parezcan dispararse hacia arriba. Colocar un condensador electrolítico de 100µF entre las líneas de 3V3 y GND en la protoboard mitiga por completo estos picos transitorios provocados por la radio.

#esp32#iot#electrónica#resolución de problemas#sensores

Más de Ideas y reflexiones