Tutorial: Cómo utilizar el DHT22 con ESP8266 y ESP32 en Arduino

El DHT22 es un sensor de temperatura y humedad de bajo costo muy popular. En este artículo te muestro como utilizarlo en Arduino conectándolo a una placa con el ESP8266 y a otra con el ESP32.

El DHT22

El DHT22 (Digital Humidity and Temperature) es un sensor de bajo costo que integra un sensor capacitivo para medir la humedad ambiente y un termistor para medir la temperatura. Estos sensores se conectan internamente a un chip que convierte estos valores a señales digitales que pueden ser accedidas fácilmente por un microcontrolador.

Habitualmente este sensor, también denominado AM2302, está disponible en un encapsulado plástico blanco, con cuatro pines de conexión, aunque también se lo puede encontrar montado sobre una placa con sólo 3 pines.

Fig. 1. Distintas presentaciones del DHT22

Conexiones

En el encapsulado de 4 pines, dos de ellos corresponden a la alimentación (5 Voltios y masa), un pin es para la lectura y escritura de comandos y datos y otro sin uso, como puedes ver en la siguiente imagen:

Fig. 2. Pines y sus funciones

El pin de Datos necesita una resistencia de PULL UP de 10K para funcionar correctamente. Cuando el sensor viene montado sobre una placa, esa resistencia generalmente ya viene incorporada, pero en el caso del encapsulado de 4 pines nosotros debemos agregarla en nuestro circuito.

Características

El DHT22 es una versión un poco mejorada de otro sensor muy popular, el DHT11 que habitualmente tiene un encapsulado azul. Tiene rangos de medición mas amplios, menos error pero es mas lento.

Las características principales del DHT22 son las siguientes:

  • Alimentación de 3 a 5V
  • Consumo máximo de 2.5mA durante la conversión
  • Rango de humedad: 0-100% con un error entre 2 y 5%
  • Rango de temperatura: -40 a 80°C con un error de ±0.5°C
  • Velocidad de lectura máxima: 0.5 Hz (una lectura cada 2 segundos)

Conexiones

ESP8266

Para mostrar la conexión a un ESP8266 utilicé una D1 mini, con el sensor conectado al pin D2 (GPIO4) y alimentado con la salida de 3V3 que provee la placa. Como puedes apreciar en la Fig. 3 de mas abajo, también agregué la resistencia de Pull Up de 10K en el pin de datos.

Fig. 3. Conexiones a la D1 Mini

ESP32

En este caso utilicé una placa ESP32-Devkit de 30 pines. El sensor también se alimenta desde la salida de 3V3 y el pin de datos está conectado a D4 (GPIO4), igual que en el caso anterior para poder utilizar el mismo programa.

Fig. 4. Conexiones al ESP32

Programación

Librerías

Afortunadamente, para leer este sensor tenemos librerías que nos evitan escribir el código desde cero. Te recomiendo utilizar una de la empresa Adafruit denominada DHT sensor library que puedes encontrar en este repositorio de Github.

Para instalarla, como con cualquier otra librería, debes ir al gestor de librerías seleccionando desde el menú Programa Incluir LibreríaAdministrar Biblioteca y luego buscarla escribiendo “DHT”. Entre todas las que aparecen, selecciona la de Adafruit y pulsa sobre el botón Instalar.

Fig. 5. Instalación de la librería

Esta librería depende de otras, asi que verás un aviso como el siguiente. Selecciona Install all.

Luego de unos instantes en los que se descargan e instalan todas las librerías necesarias, ya queda todo listo para escribir el programa.

El programa

A continuación veamos un programa mínimo para acceder al DHT22 e imprimir los valores de temperatura y humedad leídos.

Analicemos su funcionamiento:

En la línea 3 se incluye la librería DHT.h que vimos mas arriba que tiene todas las funciones que necesitamos para acceder al sensor.

La línea 5 define pinDatos con el valor 4 (GPIO4). Este será el pin que emplearemos para conectar las placas con el sensor. En el caso de la D1 mini, GPIO4 está conectado al pin denominado D2, mientras que en la placa del ESP32, este pin está marcado D4.

A continuación, en la línea 8 se crea (o se instancia) el objeto sensorTH de la clase DHT, al tiempo que se le indica que use el pin pinDatos y que el sensor es del tipo DHT22 (es necesario que especifiques el tipo de sensor porque la misma librería sirve también para el sensor DHT11).

Dentro de la función setup se inicializa el monitor serie y se imprime un texto indicando que arranca el programa. En la línea 15 también se inicializa el objeto sensorTH con el método begin, preparándolo para su uso.

//Lectura de DHT22

#include "DHT.h"

#define pinDatos 4  //GPIO4 = D2 en D1 Mini, D4 en ESP32


DHT sensorTH (pinDatos, DHT22);    //Crea objeto sensorTH

void setup() {

 Serial.begin (115200);
 Serial.println ("***** Lectura DHT22 *****");

 sensorTH.begin ();   //Inicializa pines del sensor
 
}

void loop() {

  delay (2000);
  
  //Lee valores de temperatura y humedad
  float humedad = sensorTH.readHumidity();
  float temperatura = sensorTH.readTemperature();
  
  //Mostrar valores leídos
  Serial.print ("Temperatura = ");
  Serial.print (temperatura);
  Serial.println (" ºC");
  Serial.print ("Humedad = ");
  Serial.print (humedad);
  Serial.println (" %");

  
}

Siguiendo con el análisis, en la línea 19 empieza la función loop, que se repite indefinidamente.

En la línea 21 se hace un delay de dos segundos, ya que debemos respetar la frecuencia máxima de lectura del sensor. Intentar leerlo mas seguido puede provocar valores erróneos.

En las líneas 24 y 25 se leen respectivamente los valores medidos de humedad y temperatura con los métodos readHumidity y readTemperature que devuelven valores en porcentaje para el primero y grados centígrados para el segundo.

Finalmente, desde la línea 28 se sacan los valores leídos por el monitor serie.

Otros métodos y usos

Veamos ahora otros métodos disponibles en la librería, u otras formas de utilizar los métodos anteriores:

float t = dht.readTemperature (true);

Invocado de esta forma, el método readTemperature devuelve el valor en grados Fahrenheit en vez de Celsius.

float hif = dht.computeHeatIndex (f, h);

Este método devuelve el valor de sensación térmica calculado a partir de la temperatura y humedad, en grados Fahrenheit.

float hic = dht.computeHeatIndex(t, h, false);

Invocado de esta manera, el mismo método calcula la sensación térmica en grados Celsius.

Conclusión

Si bien existen sensores de temperatura y humedad mas precisos y de mejor calidad que el DHT22, como el BME280, aún se lo puede emplear en aplicaciones simples donde no necesitemos mucha precisión. En este artículo vimos que es muy fácil de conectar y también de programar, requiriendo sólo el agregado de una librería.

En otros artículos veremos otros sensores y de que manera debemos conectarlos a distintas placas , programándolos siempre en el entorno Arduino.

Si tienes alguna duda o sugerencia, no dudes en escribirla mas abajo en la sección de comentarios.

Hasta la próxima!

Para aprender más

Hoja de datos (datasheet) del DHT22

1 comentario en «Tutorial: Cómo utilizar el DHT22 con ESP8266 y ESP32 en Arduino»

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Habilitar notificaciones OK No, gracias