Luftfeuchtigkeits-Sensor DHT22/AM2302: Unterschied zwischen den Versionen

Aus CyberWiki
Zur Navigation springen Zur Suche springen
 
Zeile 35: Zeile 35:
  humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
  humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
==Python Skript==
==Python Skript==
Unser Python-Skript, das den DS18B20 auswertet, wird erweitert und sieht nun wie folgt aus. Verbesserungsmöglichkeiten sind nicht ausgeschlossen.
Unser Python-Skript wertet nun zwei DS18B20 aus und zusätzlich den DHT22. Verbesserungsmöglichkeiten sind nicht unwahrscheinlich.<br />
 
  #!/usr/bin/env python
  #!/usr/bin/env python
  # -*- coding: utf-8 -*-
  # -*- coding: utf-8 -*-
  # Auslesen DS18B20 und DHT22
  # Auslesen zwei DS18B20 und DHT22
  #---------------------------
  #--------------------------------
  import os, sys, time
  import os, sys, time
  import Adafruit_DHT
  import Adafruit_DHT
   
   
  def Temp():
  def Temp(sensorfile):
    # 1-wire Slave Datei lesen
    # 1-wire Slave Datei lesen
    file = open('/sys/bus/w1/devices/' + sensorfile + '/w1_slave')
    file = open('/sys/bus/w1/devices/28-0516a328deff/w1_slave')
    filecontent = file.read()
    filecontent = file.read()
    file.close()
    file.close()
    # Temperaturwerte auslesen und konvertieren
    stringvalue = filecontent.split("\n")[1].split(" ")[9]
    # Temperaturwerte auslesen und konvertieren
    temperature = float(stringvalue[2:]) / 1000
    stringvalue = filecontent.split("\n")[1].split(" ")[9]
    # Temperatur ausgeben
    temperature = float(stringvalue[2:]) / 1000
    wert = '%6.1f' % temperature  
    return(wert)
    # Temperatur ausgeben
    wert = '%6.2f' % temperature  
    return(wert)
   
   
  Zaehler = 0
  Zaehler = 0
Zeile 63: Zeile 61:
   
   
  while Zaehler <= Anzahl:
  while Zaehler <= Anzahl:
    messdaten = Temp()
    # Zwei DS18B20 auswerten -----------------
    print "Temperatur: ", messdaten
    print "Temperatur DS18B20-1: ", Temp('28-0516a328deff'),"C"
    # DHT-22 auswerten ------------
    print "Temperatur DS18B20-2: ", Temp('28-0316a3428cff'),"C"
    sensor = Adafruit_DHT.DHT22
    # DHT-22 auswerten ------------------
    # GPIO-Nummer
    sensor = Adafruit_DHT.DHT22
    pin = 17
    # GPIO-Nummer
    humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
    pin = 17
    DHT22_Hum = '%6.2f' % humidity
    humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
    DHT22_Temp = '%6.2f' % temperature
    DHT22_Hum = '%6.1f' % humidity
    print "Feuchtigkeit: ", DHT22_Hum,"%"
    DHT22_Temp = '%6.1f' % temperature
    print "Temperatur DHT22: ", DHT22_Temp
    print "Temperatur  DHT22:   ", DHT22_Temp,"C"
    print "--------------------------"
    print "Feuchtigkeit DHT22:   ", DHT22_Hum,"%"
    time.sleep(Pause)
    print "-------------------------------"
    Zaehler = Zaehler + 1
    time.sleep(Pause)
    Zaehler = Zaehler + 1
   
   
  print "Sensorabfrage beendet"
  print "Sensorabfrage beendet"

Aktuelle Version vom 1. Juli 2017, 19:54 Uhr

https://tutorials-raspberrypi.de/raspberry-pi-luftfeuchtigkeit-temperatur-messen-dht11-dht22/

Diese Beschreibung bezieht sich auf:

Raspberry Pi Model B Revision 2.0 (512MB) - Raspberry Pi (c)2011.12
Raspbian Jessie Lite - Release date 2017-04-10, Kernel version 4.4

Pinbelegung und Schaltung

Der Messbereich des DHT22 umfasst 0 bis 100% relative Luftfeuchtigkeit, sowie einen Temperaturbereich von -40 bis 80 C bei einer Genauigkeit von +-0,5. Die Pinbelegung und erforderliche Beschaltung erkennt man an folgender Abbildung:

DHT22pins.jpg

Da der GPIO4 bereits durch den DS18B20 belegt ist, wird für den DHT22 der GPIO17 verwendet.
Die Schaltung wird wieder testweise auf dem Breadboard aufgebaut. Die Abbildung zeigt die Verkabelung von DS18B20 und DHT22.

DHT22 Test.jpg

Installation der Python Bibliothek von Adafruit

Zuerst müssen einige Pakete installiert werden:

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

Nun kann die Bibliotheken für die Sensoren geladen werden. Hier wird eine vorgefertigte Bibliothek von Adafruit verwendet, die verschiedene Sensoren unterstützt:

git clone https://github.com/adafruit/Adafruit_Python_DHT.git && cd Adafruit_Python_DHT
sudo python setup.py install

Wenn dieser Schritt funktioniert hat, können wir testweise Temperatur und Luftfeuchtigkeit auslesen. Dazu finden wir Demoskripte:

cd examples
sudo ./AdafruitDHT.py 22 17

Der erste Parameter (22) gibt an, welcher Sensor benutzt wird (DHT22) und der zweite den Anschluss-GPIO (die GPIO-Nummer, also 17). Es sollte folgende Ausgabe erscheinen.

$ sudo ./AdafruitDHT.py 22 17
Temp=24.0*  Humidity=41.0%

Die Sensoren sind nur alle zwei Sekunden bereit. Das muss man bei der Auswertung entsprechend berücksichtigen. Für die Einbindung der Bibliothek in Python-Skripte sind nur folgende Angaben nötig:

import Adafruit_DHT
...
sensor = Adafruit_DHT.DHT22
pin = 17
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)

Python Skript

Unser Python-Skript wertet nun zwei DS18B20 aus und zusätzlich den DHT22. Verbesserungsmöglichkeiten sind nicht unwahrscheinlich.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Auslesen zwei DS18B20 und DHT22
#--------------------------------
import os, sys, time
import Adafruit_DHT

def Temp(sensorfile):
   # 1-wire Slave Datei lesen
   file = open('/sys/bus/w1/devices/' + sensorfile + '/w1_slave')
   filecontent = file.read()
   file.close()
   # Temperaturwerte auslesen und konvertieren
   stringvalue = filecontent.split("\n")[1].split(" ")[9]
   temperature = float(stringvalue[2:]) / 1000
   # Temperatur ausgeben
   wert = '%6.1f' % temperature 
   return(wert)

Zaehler = 0
Anzahl = 12
Pause = 5

while Zaehler <= Anzahl:
   # Zwei DS18B20 auswerten -----------------
   print "Temperatur DS18B20-1: ", Temp('28-0516a328deff'),"C"
   print "Temperatur DS18B20-2: ", Temp('28-0316a3428cff'),"C"
   # DHT-22 auswerten ------------------
   sensor = Adafruit_DHT.DHT22
   # GPIO-Nummer
   pin = 17
   humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
   DHT22_Hum = '%6.1f' % humidity
   DHT22_Temp = '%6.1f' % temperature
   print "Temperatur   DHT22:   ", DHT22_Temp,"C"
   print "Feuchtigkeit DHT22:   ", DHT22_Hum,"%"
   print "-------------------------------"
   time.sleep(Pause)
   Zaehler = Zaehler + 1

print "Sensorabfrage beendet"