Raspberry Pi DIY Wetterstation – Temperatursensor
Der erste Sensor der Raspberry Pi DIY Wetterstation wird der Temperatursensor sein. Das ist der wichtigste Messwert für meinen Anwendungsfall. In diesem Artikel zeige ich euch wie man den Temperatursensor 18B20 verkabelt und über die Software abfragt.
Raspberry Pi DIY Wetterstation – Temperatursensor
In meinem Keller ist es zu kalt, deshalb soll nun laufend die Temperatur gemessen werden. Wie wirkt sich die laufende Heizung aus, wie ändert sich die Temperatur wenn Personen anwesend sind oder Geräte laufen. Wie schnell kühlt der Raum danach wieder ab. Wieweit wirkt sich die aktuelle Außentemperatur auf den Raum aus? All diese Fragen sollen durch die Messwerte vom Temperatursensor beantworten werden.
Temperatursensor 18B20
Vor vielen Jahren habe ich bereits mit dem Temperatursensor 18B20 gearbeitet. Man kann meine alte Anleitung auch heute noch verwenden, wer auf Nummer sicher gehen will folgt dieser. Der Sensor kam in einem Kit, er ist jedoch auch einzeln über zahlreiche Quellen im Internet erhältlich. Der DS18B20 ist ein so genannter 1-wire Sensor. Er benötigt neben der Stromversorgung nur eine Datenleitung. Er hat eine Genauigkeit von ±0,5 Grad Celsius ist für mein Projekt genau richtig.
DS18B20 Pinout
Der Sensor präsentiert sich wie folgt. Er hat 3 Pins, welche entsprechend der Grafik belegt sind. Von vorne links GND, in der Mitte die Spannung (5 Volt) und rechts die Datenleitung. Auf diesem Board ist noch ein Widerstand verlötet. Verwendet man nur den Sensor, dann sollte man einen 4.7 kΩ zwischen Spannung und Datenleitung anbringen.
Ich verwende für die Verkabelung aller Sensoren ein kleines Steckbrett. Dort habe ich den Vorteil, dass ich für Spannung und GND nur jeweils ein Kabel vom Raspberry Pi benötige. Diese sind direkt an den Leitungen + und – angeschlossen (rot für Spannung, schwarz für GND). In der gleichen Farbgestaltung gehen kurze Drähte zu den jeweiligen Pins der einzelnen Sensoren. Dafür habe ich von einem Kabel ein Stück abgeschnitten und die Enden mit dem Lötkolben verzinnt.
Die Datenleitung vom Temperatursensor geht nicht direkt zurück auf die GPIO Schnittstelle vom Raspberry Pi. Es handelt sich um ein 1-wire Connection, dort kann man auch mehrere Sensoren anschließen, wie beispielsweise den Luftfeuchtigkeitssensor in der Mitte. Erst von dort geht das blaue Kabel zurück auf die GPIO Schnittstelle.
Auf der GPIO Schnittstelle ergibt die Verkabelung folgendes Bild:
Software
Nachdem die Hardware (hoffentlich) korrekt angeschlossen ist geht es um die Software. Die Messwerte vom Sensor müssen abgefragt werden und wichtiger: für die weitere Verwendung vorbereitet werden. Schließlich werden wir kontinuierlich die Daten in die Cloud schicken. Die wichtigste Entscheidung zu Beginn ist die Wahl der Programmiersprache. Für die schnelle Entwicklung hat sich die Skriptsprache Python etabliert, vor allem weil die ja mit dem Pi einen Erfolg im IoT Bereich erlebt. Alternativ kann man auch beispielsweise C, Java, PHP oder ähnliches verwenden. Da es für die Sensoren fertige Python Bibliotheken gibt ist man damit einfach schneller.
Für den Temperatursensor benötigen wir gar keine zusätzliche Software. Ist der Sensor angeschlossen, dann findet man im Dateisystem eine Datei dafür. Aus der erfährt man den Messwert. In einem Python Script sieht das wie folgt aus:
# temperature from connected 18B20 sensor directory = "/sys/bus/w1/devices/" # find all connected 1-wire devices devices = os.listdir(directory) for f in devices: if f != "w1_bus_master1": file = open(directory+f+"/w1_slave") line = file.readline() if re.match(r"([0-9a-f]{2} ){9}: crc=[0-9a-f]{2} YES",line): line = file.readline() m = re.match(r"([0-9a-f]{2} ){9}t=([+-]?[0-9]+)",line) if m: sensor_18B20_temperature = str(float(m.group(2)) / 1000.0)
Das gesuchte Verzeichnis lautet /sys/bus/w1/devices. Dort findet man im w1_bus_master1 Verzeichnisse mit allen Sensoren, welche jeweils eine w1_slave Datei beinhalten. Bei mir sieht das wie folgt aus:
Der oben gezeigte Python Code wandelt diese unleserliche Ausgabe in eine Zahl um und speichert diese in der sensor_18B20_temperature Variable. Im gezeigten Bild wäre das 19.062. Das ist die aktuell gemessene Temperatur.
Fazit
Der Temperatursensor DS18B20 ist der erste Schritt hin zu einer mit Sensoren bestückten Wetterstation. Ich habe euch gezeigt wie man diesen an die GPIO Schnittstelle vom Raspberry Pi anschließt und mit einem Python Script Messwerte ausliest. Im nächsten Artikel geht es um den Sensor für die Luftfeuchtigkeit.
Diese Artikelserie besteht aus folgenden Artikeln:
- Raspberry Pi DIY Wetterstation
- Raspberry Pi DIY Wetterstation – initiales Setup
- Raspberry Pi DIY Wetterstation – Temperatursensor
- Raspberry Pi DIY Wetterstation – Luftfeuchtigkeitsensor
- Raspberry Pi DIY Wetterstation – Luftdrucksensor
- Raspberry Pi DIY Wetterstation – Wetter API
- Raspberry Pi DIY Wetterstation – Webserver
Hallo Werner,
der GPIO des Raspi kann nur 3,3 V vertragen. Deshalb solltest Du auch nur 3,3 V an den 18B20 anlegen.
Beste Grüße
Pofoklempner