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.
Librería DHT
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.
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 Code – Download ZIP.
Una vez descargado, descomprimen el ZIP y abren DHT22.py en Thonny, para grabarlo de nuevo en la memoria de 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:
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
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.