Benutzer-Werkzeuge

Webseiten-Werkzeuge


projekt:python_projekt_ds18b20_digitaler_temperatursensor

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
projekt:python_projekt_ds18b20_digitaler_temperatursensor [2026/02/20 08:38] – [Test] torsten.roehlprojekt:python_projekt_ds18b20_digitaler_temperatursensor [2026/02/23 12:09] (aktuell) – [Ausführen des Programms] torsten.roehl
Zeile 3: Zeile 3:
 [[python| ☚ zurück]] [[python| ☚ zurück]]
  
-FIXME  BEITRAG IN ENTSTEHUNG+ 
 +//In diesem Projekt wird ein digitaler Temperaturfühler vom Typ DS18B20 am Raspberry Pi per 1-Wire-Schnittstelle betrieben. Nach Aktivierung der 1-Wire-Schnittstelle liefert der Kernel die Messwerte über das //Sysfs-Interface//. Ein Python-Modul liest diese Werte ein und gibt die aktuelle Temperatur in Grad Celsius auf der Kommandozeile aus. 
 +// 
 + 
  
 ====== Überblick ====== ====== Überblick ======
-  * Hardware ansteuern +  * Voraussetzungen 
-  Environment aktivieren+      * 1-Wire aktivieren 
 +  * Hardware ansteuern  
 +      Messprinzip
   * Software   * Software
 +     * Environment aktivieren
 +     * Beispiel Programm
    
  
  
 ---- ----
- 
 ====== Details ====== ====== Details ======
  
 +===== Voraussetzungen =====
  
-===== DS18B20 API =====+|{{ :raspberry_pi:wire-1.png?550 |}}| 
 +|<WRAP> In ''raspi-config'' wird die 1-Wire-Schnittstelle aktiviert. Danach ist das Verzeichnis ''/sys/bus/w1/devices'' vorhanden. Hier erscheint dann der Sensor, falls er korrekt angeschlossen wurde.</WRAP>|
  
