ESP8266-12E (NodeMCU) ADC – Leer valores analógicos.

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:

ADC-non-linear-ESP32

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.

s-l500

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.

analog_input_pot_esp8266_bb

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);
}