View Categories

DHT11/DHT22 – Raspberry Pi

Wiring #

Ps. de weerstand is nodig voor de pull-up!

Raspberry Pi pin:DHT11 pin:
1 (+3.3v)1 (+3.3 – 5v)
72 (data)
14 (GND)4 (GND)

Raspberry Pi pin:DHT22 pin:
1 (+3.3v)1 (+3.3 – 5v)
182 (data)
14 (GND)4 (GND)

Scripts (python) #

Library #

https://github.com/adafruit/Adafruit_Python_DHT

Onderstaand script leest eenvoudig een DHT 11 sensor uit op GPIO 4, en geeft de waarden weer via de console.

Maak een bestand aan, bijvoorbeeld /usr/src/dht.py (evt onder root, en vergeet niet chmod te gebruiken om het bestand uit te kunnen voeren), voeg deze inhoud daar in toe:

# Importeer Adafruit DHT bibliotheek.
import Adafruit_DHT

humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT11, 4)

humidity = round(humidity, 2)
temperature = round(temperature, 2)

if humidity is not None and temperature is not None:
  print 'Temperatuur = {0:0.1f}*C  Luchtvochtigheid = {1:0.1f}%'.format(temperature, humidity)
else:
  print 'Kan de sensor niet uitlezen!'

Commandolijn parameters #

Wil je commandolijn parameters gebruiken?, bijvoorbeeld als je meerdere DHT sensors hebt aangesloten via de GPIO pinnen, gebruik deze voorbeeld code.

Start het script met commandolijn:  sudo python /usr/src/dht.py [11/22/2302] [GPIO pin]

Het commando sudo python /usr/src/dht.py 22 24  leest bijvoorbeeld een DHT22 sensor uit die aangesloten is op  GPIO pin 24 (Broadcom SOC)

# Importeer Adafruit DHT bibliotheek.
import Adafruit_DHT
# Importeer bibliotheek voor systeemfuncties.
import sys

# Commandolijn parameters verwerken.
sensor_args = { '11': Adafruit_DHT.DHT11,
                '22': Adafruit_DHT.DHT22,
                '2302': Adafruit_DHT.AM2302 }
if len(sys.argv) == 3 and sys.argv[1] in sensor_args:
  sensor = sensor_args[sys.argv[1]]
  pin = sys.argv[2]

humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)

humidity = round(humidity, 2)
temperature = round(temperature, 2)

if humidity is not None and temperature is not None:
  print 'Temperatuur = {0:0.1f}*C  Luchtvochtigheid = {1:0.1f}%'.format(temperature, humidity)
else:
  print 'Kan de sensor niet uitlezen!'

Gegevens wegschrijven naar CSV bestand #

Je kan de gegevens ook opslaan in een CSV bestand, onderstaand script maakt ook gebruik van de commandolijn parameters en slaat gegevens op in een bestand (per maand) in /usr/src/DHT_DATA_[YYYY]_[MM].csv

# Importeer Adafruit DHT bibliotheek.
import Adafruit_DHT
# Importeer bibliotheek voor systeemfuncties.
import sys
# Importeer bibliotheek voor tijdfuncties.
import time
# Importeer bibliotheek voor CSV functies.
import csv

# Definieer variabelen.
DY = time.strftime("%Y")
DM = time.strftime("%m")
DD = time.strftime("%d")
TH = time.strftime("%H")
TM = time.strftime("%M")

# Commandolijn parameters verwerken.
sensor_args = { '11': Adafruit_DHT.DHT11,
                '22': Adafruit_DHT.DHT22,
                '2302': Adafruit_DHT.AM2302 }
if len(sys.argv) == 3 and sys.argv[1] in sensor_args:
  sensor = sensor_args[sys.argv[1]]
  pin = sys.argv[2]

humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)

humidity = round(humidity, 2)
temperature = round(temperature, 2)

if humidity is not None and temperature is not None:
  print 'Temperatuur = {0:0.1f}*C  Luchtvochtigheid={1:0.1f}%'.format(temperature, humidity)
else:
  print 'Kan de sensor niet uitlezen!'

data = [DY, DM, DD, TH, TM, humidity, temperature]
# Sla gegevens op in een bestand (per maand) in /usr/src/DHT_DATA_[YYYY]_[MM].csv
csvfile = "/usr/src/DHT_DATA_" + DY + DM + ".csv"

# Open het csv bestand en schijf door achter de bestaande inhoud.
with open(csvfile, "a") as output:
  writer = csv.writer(output, delimiter=";", lineterminator='\n')
  writer.writerow(data)

De inhoud van het CSV bestand ziet er zo uit:

2015;03;13;13;56;35.0;23.0
2015;03;13;13;59;35.0;23.0
2015;03;13;14;06;35.0;23.0
2015;03;13;14;06;35.0;23.0
2015;03;13;14;06;36.0;23.0
2015;03;13;14;06;47.0;29.0

DHT22 script (python) #

Onderstaand script leest eenvoudig een DHT 22 sensor uit op GPIO 18, en geeft de waarden weer via de console.

Maak een bestand aan, bijvoorbeeld /usr/src/dht.py (evt onder root, en vergeet niet chmod te gebruiken om het bestand uit te kunnen voeren), voeg deze inhoud daar in toe:

#!/usr/bin/python
import Adafruit_DHT

gpiopin = 18
HUM = 0.0
TEMP = 0.0
HUM, TEMP = Adafruit_DHT.read(Adafruit_DHT.DHT22, gpiopin)
if HUM >0 and TEMP >0:
  HUM = round(HUM, 2)
  TEMP = round(TEMP, 2)
  print '{0:0.1f}'.format(TEMP) + ';' + '{0:0.1f}'.format(HUM)
else:
  print '0;0'

Products #


Source #

https://community.mydevices.com/t/dht11-dht22-with-raspberry-pi/2015