Für das Messen der Temperatur und Luftfeuchtigkeit benutzen wir den Doppelsensor DHT22. Der Sensor ist mit Breakoutboard und kann direkt an einen GPIO Anschluss gesteckt werden. Dazu muss noch +5 Volt und Masse angeschlossen. Im vergleich zum DHT11 ist der Sensor genauer und dabei nicht viel teurer.
# -*- coding: UTF-8 -*- import spidev import Adafruit_DHT import MySQLdb import time from time import * sensortyp = Adafruit_DHT.DHT22 #spi vorbereiten (channel 0) spi = spidev.SpiDev() spi.open(0,0) # aktuelle, lokale Zeit als Tupel lt = localtime() # Entpacken des Tupels, Datum jahr, monat, tag, stunde, minute, sekunde = lt[0:6] tag = "%04i-%02i-%02i" % (jahr,monat,tag) zeit = "%02i:%02i:%02i" % (stunde,minute,sekunde) db=MySQLdb.connect("127.0.0.1","pi","f6g7h8","grow") cursor = db.cursor() print tag, zeit # sensor pins: 4,17,27 sensorarray = gpio pin, raum, sensornummer sensor=[[ 4,0,1],[17,1,1],[27,1,2]] # wenn ein senseor dazukommt, muss die zahl höher for i in sensor: print" ------------------------------------------------------------" print "Sensor - Pin: ",i[0], " - Raum: ", i[1], " - Nummer: ", i[2] z=1 while z < 10: h, t = Adafruit_DHT.read_retry(sensortyp, i[0]) h=round(h/2)*2 t=round(t) if h > 99: print z , ". Messung in Raum ", i[1] ," Sensor ", i[2] ,"fehlgeschlagen. Nächste Messung in 3 Sec." sleep(3) else: print "Raum ", i[1] ," Sensor ", i[2] , " Temperatur: ", t," C Luftfeuchtigkeit: ", h," %" sensorname = "R"+str(i[1])+"T"+str(i[2]) cursor.execute("select wert from log where datum='%s' and sensor='%s' order by zeit desc" % (tag, sensorname) ) wert=cursor.fetchone() if not wert or wert[0] != t: cursor.execute("insert into log(datum,zeit,sensor,wert) values('%s','%s','%s','%s')" % (tag, zeit, sensorname, t) ) sensorname = "R"+str(i[1])+"H"+str(i[2]) cursor.execute("select wert from log where datum='%s' and sensor='%s' order by zeit desc" % (tag, sensorname) ) wert=cursor.fetchone() if not wert or wert[0] != h: cursor.execute("insert into log(datum,zeit,sensor,wert) values('%s','%s','%s','%s')" % (tag, zeit, sensorname, h) ) break cursor.execute("SELECT COUNT(*) FROM log") anzahl = cursor.fetchone() print "%s Zeilen in Tabelle log" % anzahl[0] db.commit() db.close()