Op een Raspberry Pi kun je een groot aantal verschillende sensoren aansluiten, wil je gaan experimenteren met sensoren dan kun je starten met een DHT11 of een DHT22 luchtvochtigheid- en temperatuursensor.
De DHT22 is een meer geavanceerde uitvoering van de DHT11. De sensor kan de waardes van temperatuur en luchtvochtigheid uitlezen tot op een tiende, hierdoor is deze nauwkeuriger dan de DHT11 welke alleen hele waarden kan registreren.
De DHT22 sensoren worden ook verkocht als AM2302 een complete module met de benodigde weerstanden. In dit stappenplan gebruiken we een AM2302 variant.
Componenten voor dit project
• AM2302 (DHT22) temperatuur- en luchtvochtigheidssensor
• 3x Dupont verbindingskabel (female/female)
Aansluitschema voor luchtvochtigheid- en temperatuursensor
Raspberry Pi A+/B+, 2 en 3
Verbind de pinnen van AM2302 (DHT22) sensor met de Raspberry Pi volgens het onderstaand schema:
Sensor Pin VCC -> Raspberry Pi pin (1) 3.3v
Sensor Pin DAT -> Raspberry Pi pin (7) GPIO 4
Sensor Pin GND -> Raspberry Pi pin (6) Ground
Python library installeren
Om te kunnen communiceren met de temperatuursensor hebben we de speciale Python library van Adafruit nodig, deze kun je installeren met behulp van de onderstaande twee stappen:
sudo apt-get install python-dev
git clone https://github.com/adafruit/Adafruit_Python_DHT
cd Adafruit\_Python\_DHT && sudo python setup.py install
Python script
# Raspberry Pi Tips & Tricks - https://raspberrytips.nl import Adafruit_DHT humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 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'.format(temperature) print 'Luchtvochtigheid: {0:0.1f}%'.format(humidity) else: print 'Geen data'
Je kunt het Python script heel eenvoudig downloaden op je Raspberry Pi met behulp van het commando:
wget https://raspberrytips.nl/files/dht22temp.py
De DHT22 (AM2302) sensor uitlezen
Nadat het Python script is gedownload kunnen we de waarden van de sensor gaan uitlezen, dit doe je door het Python script met root rechten te starten:
sudo python dht22temp.py
Na het uitvoeren van het script zal de gemeten temperatuur en luchtvochtigheid worden weergeven.
Na het uitvoeren van dht22.py script krijg ik de volgenden melding:
sudo python dht22.py
Traceback (most recent call last):
File “dht22.py”, line 5, in
humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 4)
File “/home/pi/Adafruit_Python_DHT/Adafruit_DHT/common.py”, line 90, in read_retry
humidity, temperature = read(sensor, pin, platform)
File “/home/pi/Adafruit_Python_DHT/Adafruit_DHT/common.py”, line 76, in read
platform = get_platform()
File “/home/pi/Adafruit_Python_DHT/Adafruit_DHT/common.py”, line 51, in get_platform
from . import Raspberry_Pi_2
File “/home/pi/Adafruit_Python_DHT/Adafruit_DHT/Raspberry_Pi_2.py”, line 22, in
from . import Raspberry_Pi_2_Driver as driver
ImportError: cannot import name Raspberry_Pi_2_Driver
Wat kan hier aan de hand zijn?
@Wim: Dan is de Adafruit library niet correct geinstalleerd, probeer opnieuw de commando’s onder ‘Python library installeren’
@richard ik de commando’s opnieuw gedaan en dit lijkt correct te zijn uitgevoerd.
Zou het kunnen dat ik dit op een RPI3 doe? Omdat hij verwijst naar een driver voor RPI2.
@Wim, ik heb het script aangepast het moet nu wel werken, hier in iedergeval zonder problemen.
@Richard.
ik heb hetzelfde probleem als Wim. en ook ik draai hem op een Pi 3
welk script heb jij aangepast?
@jos waarschijnlijk heeft je voorbeeldscript de naam dht22.py, dit geeft een conflict met de Python library. Als je benaming zoals hierboven beschreven gebruikt werkt het zonder problemen.
@ richard.
mm, ik ben bang dat het script bij mij dht22temp.py heet zoals beschreven, maar toch krijg ik de foutmelding zoals wim die ook beschreven heeft.
ik run het script in de root (tenminste ik do eerst sudo su)
enig idee?
Jos
@ richard.
Ik heb het voor elkaar.
Ik had iet met de directories zitten rommelen, maar nu doet hij het.
dank voor het meedenken
Super!
Hoi,
Ik gebruik een pi3 ook.
Hij errort helaas
“temp.py” 16 lines, 418 characters writtenpi@raspberrypi:~$ sudo python temp.py File “temp.py”, line 5 humidity = round(humidity, 2) ^SyntaxError: invalid syntax
Het pijltje staat onder laatste letter humidity
Gevonden, eigen schuld, ) gedelete.
Hij doet het!
Als de sensor niet goed is aangesloten geeft dit script een floaring error op de regel met round onder het uitlezen. Dat deed mij de code aanpassen, terwijl de code op zich goed was, maar de schakeling was dat niet.
Het zou beter zijn deze error op te vangen en dan te printen “sensor niet goed bedraad? “.
Try:
lees sensor
rond variabelen af
Except
print “geen waarde uitgelezen, check de bedrading?
Prima script.
Overigens : in het datasheet van AM2302 staat dat de 1-Wire interface incompatibel is met de Dallas/Maxim. Daar kwam ik achter toen ik een breakout board voor de RaspberryPi had geïnstalleerd en de AM2302 in het circuit opnam. OWFS ondersteunt het protocol NIET !
Als na deze handleiding het script niet draait en je de melding ” No module named Adafruit_DHT” krijgt, kun je het oplossen door onderstaande uit te voeren (ik heb een Pi 2 model B)
cd Adafruit_Python_DHT
sudo apt-get update
sudo apt-get install build-essential python-dev python-openssl
sudo python setup.py install
Vervolgens van deze handleiding verder gaan met:
wget https://raspberrytips.nl/files/dht22temp.py
sudo python dht22temp.py
Als ik het goed begrijp op https://www.raspberrypi.org/forums/viewtopic.php?p=402790#p402790 hoeft pin 4 niet per se gebruikt te worden? Dat zou namelijk onhandig zijn als je tegelijkertijd een 1-wire temperatuursensor wilt aansluiten. De DHT22 lijkt namelijk geen 1-wire sensor te zijn.
GPIO 4 / pin 7 bedoelde ik.
Ik wil namelijk deze temperatuursensor tegelijk kunnen aansluiten: https://raspberrytips.nl/ds18b20-raspberry-pi/
Je kunt voor de DHT22 inderdaad ook een andere GPIO gebruiken, bijvoorbeeld GPIO #22 (pin #15)
In het script vervang je de regel:
humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 4)
door:
humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 22)
Thanks mensen, heerlijke manual. Alles werkt prima, na de juiste plugs op de juiste pins te zetten. Leuk spelen. Groet, Adriaan
Ik krijg steeds onderstaande foutmelding, maar ik krijg deze niet opgelost.
Sensor is aangesloten op een Raspberry PI 4B.
Iemand enig idee?
sudo python /home/pi/Desktop/dht22temp.py
Traceback (most recent call last):
File “/home/pi/Desktop/dht22temp.py”, line 7, in
humidity = round(humidity, 2)
TypeError: a float is required
Op de Pi4B het zelfde probleem.
Echter alle stappen opgevolgd op een Pi Zero W geen probleem.
Meet nu de temperatuur op drie locaties, nog wel 3*PiZero mogelijk te integreren etc. volgende stappen. Eerst meer kennis van Python opbouwen.
Weet iemand hoe de uitlezing te combineren met een P1meter monitor van ZTATZ?
is heel mooi, ook binnen temperatuur te integreren in schaal en dashboard.