Sensor DHT11 con Raspberry PI y Python

Última actualización el 24 de diciembre de 2023 por

En este artículo, le mostraré cómo conectar una Raspberry PI con el sensor DHT11 usando Python.

Obtener las condiciones ambientales es la primera y más sencilla tarea necesaria para crear automatizaciones electrónicas más complejas. Raspberry PI con sensor DHT11 puede obtener valores de temperatura y humedad con piezas baratas

El Sensor DHT11, cuyas siglas significan “Humedad y Temperatura Digital”, es una solución económica para medir la Temperatura y Humedad en interiores (no está indicado para usos en exteriores). Se puede utilizar con Arduino (normalmente en proyectos de Estaciones Meteorológicas o similares) o solo, conectado directamente a una Raspberry PI.

Para configurar el sensor de humedad DHT11 en una Raspberry Pi es necesario conectar los pines VCC y GND a +5V y GND de la Raspberry Pi y el pin de datos del DHT11 a un PIN GPIO de la Raspberry Pi, según el siguiente diagrama de cableado.

Otro sensor común, con nombre similar, es el DHT22. La diferencia entre DHT11 y DHT22 es que el DHT22 es la versión más cara, pero permite un mejor rango de medición de humedad (de 0 a 100% con una precisión de 2-5%), mientras que el rango de humedad real del DHT11 es de 20 a 80% con 5% de precisión.

Para este artículo, usaré una Raspberry PI Zero W con un encabezado soldado. Pero este artículo también se aplica a otras placas de computadora Raspberry PI.

Lo que necesitamos

Como siempre, te sugiero agregar desde ahora al carrito de compras de tu e-commerce favorito todo el hardware necesario, para que al final puedas evaluar los costos generales y decidir si continuar con el proyecto o eliminarlos del carrito de compras. Entonces, el hardware será solo:

Placa Raspberry PI Zero WH

También puede resultarle útil evaluar un kit de sensores (como el Elegoo Starter Kit), que es una solución que ahorra costos si desea probar muchos sensores para diferentes propósitos.

Procedimiento paso a paso

Diagrama de cableado

Consulte la siguiente imagen para conectar Raspberry PI con el sensor DHT11:

Tenga en cuenta que el pin de señal DHT11 (Datos) está conectado al pin RPI 11, que es el GPIO 17 (consulte Raspberry PI Zero Pinout para ver el esquema completo).

Instalar el sistema operativo (Raspberry PI OS Lite)

Comienza a preparar tu Sistema Operativo. Puedes instalar el rápido Raspberry PI OS Lite (sin entorno de escritorio) u optar por Raspberry PI OS Desktop, utilizando su terminal interno.

Asegúrese de que su sistema operativo esté actualizado con los siguientes comandos:

sudo apt update sudo apt upgrade

Instalar bibliotecas CircuitPython

Las bibliotecas CircuitPython son un conjunto de bibliotecas Python de Adafruit que simplifican la gestión de sensores externos. Estas bibliotecas requieren Python3. Comprueba si está instalado con el comando:

python3 --version

De lo contrario, instale python3:

sudo apt install python3

Instale pip para python3:

sudo apt install python3-pip

Habilitar I2C y SPI

Habilite y configure I2C (estándar diseñado para permitir que un chip se comunique con otro)

sudo apt install -y python-smbus sudo apt install -y i2c-tools

Y habilite la compatibilidad con el kernel Raspberry PI I2C con:

sudo raspi-config

En la siguiente pantalla de configuración:

  • vaya a Opciones de interfaz > I2C
  • Habilítelo presionando sí en la siguiente pantalla y luego de la confirmación.
  • Una vez habilitado, debería ser redirigido nuevamente a la página de inicio de raspi-config.

Para habilitar SPI:

  • vaya nuevamente a Opciones de interfaz >SPI
  • Habilítelo presionando sí en la siguiente pantalla y luego de la confirmación.

Haga clic en Finalizar en la página de inicio de raspi-config para regresar al terminal ssh.

Instalar bibliotecas de Python

RPI.GPIO ya debería estar instalado (de lo contrario, puede instalarlo con el comando “sudo apt install python3-rpi.gpio”).

Finalmente, instale la biblioteca adafruit-blinka. Esto incluye también algunas bibliotecas diferentes como adafruit-pureio (nuestra biblioteca i2c exclusiva para ioctl), spidev (para interfaz SPI), Adafruit-GPIO (para detectar su placa) y, por supuesto, adafruit-blinka:

pip3 install adafruit-blinka

Configurar circuitoPython-DHT

Se necesitará la siguiente biblioteca adafruit dht para permitir la comunicación de Raspberry PI con el sensor DHT11:

pip3 install adafruit-circuitpython-dht sudo apt install libgpiod2

Cree un nuevo script de lectura llamado DHT11Test.py:

nano DHT11Test.py

Inserte el siguiente código:

import time import board import adafruit_dht #Initial the dht device, with data pin connected to: dhtDevice = adafruit_dht.DHT11(board.D17) while True:     try:          # Print the values to the serial port          temperature_c = dhtDevice.temperature          temperature_f = temperature_c * (9 / 5) + 32          humidity = dhtDevice.humidity          print("Temp: {:.1f} F / {:.1f} C    Humidity: {}% "                .format(temperature_f, temperature_c, humidity))     except RuntimeError as error:     # Errors happen fairly often, DHT's are hard to read, just keep going          print(error.args[0])     time.sleep(2.0)

Y finalmente ejecútelo escribiendo:

 python3 DHT11Test.py

Este código mostrará los datos medidos y también le informará que el sensor DHT11 recibe naturalmente una serie de errores de lectura (como también se menciona en el comentario de adafruit dentro del script):

pi@raspberrypi:~ $ python3 DHT11Test.py Temp: 66.2 F / 19.0 C    Humidity: 56% Temp: 66.2 F / 19.0 C    Humidity: 56% Temp: 66.2 F / 19.0 C    Humidity: 56% Temp: 66.2 F / 19.0 C    Humidity: 56% Checksum did not validate. Try again. Temp: 66.2 F / 19.0 C    Humidity: 56% A full buffer was not returned.  Try again. Temp: 66.2 F / 19.0 C    Humidity: 56% Checksum did not validate. Try again. Temp: 66.2 F / 19.0 C    Humidity: 56% Temp: 66.2 F / 19.0 C    Humidity: 56% Temp: 66.2 F / 19.0 C    Humidity: 56% Temp: 66.2 F / 19.0 C    Humidity: 56% Temp: 66.2 F / 19.0 C    Humidity: 56%

Para tener una lista limpia de medidas correctas de Raspberry PI con DHT11, cambie dentro del código la línea “print(error.args[0])” con “pase”. Esto evita errores de impresión en el terminal y genera lecturas cuando se recibe correctamente:

pi@raspberrypi:~ $ python3 DHT11Test.py Temp: 66.2 F / 19.0 C    Humidity: 55% Temp: 66.2 F / 19.0 C    Humidity: 55% Temp: 66.2 F / 19.0 C    Humidity: 55% Temp: 66.2 F / 19.0 C    Humidity: 55% Temp: 66.2 F / 19.0 C    Humidity: 55% Temp: 66.2 F / 19.0 C    Humidity: 55% Temp: 66.2 F / 19.0 C    Humidity: 55% Temp: 66.2 F / 19.0 C    Humidity: 55%