Sensor de temperatura y humedad DHT11 y Raspberry Pi

El DHT11 es un sensor de temperatura y humedad de bajo costo. No es el sensor más rápido que existe, pero su precio económico lo hace útil para experimentar o proyectos en los que no necesita nuevas lecturas varias veces por segundo. El dispositivo solo requiere tres conexiones al Pi. +3.3v, tierra y un pin GPIO.

Especificaciones DHT11

El dispositivo en sí tiene cuatro pines, pero uno de ellos no se usa. Puede comprar el dispositivo de 4 pines solo o como parte de un módulo de 3 pines.

Los módulos tienen tres pines y son fáciles de conectar directamente al encabezado GPIO de Pi.

  • Humedad: 20-80% (5% de precisión)
  • Temperatura: 0-50 °C (±2 °C de precisión)

Los fabricantes no recomiendan que lea los datos de este dispositivo más de una vez cada 2 segundos. Si lo hace, puede obtener lecturas incorrectas.

configuración de hardware

El dispositivo de 4 pines requerirá que se coloque una resistencia (4,7 K-10 K) entre el pin 1 (3,3 V) y el pin 2 (datos).

Los módulos de 3 pines generalmente tendrán esta resistencia incluida, lo que facilita un poco el cableado. Por esta razón, conseguí el módulo que luego pude conectar a la Pi con un trozo de cable Dupont de 3 vías.

Diferentes proveedores pueden cablear los pines del módulo de manera diferente, por lo tanto, verifique las marcas de PCB para identificar Vcc (+), datos y tierra (-).

Los 3 pines deben conectarse al Pi como se muestra en la siguiente tabla:

Alfiler DHT Señal pin pin
1 3,3 V 1
2 Datos/Salida 11 (GPIO17)
3 no utilizado
4 Terrestre 6 o 9

Su pin de datos se puede adjuntar a cualquier pin GPIO que prefiera. En mi ejemplo, estoy usando el pin físico 11, que es GPIO 17. Aquí hay un sensor de 4 pines conectado al encabezado GPIO de Pi. Tiene una resistencia de 10K entre el pin 1 (3.3V) y el 2 (Data/Out).

Biblioteca de Python

El DHT11 requiere que se aplique un protocolo específico al pin de datos. Para ahorrar tiempo al intentar implementar esto usted mismo, es mucho más fácil usar la biblioteca Adafruit DHT.

La biblioteca se ocupa de los datos que deben intercambiarse con el sensor, pero es sensible a los problemas de tiempo. El sistema operativo de la RasPi puede interponerse mientras realiza otras tareas, por lo que para compensar esto, la biblioteca solicita una serie de lecturas del dispositivo hasta que obtiene una que sea válida.

Configuración del software

Para comenzar, actualice sus listas de paquetes e instale algunas bibliotecas de Python:

sudo apt-get update sudo apt-get install build-essential python-dev 

Luego, clone la biblioteca de Adafruit desde su repositorio:

git clone https://github.com/adafruit/Adafruit_Python_DHT.git cd Adafruit_Python_DHT

Luego instale la biblioteca para Python 2 y Python 3:

sudo python setup.py install sudo python3 setup.py install 

Con suerte, en este punto, la biblioteca está instalada y lista para usarse dentro de un script de Python.

Ejemplo de secuencia de comandos de Python de Adafruit

Adafruit proporciona un script de ejemplo que puede usar para verificar que su sensor funcione correctamente.

cd ~ cd Adafruit_Python_DHT cd examples

Luego :

python AdafruitDHT.py 11 17

El script de ejemplo toma dos parámetros. El primero es el tipo de sensor, por lo que se establece en «11» para representar el DHT11. El segundo es el número GPIO, así que para mi ejemplo estoy usando «17» para GPIO17. Puede cambiar esto si está utilizando un pin GPIO diferente para su cable de datos/salida.

Debería ver una salida similar a esta:

Temp=22.0* Humidity=68.0%

Uso de la biblioteca en otros scripts de Python

Una vez que la biblioteca de Adafruit esté instalada y tenga el script de ejemplo funcionando, puede usar el sensor en sus propios scripts. Simplemente importe el módulo, configure algunas variables y llame a la función «read_retry»:

 import Adafruit_DHT  # Set sensor type : Options are DHT11,DHT22 or AM2302 sensor=Adafruit_DHT.DHT11  # Set GPIO sensor is connected to gpio=17  # Use read_retry method. This will retry up to 15 times to # get a sensor reading (waiting 2 seconds between each retry). humidity, temperature = Adafruit_DHT.read_retry(sensor, gpio)  # Reading the DHT11 is very sensitive to timings and occasionally # the Pi might fail to get a valid reading. So check if readings are valid. if humidity is not None and temperature is not None:   print('Temp={0:0.1f}*C  Humidity={1:0.1f}%'.format(temperature, humidity)) else:   print('Failed to get reading. Try again!') 

Este script se puede descargar directamente a su Pi usando:

wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/dht11.py

y ejecutar usando:

python dht11.py

Comprar un DHT11

El DHT11 está disponible en muchos vendedores de componentes eléctricos. Aquí hay una selección:

Es posible que algunos solo vendan el dispositivo en sí, por lo que es posible que deba comparar precios si prefiere el módulo de 3 pines.

Conclusiones finales

El DHT11 probablemente sea más adecuado para proyectos en los que no se requieren lecturas rápidas de datos y no se espera que el entorno experimente cambios repentinos de temperatura o humedad. Una estación meteorológica sería un proyecto ideal, pero un controlador de calefacción central puede requerir algo diferente.

Para proyectos que necesitan una velocidad de lectura de temperatura más rápida (<2 segundos), probablemente usaría un DS18B20, ya que responden mucho más rápido a los cambios de temperatura. Pero como estos dos sensores cuestan menos de € 5, probablemente pueda permitirse comprar ambos y experimentar.