Raspberry PI Tutorial #5: DHT11 Sensor ansteuern (Teil2), Sensorwerte in eine CSV Datei speichern

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.

Raspberry PI mit DHT11 Sensor
Raspberry PI mit DHT11 Sensor

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

Download

Video

Raspberry PI & DHT11 Sensor, schreiben in eine CSV Datei

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.