Kapitel 6: Sensoren auslesen
In this chapter ...
- ... you will connect a temperature sensor to your Raspberry Pi.
- ... you will get the values ot the temperature sensor in a script.
!/usr/bin/python
import os import time
def get_temperature(): # Pfad zum DS18B20-Temperatursensor sensor_path = "/sys/bus/w1/devices/28-XXXXXXXXXXXX/w1_slave" # Ersetze XXXXXXXXXXXX durch die tatsächliche ID deines Sensors
# Datei mit den Sensorwerten öffnen
try:
with open(sensor_path, 'r') as sensor_file:
lines = sensor_file.readlines()
# Temperaturwert aus den Sensorwerten extrahieren
temperature = float(lines[1].split('=')[1]) / 1000.0
return temperature
except IOError as e:
print(f"Fehler beim Lesen des Sensors: {e}")
return None
def main(): try: counter = 0 while True: temperature = get_temperature() if temperature is not None: print(f"Aktuelle Temperatur: {temperature} °C")
time.sleep(1)
counter += 1
# Hinweis nach jedem 3. Anzeigen der Temperatur
if counter == 3:
print("Das Programm kann mit STRG+C beendet werden.")
counter = 0
except KeyboardInterrupt:
print("\nProgramm wurde beendet.")
if name == "main": main()
Natürlich, hier ist eine Beschreibung jeder Zeile des Python-Skripts für den DS18B20-Temperatursensor:
import os
import time
import os
: Importiert das Betriebssystemmodul, das für den Zugriff auf das Dateisystem verwendet wird.import time
: Importiert dastime
-Modul, das für Zeitverzögerungen verwendet wird.
def get_temperature():
# Pfad zum DS18B20-Temperatursensor
sensor_path = "/sys/bus/w1/devices/28-XXXXXXXXXXXX/w1_slave"
# Ersetze XXXXXXXXXXXX durch die tatsächliche ID deines Sensors
def get_temperature():
: Definiert eine Funktion namensget_temperature
, die die Temperatur des DS18B20-Sensors ausliest.sensor_path = "/sys/bus/w1/devices/28-XXXXXXXXXXXX/w1_slave"
: Setzt den Pfad zur Datei, die die Rohdaten des Temperatursensors enthält. ErsetzeXXXXXXXXXXXX
durch die tatsächliche ID deines Sensors.
try:
with open(sensor_path, 'r') as sensor_file:
lines = sensor_file.readlines()
temperature = float(lines[1].split('=')[1]) / 1000.0
return temperature
except IOError as e:
print(f"Fehler beim Lesen des Sensors: {e}")
return None
with open(sensor_path, 'r') as sensor_file:
: Öffnet die Datei im Lesemodus und schließt sie automatisch nach dem Block.lines = sensor_file.readlines()
: Liest die Zeilen aus der Datei und speichert sie in der Variablelines
.temperature = float(lines[1].split('=')[1]) / 1000.0
: Extrahiert den Temperaturwert aus den Sensorwerten und konvertiert ihn von Milligrad Celsius in Grad Celsius.except IOError as e:
: Fangt einenIOError
ab, falls beim Lesen des Sensors ein Fehler auftritt.
def main():
try:
counter = 0
while True:
temperature = get_temperature()
if temperature is not None:
print(f"Aktuelle Temperatur: {temperature} °C")
time.sleep(1)
counter += 1
if counter == 3:
print("Das Programm kann mit STRG+C beendet werden.")
counter = 0
except KeyboardInterrupt:
print("\nProgramm wurde beendet.")
def main():
: Definiert die Hauptfunktion des Programms.counter = 0
: Initialisiert einen Zähler für die Anzahl der Temperaturanzeigenschleifen.while True:
: Startet eine Endlosschleife für die kontinuierliche Temperaturanzeige.temperature = get_temperature()
: Ruft die Funktionget_temperature
auf, um die Temperatur zu erhalten.if temperature is not None:
: Überprüft, ob die Temperatur erfolgreich gelesen wurde.time.sleep(1)
: Pausiert für eine Sekunde zwischen den Temperaturmessungen.counter += 1
: Inkrementiert den Zähler.if counter == 3:
: Überprüft, ob der Zähler 3 erreicht hat (nach jedem 3. Anzeigen der Temperatur).print("Das Programm kann mit STRG+C beendet werden.")
: Gibt einen Hinweis aus, dass das Programm mit STRG+C beendet werden kann.except KeyboardInterrupt:
: Behandelt die Unterbrechung durch den Benutzer (z.B., durch Drücken von STRG+C).print("\nProgramm wurde beendet.")
: Gibt eine Abschlussmeldung aus.
Situation
Lizenz
Der FISI LF02 Kurs von Rainer Horn, Dave Brett & André Neumann ist lizenziert unter einer Creative Commons Namensnennung - Nicht-kommerziell - Weitergabe unter gleichen Bedingungen 4.0 International Lizenz. Fragen, Hinweise etc. an horn@mmbbs.de, brett@mmbbs.de und neumann@mmbbs.de.