🛠 Lire une tension avec l'ADC A0 et un diviseur de tension
Objetivos
Comprender la principal trampa de hardware del ESP8266EX: su único convertidor analógico-digital (pin A0, 10 bits) solo mide de 0 a 1,0 V, y no de 0 a 3,3 V como en un Arduino. Para medir un voltaje más alto, se necesita un divisor de voltaje externo. Presta atención a las diferencias entre tarjetas: los NodeMCU ya integran un divisor (relación aproximada de 5/1,1) en A0, mientras que un módulo ESP-12E desnudo no tiene ninguno: el código y el cableado no son los mismos. Calculamos el voltaje real a partir del valor bruto de analogRead y la relación del divisor.
Material
- 1 módulo ESP8266-ESP-12E desnudo (o identifica si tu tarjeta es un NodeMCU con divisor integrado)
- 1 resistencia R1 = 20 kΩ y 1 resistencia R2 = 10 kΩ (divisor ×3)
- 1 fuente de voltaje a medir entre 0 y 3,0 V (p. ej., un potenciómetro de 10 kΩ montado como divisor sobre los 3,3 V)
- Fuente de alimentación estable de 3,3 V, protoboard, cables
Código completo
// 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;
}
Verificación esperada
Gira el potenciómetro: el valor bruto debe barrer aproximadamente de 0 a 1023 y Vin debe seguir el voltaje medido con el multímetro (±0,1 V, el ADC del ESP8266 es mediocre). Con un divisor ×3, Vin ≈ 3× el voltaje realmente presente en A0. En un módulo desnudo, inyecta directamente 0 V en A0: raw debe caer a 0 o 1.
Errores frecuentes
- Creer que A0 acepta 3,3 V en un módulo desnudo: por encima de aproximadamente 1,0 V, la medida se satura y el pin puede ser solicitado fuera de rango; el divisor es obligatorio.
- Poner un divisor externo en un NodeMCU que ya tiene uno interno: la relación total es incorrecta (×3 × 4,5 ≈ ×13) y todas las medidas son erróneas.
- Olvidar conectar la masa de la fuente medida a la masa del módulo: sin una referencia común, la lectura es incoherente.
- Usar A0 mientras el Wi-Fi transmite: el ADC comparte circuitos de RF, las medidas se vuelven ruidosas; realiza la lectura justo antes del deep-sleep o filtra mediante promedio.
- Esperar una precisión de reloj: el ADC es muy no lineal al principio y al final de su rango, acepta un error de ±50 mV.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht11.inoArduinoluxmetre.inoArduinoserveur-web.inoArduino