===== DS18B20 Temperatursensor ===== ==== Raspberry Pi Konfiguration ==== Für den Temperatursensor werden die OneWire-Module benötigt. Zuerst ist eine Aktivierung im Raspberry Pi notwendig. Dafür müssen folgende Befehle im Terminal ausgeführt werden: sudo raspi-config # unter Interfacing Options muss 1-Wire aktiviert werden # NICHT neu starten! sudo vim /etc/modules # drücke i (insert), um in den Bearbeitunsgmodus zu gelangen # drücke ESC, um den Bearbeitunsgmodus zu verlassen # schreibe :wq und drücke Enter, um die Datei zu schreiben (w für write und q für quit) # oder sudo nano /etc/modules # hier kannst du direkt schreiben und mittels Strg-O die Datei speichern und mit Strg-X das Programm verlassen # füge die folgenden beiden Zeilen ganz unten in die Datei ein: w1-gpio w1-therm # Dies veranlasst, dass der Linux-Kernel beim Starten automatisch # die Treiber (Kernelmodule) für die One-Wire-Schnittstelle lädt. ==== Verkabelung ==== Das gelbe Kabel und das rote Kabel (bzw. das rechte und mittlere Beinchen) **müssen mit einem 4,7kOhm Widerstand** (gelb-lila-pink-[gold]) verbunden werden. Die Pins werden von links nach rechts und oben nach unten durchnummeriert. Beachte: Die Bezeichnungen sind dabei aber völlig unterschiedlich (siehe: [[https://pinout.xyz/pinout/1_wire|GPIO-Leiste Abbildung]]) **Für den wasserdichten Sensor mit Kabel gilt:**\\ rotes Kabel: 3V3 (PIN 1)\\ schwarzes Kabel: GND (bspw. PIN 6)\\ gelbes Kabel: BCM/GPIO 4 (PIN 7) **Für das Bauteil gilt (flache Seite mit Beschriftung zugewandt):**\\ linkes Beinchen: GND (bspw. PIN 6)\\ mittleres Beinchen: BCM/GPIO 4 (PIN 7)\\ rechtes Beinchen: 3V3 (PIN 1) {{:wetterstation:ds18b20-verkabelung.png|}} ==== Beispiel ==== import time def get_temp(filename): f = open(filename, 'r') content = f.readlines() f.close() temp = "error" if (content[0].strip())[-3:] == "YES": index = content[-1].find('t=') if index != -1: temp = float(content[-1][index+2:-1].strip()) temp = temp/1000.0 return temp sensor_path = "/sys/bus/w1/devices/28-00000ade26e7/w1_slave" while True: print(get_temp(sensor_path)) time.sleep(1) ==== Beispiel 2 ==== In diesem Beispiel wird die Temperatur mit °C und nur dann ausgegeben, wenn diese sich ändert. import time def get_temp(filename): f = open(filename, 'r') content = f.readlines() f.close() temp = "error" if (content[0].strip())[-3:] == "YES": index = content[-1].find('t=') if index != -1: temp = float(content[-1][index+2:-1].strip()) temp = temp/1000.0 return temp sensor_path = "/sys/bus/w1/devices/28-00000ade081f/w1_slave" y = 100 while True: Temperatur = get_temp(sensor_path) Temperatur = round(Temperatur, 1) if Temperatur != y: print(str(Temperatur) + "°C") y = Temperatur