projekt:python_projekt_ds18b20_digitaler_temperatursensor
Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Projekt DS18B20 digitaler Temperatursensor
BEITRAG IN ENTSTEHUNG
Überblick
- Hardware ansteuern
- Environment aktivieren
- Software
Details
# ds18b20_smart.py import glob import time def is_sensor(): """Prüft, ob mindestens ein DS18B20 Sensor angeschlossen ist""" sensors = glob.glob("/sys/bus/w1/devices/28-*") return len(sensors) > 0 def get_sensor(): """ Gibt automatisch den ersten Sensor zurück. Ruft intern is_sensor() auf. Gibt None zurück, wenn kein Sensor da ist. """ if not is_sensor(): return None sensors = glob.glob("/sys/bus/w1/devices/28-*") return sensors[0] + "/w1_slave" def get_temperature(): """ Liest die Temperatur vom ersten Sensor aus. Nutzt intern get_sensor(). Gibt None zurück, wenn kein Sensor gefunden wird. """ sensor_file = get_sensor() if sensor_file is None: return None # Clever: kein Fehler, einfach None with open(sensor_file, "r") as f: lines = f.readlines() while lines[0].strip()[-3:] != "YES": time.sleep(0.2) with open(sensor_file, "r") as f: lines = f.readlines() temp_line = lines[1] temp_str = temp_line.split("t=")[1] return float(temp_str) / 1000.0 # -------- Beispiel Nutzung -------- if __name__ == "__main__": temp = get_temperature() if temp is None: print("Kein DS18B20 Sensor gefunden – bitte prüfen!") else: print(f"Aktuelle Temperatur: {temp:.2f} °C")
# ds18b20_smart.py import glob import time def is_sensor(): """ Prüft, ob mindestens ein DS18B20 Sensor angeschlossen ist. """ sensors = glob.glob("/sys/bus/w1/devices/28-*") return len(sensors) > 0 def get_sensor(): """ Gibt automatisch den ersten Sensor zurück. Ruft intern is_sensor() auf. Gibt None zurück, wenn kein Sensor da ist. """ if not is_sensor(): return None sensors = glob.glob("/sys/bus/w1/devices/28-*") return sensors[0] + "/w1_slave" def get_temperature(timeout=5): """ Liest die Temperatur vom ersten Sensor aus. Nutzt intern get_sensor(). Gibt None zurück, wenn kein Sensor gefunden wird oder ein Timeout auftritt. """ sensor_file = get_sensor() if sensor_file is None: return None start_time = time.time() while True: try: with open(sensor_file, "r") as f: lines = f.readlines() except OSError: return None # Prüfen ob CRC gültig if lines[0].strip().endswith("YES"): break # Timeout-Schutz if time.time() - start_time > timeout: return None time.sleep(0.2) try: temp_line = lines[1] temp_str = temp_line.split("t=")[1] return float(temp_str) / 1000.0 except (IndexError, ValueError): return None # -------- Beispiel Nutzung -------- if __name__ == "__main__": temp = get_temperature() if temp is None: print("Kein DS18B20 Sensor gefunden oder Lesefehler!") else: print(f"Aktuelle Temperatur: {temp:.2f} °C")
projekt/python_projekt_ds18b20_digitaler_temperatursensor.1771574728.txt.gz · Zuletzt geändert: von torsten.roehl
