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

Si tenemos que realizar mediciones de temperatura y humedad del aire, muy probablemente utilicemos alguno de estos populares sensores. Lamentablemente, el port de Micropython para la Pico no incluye soporte para ellos, así que tendremos que utilizar un módulo externo. En este artículo veremos como conectar estos sensores a la Pico y como instalar y utilizar un módulo externo para accederlos.

La primera vez que intenté utilizar el DHT11 en una Pico simplemente copié un programa que ya había empleado antes en un ESP32 dando por descontado que el firmware incluiría una librería equivalente para leerlo. Lamentablemente no fue así, para mi sorpresa el firmware estandar (al menos hasta la versión 1.16) no incluye un módulo para estos sensores.

Fig.1. Modulos estandar en el firmware ver 1.16

Llegado a este punto se me plantearon dos opciones: escribir mi propia librería o buscar una ya hecha en un repositorio. En estos casos siempre les digo a mis alumnos que, salvo que exista una razón importante, no vale la pena reinventar la rueda si ya está inventada, así que siguiendo mi propio consejo inicié una búsqueda de módulos ya diseñados y probados. Entre los que encontré me pareció mas estable el de Daniel Perron que pueden encontrar en este repositorio. (Pueden dejar en los comentarios sus experiencias con otros módulos si los usaron). El módulo se llama DHT22 pero soporta los dos sensores.

Lo único que hay que hacer es descargarlo y guardarlo en la memoria de la Pico. Como ya expliqué en otras oportunidades, deben descargar el código haciendo click en CodeDownload ZIP.

Fig. 2. Descarga del módulo de Github

Una vez descargado, descomprimen el ZIP y abren DHT22.py en Thonny, para grabarlo de nuevo en la memoria de la Pico:

Fig. 3. Módulo copiado a la Pico

Una vez hecho esto, el módulo ya está listo para ser importado en nuestro código.

Conexiones

Estas son las conexiones para un DHT11 o 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

Software

El módulo importa la clase DHT22 que nos permite crear un objeto a través del constructor con el siguiente formato:

objeto_sensor = DHT22 (pin_datos, pin_alimentación, Modo_DHT11)

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 el mismo módulo.

pin_alimentación: pin de la Pico para alimentar el sensor. Este es un valor opcional, podemos optar por este método para poder prender y apagar el sensor con un pin o conectarlo directamente a la alimentación (Nota: si se usa el control de alimentación con un pin tal vez haya que modificar el retardo luego del encendido dentro del módulo).

Modo_DHT11: Por omisión el módulo funciona para un DHT22, si queremos conectar un DHT11 debemos incluir dht11=True.

El siguiente programa está adaptado del programa de test incluido con el módulo:

from machine import Pin
from DHT22 import DHT22
from time import sleep

dht_sensor=DHT22(Pin(15),dht11=True)

while True:

    T, H = dht_sensor.read()

    if T is None:
        print("Error en el sensor!")
    else:
        print("{}'C  {}%".format(T,H))

    sleep(1)

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

En la línea 5 se crea el objeto dht_sensor de la clase DHT22 en el pin 15 compatible con el DHT11.

A continuación se inicia un bucle infinito dentro del cual en la línea 9 se lee el sensor y los datos obtenidos se cargan en la tupla T,H (temperatura y humedad).

En la línea 11 se hace un comprobación de la validez de los datos para ver si hubo algún error en la lectura. Si están bien, se los imprime formateados.

Finalmente en la línea 16 se hace un retardo de 1 segundo, indispensable antes de intentar otra lectura.

Si vamos a usar el DHT22 debemos modificar la línea 5 de esta forma:

dht_sensor=DHT22(Pin(15))

Conclusiones

Vimos como instalar y utilizar un módulo para leer sensores de temperatura y humedad DHT11/DHT22 en la Raspberry Pi Pico, así como las conexiones necesarias.

Cualquier duda o sugerencia, pueden dejarla en la sección de comentarios.

Deja un comentario

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

A %d blogueros les gusta esto: