Micropython: Leyendo temperatura y humedad con DHT11/DHT22 en Raspberry Pi Pico

Si tienes que realizar mediciones de temperatura y humedad del aire, muy probablemente uses alguno de estos populares sensores. En un artículo anterior te expliqué como conectarlos a a una placa ESP8266 y a una ESP32. En este artículo te muestro como usarlos si tienes una Raspberry Pi Pico.

El sensor DHT11

El DHT11 (Digital Humidity and Temperature) combina un sensor que mide indirectamente la humedad del aire a partir de la resistencia de un sustrato que es capaz de absorber la humedad y un termistor tipo NTC que mide la temperatura. Normalmente viene en un encapsulado de color azul con 4 pines, aunque a veces también está disponible montado sobre una placa con sólo 3 pines.

La distribución de las señales en los pines es la siguiente:

Fig. 1. Pines del DHT11 (Adaptado de https://www.circuitbasics.com)

El pin de Datos necesita una resistencia de PULL UP de 10K para funcionar correctamente. En el encapsulado de 3 pines esta resistencia ya está soldada en la placa, mientras que en el encapsulado de 4 pines debes agregarla en el circuito externo.

El rango cubierto al medir la humedad ambiente es entre 20% y 90% con una precisión de ±5%. En el caso de la temperatura, es capaz de medir entre 0 y 50 grados centígrados con una precisión de ±2 grados.

Como se ve, la precisión no es muy alta, así que está reservado a aplicaciones de bajo costo donde no necesitamos mediciones muy precisas.

El sensor tampoco es muy rápido, debiéndose esperar al menos 1 segundo antes de la primer lectura, así como entre lecturas.

La tensión de alimentación puede estar entre 3 y 5.5V. Si se necesita un rango mayor de medición, o mayor precisión, puede optarse por un modelo mejorado, el DHT22 (que usualmente es de color blanco).

El sensor DHT22

El DHT22 es básicamente una versión mejorada del DHT11. 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. 2. Formatos del DHT22

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. 3. Pines del DHT22

El pin de datos requiere de una resistencia de pull-up como en el caso del DHT11 si es que no viene soldada en la placa.

Como te decía antes, el DHT22 es una versión un poco mejorada del DHT11. 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

Estas son las conexiones para un DHT11 o un DHT22 a una Pico. En la imagen se ve un sensor DHT11 pero las conexiones serían las mismas si usas un DHT22.

Fig. 4. Conexiones para el DHT11 y DHT22

Como se puede ver, la alimentación del sensor está tomada del pin 36 3V3 y 38 GND mientras que los datos se leen usando el pin 20 GP15

Fig. 5. Pinout de la Pico

El programa

Desde hace algunas versiones, el port de Micropython para la Pico incluye una librería específica para leer estos sensores que nos simplifica mucho la tarea de programación. Se trata de la librería dht y lo primero que debemos hacer en nuestro código es importarla.

import dht

Esta librería contiene las clases DHT11 y DHT22, para los dos sensores. El siguiente paso consiste en crear un objeto (o instanciar un objeto como se suele decir) según el sensor que utilices. Esto se logra usando el constructor con el siguiente formato:

objeto_sensor = DHT11 (pin_datos)
objeto_sensor = DHT22 (pin_datos)

pin_datos: es el pin de la Pico que se usará para leer datos desde el sensor. Se configura como entrada con el pull_up habilitado en la librería.

El objeto así creado tiene 3 métodos:

  • measure (): Mide la temperatura y humedad
  • temperature (): Retorna el valor de temperatura medido en grados Celsius
  • humidity (): Retorna el valor de humedad relativa medido en valores porcentuales (%)

El siguiente programa es un ejemplo básico que muestra los valores de temperatura y humedad medidos con un DHT22 cada 2 segundos (si fuera un DHT11 el retardo se podría reducir a 1 segundo).

import dht
from machine import Pin
from time import sleep

sensorTH = dht.DHT22 (Pin(15))  #Conectado a pin 20 (GP15)

while (1):
    sensorTH.measure ()  #Mide
    
    print (sensorTH.temperature(),"grados")
    print (sensorTH.humidity (),"%")
    sleep (2)

Entre la línea 1 y la línea 3 se incluyen los módulos necesarios.

En la línea 4 se crea el objeto sensorTH de la clase DHT22 conectado en el pin 15.

A continuación se inicia un bucle infinito dentro del cual en la línea 8 se lee el sensor y en las líneas 10 y 11 se imprimen los valores leídos.

Finalmente en la línea 12 se hace un retardo de 2 segundos, indispensable antes de intentar otra lectura.

Conclusiones

En este artículo, hemos explorado los sensores DHT11 y DHT22, dos populares opciones para medir la temperatura y la humedad en proyectos de electrónica usando una Raspberry Pico.

El DHT11, con su encapsulado azul y su fácil integración, es ideal para aplicaciones de bajo costo donde la precisión extrema no es crítica. Por otro lado, el DHT22, también conocido como AM2302, proporciona una mejora en términos de precisión y rango de medición, aunque a una velocidad de lectura más lenta. Generalmente lo encontramos con un encapsulado de color blanco.

Ambos sensores requieren una resistencia pull-up en el pin de datos, y su integración con microcontroladores como la Pico es bastante sencilla gracias a librerías específicas en Micropython. El ejemplo de código incluido demuestra cómo leer y mostrar los valores de temperatura y humedad de un DHT22 utilizando Micropython, destacando la simplicidad y eficiencia de estos sensores en proyectos de monitoreo ambiental y otras aplicaciones IoT.

Como siempre, cualquier duda o sugerencia, puedes dejarla en la sección de comentarios de mas abajo.

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