🛠 ADC2, le piège quand le Wi-Fi est actif

ESP32 (original, clase ESP32-WROOM-32) · avance · Schéma : IMG-esp32-avance-3-adc2-piege-wifi-calibration.svg — Deux traces d'oscilloscope : l'ADC1 suit le potentiomètre, l'ADC2 reste à plat dès que le Wi-Fi démarre

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

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

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales