🛠 ADC2, le piège quand le Wi-Fi est actif
Objectifs
Démontrer de visu le piège documenté : l'ADC2 de l'ESP32 (GPIO2, 4, 12-15, 17-19) est inutilisable dès que le Wi-Fi tourne, car le driver radio se le réserve. Vous comparerez les lectures ADC1 et ADC2 avant/après connexion Wi-Fi, puis aborderez la calibration de l'ADC 12 bits (atténuation, variabilité inter-cartes, eFuse).
Matériel
- 1 carte ESP32 DevKit v1
- 1 potentiomètre sur GPIO4 (ADC2_CH0), 1 sur GPIO34 (ADC1_CH6)
- Accès Wi-Fi 2,4 GHz
Code complet
#include <WiFi.h>
const uint8_t PIN_ADC2 = 4; // ADC2_CH0
const uint8_t PIN_ADC1 = 34; // ADC1_CH6, entrée 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);
}
Vérification attendue
Avant Wi-Fi, les deux lectures suivent les potentiomètrès. Une fois connecté, la lecture ADC2 se fige (0 ou valeur fantaisiste fixe) pendant que l'ADC1 continue de varier normalement : la coexistence ADC2/Wi-Fi est bien documentée, pas négociable.
Erreurs fréquentes
- Conclure à une « broche morte » : l'ADC2 n'est pas HS, le driver refuse simplement l'accès tant que le Wi-Fi est actif.
- Concevoir la mesure de batterie d'un produit Wi-Fi sur GPIO2 ou GPIO4 : câbler pont diviseur et mesure sur GPIO32-39 (ADC1, entrées seules).
- Faire confiance au brut 12 bits : l'ADC est non linéaire en bout de plage et varie d'une carte à l'autre ; calibrer par deux points ou utiliser esp_adc_cal_characterize (eFuse).
- Oublier que GPIO2 est aussi une broche de strapping : un pont diviseur permanent dessus peut empêcher le boot.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht22.inoArduinooled-i2c.inoArduinoserveur-web.inoArduino