🛠 Première entrée analogique sur ADC1
Objectifs
Lire une tension avec le convertisseur analogique-numérique de l'ESP32. Nous utiliserons volontairement un canal de l'ADC1 (GPIO32 à GPIO39) : l'ADC2, lui, est inutilisable dès que le Wi-Fi est actif — un piège classique que nous détaillerons dans le tutoriel avancé correspondant. Vous découvrirez aussi la contrainte GPIO34-39 : ces broches sont des entrées pures, jamais des sorties.
Matériel
- 1 carte ESP32 DevKit v1
- 1 potentiomètre 10 kΩ (broches sur 3,3 V, GPIO34, GND)
- Optionnel : condensateur 100 nF entre GPIO34 et GND
Code complet
const uint8_t POT_PIN = 34; // ADC1_CH6, entrée seule
void setup {
Serial.begin(115200);
analogReadResolution(12); // 0..4095
analogSetPinAttenuation(POT_PIN, ADC_11db); // plage ~0 a 3,3 V
analogRead(POT_PIN); // 1er echantillon ignore
}
void loop {
uint32_t brut = analogRead(POT_PIN);
float mv = brut * 3300.0f / 4095.0f;
Serial.printf("ADC1 GPIO34 : %u -> %.0f mV\n", brut, mv);
delay(100);
}
Vérification attendue
En tournant le potentiomètre, la console affiche une valeur continue de 0 à 4095 et la tension correspondante de 0 à environ 3300 mV. Au repos (doigt près du curseur), la valeur peut danser de quelques unités : c'est le bruit normal d'un ADC 12 bits sans filtre.
Erreurs fréquentes
- Utiliser GPIO2, 4, 12 à 15 ou 17 à 19 : ce sont des broches ADC2, qui échouent ou retournent 0 dès que le Wi-Fi tourne. Sans Wi-Fi cela fonctionne, mais ne reprenez jamais ce câblage dans un produit connecté.
- Tenter un digitalWrite sur GPIO34-39 : ces broches sont input-only, sans résistance de pull interne ni sortie.
- Oublier analogSetPinAttenuation(ADC_11db) : sans lui, la plage est bridée à ~1 V et la valeur plafonne.
- Mesurer plus de 3,3 V : l'ESP32 n'est pas 5 V tolerant sur ses entrées analogiques, prévoir un pont diviseur.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht22.inoArduinooled-i2c.inoArduinoserveur-web.inoArduino