Entradas analógicas (ADC)
Tanto ESP8266-12E como ESP8266-07 tienen un pin ADC al que se puede acceder fácilmente. Esto significa que esas placas ESP8266 pueden leer señales analógicas.
ESP8266 ADC Especificaciones
Cuando se refiera al pin ADC ESP8266, a menudo escuchará estos diferentes términos indistintamente:
- ADC (Convertidor de analógico a digital)
- TOUT
- Pin6
- A0
- Pin analógico 0
Todos estos términos se refieren al mismo pin en el ESP8266.
Resolución ADC ESP8266
El pin ADC tiene una resolución de 10 bits, lo que significa que obtendrá valores entre 0 y 1023.
Rango de voltaje de entrada ESP8266
El rango de voltaje de entrada del pin ADC ESP8266 es de 0 a 1 V si está utilizando el chip de forma independiente. Sin embargo, la mayoría de las placas de desarrollo ESP8266 vienen con un divisor de voltaje interno, por lo que el rango de entrada es de 0 a 3,3 V. Entonces, en resumen:
Leer un valor analógico con el ESP32 significa medir niveles de voltaje variables entre 0 V y 3,3 V.
A la tensión medida se le asigna entonces un valor entre 0 y 4095, en el que 0 V corresponde a 0 y 3,3 V corresponde a 4095. Cualquier tensión entre 0 V y 3,3 V recibirá el valor correspondiente en el medio.
ADC es no lineal
Idealmente, esperaría un comportamiento lineal al usar los pines ESP32 ADC. Sin embargo, eso no sucede. Lo que obtendrá es un comportamiento como se muestra en el siguiente gráfico:
Este comportamiento significa que su ESP32 no puede distinguir 3,3 V de 3,2 V. Obtendrá el mismo valor para ambos voltajes: 4095.
Lo mismo sucede para valores de voltaje muy bajos: para 0 V y 0.1 V obtendrá el mismo valor: 0. Debe tener esto en cuenta cuando use los pines ESP32 ADC.
Como ejemplo, mostraremos cómo leer valores analógicos de un potenciómetro.
Pin analógico ESP8266
Con el kit ESP8266 12-E NodeMCU y otras placas de desarrollo ESP8266, es muy fácil acceder al A0, simplemente conecte un cable de puente al pin.
Función analogRead()
Leer una entrada analógica usando el IDE de Arduino es tan simple como usar la función analogRead(). Acepta como argumento, el GPIO que se quiere leer:
analogRead (GPIO);
Esquema
Si está utilizando una placa de desarrollo ESP8266, siga el siguiente diagrama esquemático.
Código
const int analogInPin = A0; // ESP8266 Analog Pin ADC0 = A0
int sensorValue = 0; // value read from the pot
void setup() {
// initialize serial communication at 115200
Serial.begin(115200);
}
void loop() {
// read the analog in value
sensorValue = analogRead(analogInPin);
// print the readings in the Serial Monitor
Serial.print("sensor = ");
Serial.print(sensorValue);
delay(1000);
}