🛠 ADC2, le piège quand le Wi-Fi est actif
Objetivos
Demostrar visualmente la trampa documentada: el ADC2 del ESP32 (GPIO2, 4, 12-15, 17-19) es inutilizable en cuanto funciona el Wi-Fi, ya que el controlador de radio se lo reserva. Compararás las lecturas del ADC1 y del ADC2 antes y después de la conexión Wi-Fi, y luego abordarás la calibración del ADC de 12 bits (atenuación, variabilidad entre tarjetas, eFuse).
Material
- 1 tarjeta ESP32 DevKit v1
- 1 potenciómetro en GPIO4 (ADC2_CH0), 1 en GPIO34 (ADC1_CH6)
- Acceso a Wi-Fi de 2,4 GHz
Código completo
#include <WiFi.h>
const uint8_t PIN_ADC2 = 4; // ADC2_CH0
const uint8_t PIN_ADC1 = 34; // ADC1_CH6, entree seule
void setup {
Serial.begin(115200);
analogSetPinAttenuation(PIN_ADC2, ADC_11db);
analogSetPinAttenuation(PIN_ADC1, ADC_11db);
Serial.println(F("-- Avant Wi-Fi --"));
Serial.printf("ADC2 GPIO4 : %d | ADC1 GPIO34 : %d\n",
analogRead(PIN_ADC2), analogRead(PIN_ADC1));
WiFi.mode(WIFI_STA);
WiFi.begin("MON_SSID", "MA_CLE");
uint32_t t0 = millis;
while (WiFi.status != WL_CONNECTED && millis - t0 < 10000) delay(200);
Serial.printf("Connecte : %s\n",
WiFi.status == WL_CONNECTED ? "oui" : "non");
}
void loop {
Serial.printf("Wi-Fi actif -> ADC2 : %d | ADC1 : %d\n",
analogRead(PIN_ADC2), analogRead(PIN_ADC1));
delay(1000);
}
Verificación esperada
Antes del Wi-Fi, ambas lecturas siguen los potenciómetros. Una vez conectado, la lectura del ADC2 se congela (0 o un valor fijo absurdo) mientras que el ADC1 continúa variando con normalidad: la coexistencia ADC2/Wi-Fi está bien documentada y no es negociable.
Errores frecuentes
- Concluir que hay un «pin muerto»: el ADC2 no está averiado, el controlador simplemente deniega el acceso mientras el Wi-Fi está activo.
- Diseñar la medición de batería de un producto Wi-Fi en GPIO2 o GPIO4: cablear el divisor de voltaje y la medición en GPIO32-39 (ADC1, solo entradas).
- Confiar en el valor bruto de 12 bits: el ADC es no lineal en los extremos del rango y varía de una tarjeta a otra; calibrar con dos puntos o utilizar esp_adc_cal_characterize (eFuse).
- Olvidar que GPIO2 es también un pin de strapping: un divisor de voltaje permanente en él puede impedir el arranque.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht22.inoArduinooled-i2c.inoArduinoserveur-web.inoArduino