Benutzer-Werkzeuge

Webseiten-Werkzeuge


projekt:python_projekt_ds18b20_digitaler_temperatursensor

Dies ist eine alte Version des Dokuments!


Projekt DS18B20 digitaler Temperatursensor

☚ zurück

FIXME 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