Im Beitrag Raspberry PI Tutorial #4: DHT11 Sensor ansteuern (Teil1) habe ich gezeigt wie du die Daten vom DHT11 Sensor am Raspberry PI auslesen kannst. In diesem Beitrag möchte ich dir zeigen wie du die Daten in einer CSV Datei speichern kannst.
Für dieses Tutorial benötigst du die Schaltung welche ich im ersten Tutorial zum DHT11 Sensor aufgebaut habe.
Erweitern des Quellcodes
Ich verwende den Quellcode aus dem zuvor veröffentlichten Beitrag zum DHT11 Sensor wieder. Du kannst dir dieses bequem unter nachfolgendem Link herunterladen.
auslagern in einer Funktion
Zunächst einmal werden wir die Funktion des lesens der Werte in eine Funktion auslagern.
def readDht11Values(): #Variablen deklarieren und gleichzeitig die Werte vom Sensor empfangen. humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) #Wenn die Werte erfolgreich gelesen werden konnten dann... if humidity is not None and temperature is not None: #formatierte Ausgabe der Werte auf der Kommandozeile print('Temperatur={0:0.1f}*C Luftfeuchtigkeit={1:0.1f}%'.format(temperature, humidity)) else: #ansonsten #Ausgabe einer Fehlermeldung auf der Kommandozeile print('Fehler beim empfangen der Daten. Bitte versuche es erneut!')
Diese Funktion “readDht11Values” rufen wir nun in einer Dauerschleife auf.
while True: readDht11Values()
einbinden einer Pause
Der Sensor liefert alle 2 Sekunden einen neuen Wert daher legen wir nun nach dem lesen & ausgeben der Werte eine kleine Pause von 2,5 Sekunden ein. Dazu müssen wir zunächst die Bibliothek “time” einbinden.
import time
Nun können wir in der Dauerschleife die Pause mit der Funktion “sleep” implementieren. Diese Funktion erwartet als Parameter einen Gleitkommawert um zu definieren wie lange die Pause dauern soll.
time.sleep(2) #2 Sekunden Pause
erstellen und befüllen der CSV Datei
Eine CSV Datei ist eine ASCII Datei in welcher die Daten Kommasepariert aufgelistet werden.
Wie man Daten in eine CSV Datei mit Python speichert & ausliest habe ich im Tutorial Python #10: Dateiverarbeitung ausführlich beschrieben.
Als erstes benötigen wir eine Datei in welche wir die Daten schreiben können, diese erzeugen wir uns mit dem Tool “nano”
sudo nano dht11values.csv
In dem nun geöffneten Editor tragen wir die Kopfzeile ein,
Temperatur; Luftfeuchtigkeit
Speichern (Strg + O) und verlassen diesen mit der Tastenkombination “Strg + X”.
Nun können wir im Pythonskript diese Datei laden.
csvFile = open("dht11values.csv", "a")
Der Parameter Wert “a” steht hier für “append” d.h. es werden immer wieder Werte an das Dateiende hinzugefügt.
Die Daten schreiben wir mit der Funktion “write” wiefolgt:
csvFile.write('{0:0.1f}*C; {1:0.1f}%'.format(temperature, humidity))
Als Trennzeichen verwende ich das Semikolon, dieses kann später in zbsp. Microsoft Excel beim import der Daten konfiguriert werden.
schließen der Datei
Eine geöffnete Datei muss immer geschlossen werden! D.h. es sollte in jedemfall einen “Mechanismuss” geben welcher sicherstellt das die Datei geschlossen wird. Hier nutzen wir einen Try Except Block um unsere Dauerschleife:
#Wenn ein Fehler passiert dann soll dieser Abgefangen werden. try: while True: readDht11Values() time.sleep(2) #2 Sekunden Pause except KeyboardInterrupt: csvFile.close() #Schliesen der Datei beim beenden des Skriptes pass
Quellcode
Hier nun der gesamte überarbeitete Quellcode.
import Adafruit_DHT import time sensor = Adafruit_DHT.DHT11 pin = 4 csvFile = open("dht11values.csv", "a") def readDht11Values(): humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) if humidity is not None and temperature is not None: print('Temperatur={0:0.1f}*C Luftfeuchtigkeit={1:0.1f}%'.format(temperature, humidity)) csvFile.write('{0:0.1f}*C; {1:0.1f}%'.format(temperature, humidity)) csvFile.write('\n') else: print('Fehler beim empfangen der Daten. Bitte versuche es erneut!') try: while True: readDht11Values() time.sleep(2) except KeyboardInterrupt: csvFile.close() pass