-<code python ds18b20.py >+===== Hardware ansteuern  ===== 
 + 
 +Der DS18B20 kommuniziert über die 1-Wire-Schnittstelle. Dabei erfolgt die gesamte Datenübertragung seriell über die DATA-Leitung (**GPIO4**) mit einem Pull-Up-Widerstand gegen <color #ed1c24>3.3 V</color>
 + 
 +|{{ :raspberry_pi:ds18b20.png?350 |}}| 
 +| Für Einsteiger sind die //etwas teureren Fertigmodule// sinnvoller, da die benötigten Zusatzbauteile (hier insbesondere der 4,7 kΩ Pull-Up-Widerstand) bereits integriert sind. Dadurch kann der **DS18B20** mit nur drei Leitungen **(VCC, GND, DATA)** direkt angeschlossen und getestet werden.| 
 + 
 + 
 +Verdrahtung: 
 +  
 +^ Modul ^ Raspberry Pi GPIO ^ 
 +| GND   | beliebigen GND  | 
 +| <color #ffc90e>DATA</color>    | **GPIO4** (Pin 7) | 
 +| <color #ed1c24>VCC </color> | **<color #ed1c24>3.3 V </color>**  |    
 + 
 + 
 + 
 + 
 +<note tip>**Wichtig** 
 + 
 +Es kann nicht jeder beliebige GPIO-Pin verwendet werden. Standardmäßig ist dafür GPIO4 vorgesehen. Andere Pins müssen explizit über das Device-Tree-Overlay konfiguriert werden; dies wird hier nicht behandelt. 
 +</note> 
 + 
 +Beim DS18B20 gilt: 
 +  * Auflösung: 0,0625 °C  (12 Bit) 
 +  * Genauigkeit: ±0,5 °C 
 +  * Messbereich −55 °C bis +125 °C 
 +==== Messprinzip ==== 
 + 
 +<note>Das Messprinzip ist unter Linux sehr einfach. 
 + 
 +**Ein Programm muss lediglich die Datei ''w1_slave'' auslesen.** 
 +</note> 
 + 
 +|{{ :raspberry_pi:w1_device.png?600 |}}| 
 +|Mit ''cat w1_slave'' kann die Temperatur ausgelesen werden. Hier entspricht **t=21500** einer Temperatur von **21.500 °C**. | 
 + 
 +++++ Hintergrund | 
 + 
 +Nach Aktivierung von 1-Wire über ''raspi-config'' stellt der Kernel die Temperatur als Datei im ''Sysfs'' bereit, z. B.:  ''/sys/bus/w1/devices/28-000000714b90/w1_slave'' 
 + 
 +Der Name ''28-000000714b90'' ist die eindeutige ''64-Bit-ROM-ID'' des **DS18B20** und ist bei jedem Sensor unterschiedlich (Familiencode 28). 
 + 
 +Die gesamte 1-Wire-Kommunikation übernimmt der Kernel. 
 + 
 +  * Bei jedem Lesezugriff auf diese Datei stößt der Kernel automatisch eine neue Temperaturumwandlung an. 
 +  * In der ersten Zeile signalisiert „YES“, dass die CRC-Prüfung erfolgreich war. 
 +  * In der zweiten Zeile steht der Temperaturwert hinter „t=“ in Milligrad Celsius. 
 +++++ 
 + 
 +===== Software ===== 
 +=== Programmstruktur === 
 +|{{ :raspberry_pi:temperature_test.png?450 |}}| 
 +|Im Projektordner „course_temp_reader“ befinden sich im Verzeichnis ''src'', die beiden Dateien „hardware.py“, welche den Sensor anspricht und den Temperaturwert ausliest, sowie das kleine Testprogramm „temp_reader.py“ als Demonstration.| 
 + 
 +==== Environment aktivieren ==== 
 + 
 + 
 +<note important> 
 +**Aktiviere die Python-Environment** 
 + 
 +Die Programmierung erfolgt nun immer mit der gewählten Umgebung! 
 +<code> 
 +source ~/devel/projects/course_env/bin/activate 
 +</code> 
 + 
 +</note> 
 +==== DS18B20 API ==== 
 +Unsere Beispiel-API ist bewusst einfach gehalten und unterstützt hier nur einen einzelnen Sensor. Bei Bedarf kann die Implementierung problemlos auf mehrere Sensoren erweitert werden; darauf wird in diesem Projekt jedoch verzichtet. 
 + 
 + 
 +<code python hardware.py >
  
 import glob import glob
Zeile 26: Zeile 106:
  
 # ----------------------------- # -----------------------------
-# API-Funktionen+# API-Funktionen ds18b20
 # ----------------------------- # -----------------------------
 SENSOR_TIMEOUT = 1  # Sekunden SENSOR_TIMEOUT = 1  # Sekunden
Zeile 67: Zeile 147:
  
    
-===== Test =====+==== Temperature ====
  
-<code python test.py >+<code python temp_reader.py > 
 +#!/usr/bin/env python3
  
-from ds18b20 import get_temperature+from hardware import get_temperature
  
 def main(): def main():
     temp = get_temperature()     temp = get_temperature()
     if temp is not None:     if temp is not None:
-        print(f"Aktuelle Temperatur: {temp:.2f} °C")+        print(f"Temperatur: {temp:.2f} °C")
     else:     else:
-        print("Kein Sensor gefunden oder Lesefehler!")+        print("Sensor nicht gefunden!")
  
 if __name__ == "__main__": if __name__ == "__main__":
     main()     main()
 </code> </code>
 +
 +==== Ausführen des Programms ====
 +Nach dem Programmstart wird auf der Kommandozeile die Temperatur in Grad Celsius ausgegeben, sofern der Sensor korrekt erkannt wurde und die Messung erfolgreich war.
 +
 +<code bash>
 +cd ~/devel/projects/course_temp_reader/src
 +chmod 755 temp_reader.py
 +./temp_reader.py
 +
 +# Beispielausgabe:
 +Temperatur: 21.25 °C
 +</code>
 +
 +
  
projekt/python_projekt_ds18b20_digitaler_temperatursensor.1771576709.txt.gz · Zuletzt geändert: von torsten.roehl