===== 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