🛠 Lire une tension avec l'ADC A0 et un diviseur de tension
Objectifs
Comprendre la principale piège matériel de l'ESP8266EX : son unique convertisseur analogique-numérique (broche A0, 10 bits) ne mesure que 0 à 1,0 V, et non 0 à 3,3 V comme sur un Arduino. Pour mesurer une tension plus élevée, il faut un diviseur de tension externe. Attention aux différences de cartes : les NodeMCU intègrent déjà un diviseur (rapport environ 5/1,1) sur A0, alors qu'un module ESP-12E nu n'en a aucun — le code et le câblage ne sont pas les mêmes. On calcule la tension réelle à partir de la valeur brute analogRead et du rapport du diviseur.
Matériel
- 1 module ESP8266-ESP-12E nu (ou repère-toi si ta carte est une NodeMCU avec diviseur intégré)
- 1 résistance R1 = 20 kΩ et 1 résistance R2 = 10 kΩ (diviseur ×3)
- 1 source de tension à mesurer entre 0 et 3,0 V (ex. potentiomètre 10 kΩ monté en diviseur sur le 3,3 V)
- Alimentation 3,3 V stable, planche à pain, fils
Code complet
// Diviseur externe R1=20k (entre Vin et A0) et R2=10k (entre A0 et GND) -> rapport 3
const float RAPPORT = 3.0f; // (R1 + R2) / R2
const float FULL_SCALE = 1.0f; // A0 nu : pleine échelle = 1,0 V (pas 3,3 V !)
void setup {
Serial.begin(115200);
Serial.println("Lecture ADC A0 (0-1,0 V sur module nu)");
}
void loop {
int raw = analogRead(A0); // 10 bits : 0..1023
float vA0 = raw / 1023.0f * FULL_SCALE; // tension sur la broche A0
float vIn = vA0 * RAPPORT; // tension réelle mesurée
Serial.printf("raw=%4d A0=%.3f V Vin=%.3f V\n", raw, vA0, vIn);
delay(500);
yield;
}
Vérification attendue
Fais tourner le potentiomètre : la valeur brute doit balayer environ 0 à 1023 et Vin suivre la tension mesurée au multimètre (±0,1 V, l'ADC de l'ESP8266 est médiocre). Avec un diviseur ×3, Vin ≈ 3× la tension réellement présente sur A0. Sur un module nu, injecte directement 0 V sur A0 : raw doit tomber à 0 ou 1.
Erreurs fréquentes
- Croire que A0 accepte 3,3 V sur un module nu : au-delà de 1,0 V environ, la mesure est écrêtée et la broche peut être sollicitée hors plage ; le diviseur est obligatoire.
- Mettre un diviseur externe sur une NodeMCU qui en a déjà un interne : le rapport total est faux (×3 × 4,5 ≈ ×13) et toutes les mesures sont fausses.
- Oublier de relier la masse de la source mesurée à la masse du module : sans référence commune, la lecture est incohérente.
- Utiliser A0 pendant que le Wi-Fi émet : l'ADC partage des circuits RF, les mesures deviennent bruitées ; fais la lecture juste avant deep-sleep ou filtre par moyenne.
- Attendre une précision d'horloger : l'ADC est très non linéaire en début et fin de course, accepte ±50 mV d'erreur.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht11.inoArduinoluxmetre.inoArduinoserveur-web.inoArduino