Temperatur-Sensor DS1820 am Raspberry Pi mit Python
In diesem Beitrag und dem dazugehörigen Video zeige ich dir neben dem Anschluss und der Installation, wie du einen Temperatur-Sensor DS1820 am Raspberry Pi mit Python auslesen kannst.
Aktualisiert am 12.09.2023: Der ursprüngliche Beitrag stammt vom 07.10.2015 und wurde heute von mir aktualisiert. Neben einer Sensorbeschreibung und einer aktualisierten Hardwareübersicht habe ich den Code an Python 3 angepasst.
Informationen zum 1-Wire Bus, an dem der Sensor angeschlossen ist, findest du in meinem Beitrag “Mehrere DS1820 Sensoren am Raspberry Pi mit Python einlesen“. Dort stelle ich dir ein Programm mit Funktionen zur automatischen Einbindung der DS1820 Sensoren zur Verfügung.
Was ist der DS1820 Temperatursensor?
Der DS1820 ist ein digitaler Temperatursensor, der Temperaturen von -55°C bis +125°C mit einer Genauigkeit von ±0,5°C im Bereich von -10°C bis +85°C messen kann. Ein kleines, unscheinbares Bauteil, das uns jedoch detaillierte Informationen über die Umgebungstemperatur liefert.
Konfiguration des DS1820 mit dem Raspberry Pi
Bevor wir mit der Programmierung beginnen, müssen wir natürlich unseren DS1820 mit dem Raspberry Pi verbinden. Für die Verbindung benötigen wir
- einen Raspberry Pi (ich verwende den Raspberry Pi 4, aber auch andere Modelle funktionieren)
- einen DS1820 Temperatursensor / in meinem Videoaufbau verwende ich den DS18B20 IC digital Temperatursensor inklusive 1 m Kabel in der wasserdichten Ausführung.
- einen 4,7k Ohm Pull-Up Widerstand
- ein Breadboard und entsprechende Kabel zum Testen, wenn du noch keines hast, empfiehlt sich gleich ein entsprechendes Set
Der DS1820 hat drei Anschlüsse: VDD (Versorgungsspannung), DQ (Daten) und GND (Masse). Der Anschluss ist einfach:
Der GND-Pin des DS1820 wird mit einem der Masse-Pins des Raspberry Pi verbunden.
Der DQ-Pin des DS1820 wird mit einem GPIO-Pin deiner Wahl am Raspberry Pi verbunden – ich nehme hier den Pin7 (GPIO4).
Zwischen VDD und DQ solltest du den 4,7k Ohm Pull-Up-Widerstand platzieren.
Installation des DS18B20
Nachdem nun alles angeschlossen ist, binden wir den Sensor in das Raspberry Pi OS ein und aktivieren den 1-Wire Bus.
Die folgenden Befehle werden über das Terminal eingegeben. Zuerst lasse ich mir die vom System geladenen Module anzeigen.
1 |
sudo lsmod |
Danach kommt die Aktivierung des 1-Wire Buses mit folgenden Befehlen.
1 2 3 |
sudo modprobe wire sudo modprobe w1-gpio sudo modprobe w1-therm |
Als Nächstes erweitern wir die Dateien, die für die automatische Aktivierung des Busses und des Sensors nach einem Neustart notwendig sind. Ab Kernel-Version 3.8 ist die Erweiterung der Datei /etc/modules nicht mehr notwendig. Öffne dazu die Datei in deinem Texteditor mit dem Befehl
1 |
sudo nano /etc/modules |
und füge die folgenden drei Zeilen ein.
1 2 3 |
wire w1-gpio w1-therm |
Ab Kernel 3.8 ist die Datei config.txt für das Laden der Module zuständig. Diese öffnest du mit dem Befehl
1 |
sudo nano /boot/config.txt |
und füge die folgenden zwei Zeilen hinzu, der Kommentar ist optional. Wichtig: Wenn du deine Sensordatenleitung an einen anderen GPIO-Pin angeschlossen hast, musst du anstelle der 4 den Pin angeben, den du verwendest.
1 2 3 |
# Temperatursensor an 1-Wire dtoverlay=w1-gpio gpiopin=4 |
Danach führst du einen Neustart des Raspberry Pi aus.
1 |
sudo reboot |
Nach dem Neustart kannst du mit dem Befehl
1 |
sudo lsmod |
die korrekte Aktivierung des 1-Wire Bus überprüfen.
geladene Module ohne 1-Wire Aktivierung |
geladene Module mit 1-Wire Aktivierung |
Auslesen der Sensordaten
Das System schreibt den aktuellen Sensorwert immer in eine Datei. Diese Datei befindet sich in einem Verzeichnis, das durch die Sensor-ID bestimmt wird. Wechsle hierzu in das Busverzeichnis mit
1 |
cd /sys/bus/w1/devices |
und führe den Befehl zum Anzeigen des Inhaltsverzeichnisses aus.
1 |
ls |
Bei einem Sensor werden dir nun zwei Verzeichnisse angezeigt. Ein Verzeichnis ist “w1_bus_master1”, das für uns wichtige Verzeichnis ist das mit einer Code-Bezeichnung, in meinem Fall “28-0516848e26ff“.
Mit dem folgenden Befehl kann der Inhalt der Datei “w1_slave” mit dem Sensorwert bzw. der Temperatur angezeigt werden.
1 |
cat /sys/bus/w1/devices/<em>28-0516848e26ff</em>/w1_slave |
Eine Übersicht über wichtige und häufig verwendete Befehle stelle ich dir auf einem kleinen Spickzettel für Raspberry Pi OS Befehle zur Verfügung.
Das Python-Programm
Als Erweiterung zum folgenden Programmcode stelle ich in meinem Beitrag “Mehrere DS1820 Sensoren am Raspberry Pi mit Python einlesen” ein Programm mit Funktionen zur automatischen Einbindung der DS1820 Sensoren zur Verfügung.
Denke daran, dass der Befehl file = open(‘/sys/bus/w1/devices/28-0516848e26ff/w1_slave’) die Sensorbezeichnung deines Sensors enthalten muss.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
#!/usr/bin/python # coding=utf-8 # messprogramm.py #---------------- import os, sys, time def aktuelleTemperatur(): # 1-wire Slave Datei lesen file = open('/sys/bus/w1/devices/28-0516848e26ff/w1_slave') filecontent = file.read() file.close() # Temperaturwerte auslesen und konvertieren stringvalue = filecontent.split("\n")[1].split(" ")[9] temperature = float(stringvalue[2:]) / 1000 # Temperatur ausgeben rueckgabewert = '%6.2f' % temperature return(rueckgabewert) schleifenZaehler = 0 schleifenAnzahl = 20 schleifenPause = 1 print ("Temperaturabfrage für ", schleifenAnzahl, " Messungen alle ", schleifenPause ," Sekunden gestartet") while schleifenZaehler <= schleifenAnzahl: messdaten = aktuelleTemperatur() print ("Aktuelle Temperatur : ", messdaten, "°C", "in der ", schleifenZaehler, ". Messabfrage") time.sleep(schleifenPause) schleifenZaehler = schleifenZaehler + 1 print ("Temperaturabfrage beendet") |
Anmerkung:
Grundlage für meinen Beitrag bzw. die Umsetzung des Temperatursensors auf meinem Raspberry Pi ist der Beitrag “Raspberry Pi – Temperaturmessung mit DS18B20 1-Wire Sensor” von Marcus Hottenrott und der nicht mehr verfügbare Beitrag “Raspberry Pi: 1-Wire Temperatursensor DS1820” von Prof. Jürgen Plate.
Fazit
Der DS1820 Temperatursensor ist ein beeindruckendes kleines Bauteil, das uns präzise Temperaturdaten liefert. In Kombination mit dem Raspberry Pi und Python lässt er sich leicht in jedes Projekt integrieren. Egal ob du ein intelligentes Heimthermostat, eine automatische Lüftersteuerung oder einfach nur ein digitales Raumthermometer bauen möchtest, der DS1820 ist dein zuverlässiger Partner.
Bereitgestellte Dateien und Links
Die Fritzing Projektdatei steht auch auf meiner Fritzing Projektseite auf diesem Blog zum Download zur Verfügung.
Wenn du dir das Abtippen oder Kopieren des Codes sparen möchtest, steht dir der Code als Textdatei zum Download bereit.
Gib im Terminal folgenden Befehl ein, dieser lädt die Textdatei herunter und speichert diese als Python-Datei ab.
1 |
wget -O messprogramm.py https://webnist.de/downloads/messprogramm.txt |
Eine Projektübersicht zu diesem Beitrag habe ich als Video auf YouTube hochgeladen.
Raab Wolfgang schrieb am 28. Oktober 2023:
Hallo,
also am Raspberry Pi 4 liegt es nicht, da ich den Code bzw. die letzte Aktualisierung mit einem solchen gemacht habe. Auch unter Raspberry Pi OS Bookworm habe ich es erfolgreich getestet. Der Widerstand muss nicht aktiviert werden. Auch ist ein Setzen des pullup nicht notwendig, aber auch nicht schädlich.
Ist den der Sensor richtig verdrahtet bzw. liegen auch 3,3 V an und ist die Datenleitung auch wirklich am GPIO 4 angeschlossen?
Danke für die antwort
habe alles noch mal geprüft spannung config etc zusätzlich auf pi 11 versucht — gleiches Ergebnis. ich habe den Verdacht das der pi die Eingänge mit der Pin Kennung nicht auf empfang geschaltet hat so das die daten vom ds18b20 nict eingelesen werden können.
lässt sich prüfen ob der Eingang auf empfang ist ? Deine Meinung dazu ?
Hallo,
wenn alles so gemacht ist, wie in dem Beitrag beschrieben, weiß ich leider auch keinen Rat. Allerdings ist mir aufgefallen, es wird 00-1c0000000000
00-5c0000000000 und 00-9c0000000000 angezeigt, obwohl nur ein Sensor angeschlossen ist. Kann es sein, dass der Sensor defekt ist?
Viele Grüße
Wolfgang
Leider funktioniert das unter Raspi 4 nicht so einfach. Habe alles wie beschrieben mit 1 sensor getestet und die Config.txt so geändert
dtoverlay=w1-gpio
gpiopin=4
pullup=1
Muss nicht auch der Pullup widerstand aktiviert werden ?
Bei mir wird kein code vom ds18b20 eingelesen ich kann also auch nicht die Datei w1_slave finden
unter lsmod wird aber folgendes angezeigt
w1_gpio 16384 0
wire 45056 2 w1_gpio,w1_therm
cn 16384 1 wire
und auch
/sys/bus/w1/devices$ ls
00-1c0000000000
00-5c0000000000
00-9c0000000000
w1_bus_master1
unter den vorstehenden codes liegt kein W1_slave
was mache ich falsch
Hallo,
also am Raspberry Pi 4 liegt es nicht, da ich den Code bzw. die letzte Aktualisierung mit einem solchen gemacht habe. Auch unter Raspberry Pi OS Bookworm habe ich es erfolgreich getestet. Der Widerstand muss nicht aktiviert werden. Auch ist ein Setzen des pullup nicht notwendig, aber auch nicht schädlich.
Ist den der Sensor richtig verdrahtet bzw. liegen auch 3,3 V an und ist die Datenleitung auch wirklich am GPIO 4 angeschlossen?
Guten Tag Herr Raab,
ich bin bei der Suche nach Einsteiger-Tutorials für DIY-IOT über Raspberry auf Ihrer Seite gelandet. Die Auswertung des Temperatursensors war schon sehr interessant, das kommt in meinen Plänen ebenfalls vor. Allerdings würde ich derartige Sensoren gerne über Funk abrufen. Ich stehe allerdings noch so ziemlich komplett am Anfang und habe nur äußerst geringe (SQL) bzw. keine Vorkenntnisse (Funktechnik/Konnektivität). Können Sie mir im Anbieter- und Lösungs-Dschungel eine grobe Orientierung geben, in welche Richtung meine Recherche gehen muss?
Vielen Dank vorab!
Hallo,
vielen Dank für die Rückmeldung.
Die erste Frage die mir durch den Kopf ging, wer soll die Daten wohin senden. Zum Beispiel könnten Sie wie in meinem Beitrag DS18B20 Temperatursensor am ESP8266 mit 2 AA Batterien verwenden die Daten versenden lassen. Auf alle Fälle brauchen Sie einen Empfänger, der die empfangenen Daten speichert. Dies kann ein Raspberry Pi sein.
Als Funkmodul würde ich mir mal NRF24L01+ 2.4 GHz Wireless Funk Module ansehen.
Hallo Wolfgang, ich habe Dein Beispiel in ein Programm übernommen und wollte damit eine Zweipunktregelung zum Beheitzen eines Whirl-Pools realisieren.
Leider “hängt” sich der gemessene Temperaturwert des DS18B20 nach Erreichen des oberen Grenzwertes auf und wird im anschließend kälter werdenden Wasser leider nicht mehr aktuallisiert.
Hast Du eine Ahnung, an was das liegen könnte?
Vielen Dank für Deine Hilfe
Wolfgang
Hallo Wolfgang,
das hört sich nach einem schönen Projekt an.
Leider kann ich dir hierzu nichts sagen. Erstmal wäre zum Klären, ob der Fehler im Programmcode oder im System liegt. Wenn der Wert sich auch im Busverzeichnis nicht ändert, würde ich einmal einen anderen Sensor ausprobieren. Ändert sich dieser Wert allerdings, scheint es an einem Fehler im Programmcode sein. Um hier eine Hilfestellung geben zu können, müsste ich diesen einsehen. Hierzu kannst du in mir gerne mal per E-Mail zusenden.
Viele Grüße
Wolfgang
Hallo Wolfgang,
ich bin recht neu auf dem gebiert aber bin guter dinge das ganze mit deiner Anleitung umsetzen zu können.
Ich habe hier nur 5,1kOhm Wiederstände zur Hand.
wie würden sich die 400 Ohm mehr auswirken?
kann ich bedenkenlos 5,1kOhm verwenden?
vielen dank
Carmelo
Hallo Carmelo,
herzlich Willkommen unter den Makern 🙂
Da es auch ein wenig auf die Länge und Art der Datenleitung ankommt, würde ich sagen, probiere es einfach mal aus. Im schlimmsten Fall liefert der Sensor keinen Wert.
Liebe Grüße
Wolfgang
Hallo Wolfgang, vielen Dank für diesen tollen Beitrag, den ich bei der Suche nach meinem ersten Pi + GPIO Projekt gefunden habe.
Eine Frage: laut Datenblatt benötigt der Sensor zwischen 1 – 1,5 mA
Web ich allerdings die Stromstärke bei 3,3 V und 4,7 kOhm ausrechne, komme ich auf etwa 0,7 mA für die Datenleitung. Kann es da nicht zu Problemen wegen der zu geringen Stromstärke kommen?
Wenn ich den 5 V Pin verwende, komme ich bei den gleichen Widerstand auf die richtige Stromstärke. Sollte ich dann nicht lieber diese verwenden?
Danke und Gruß,
Dominik
Hallo Dominik,
vielen Dank für Dein Lob.
Zu Problemen mit der geringen Stromstärke kommt es meiner Erfahrung nicht. Die Energieversorgung per 5 Volt ist möglich, allerdings musst du beachten, die GPIO-Ports vertragen nur 3,3 Volt. Eine gute Erklärung findest du auf folgende Seite: http://www.netzmafia.de/skripten/hardware/RasPi/Projekt-Onewire/index.html
Viele Grüße
Wolfgang
Hallo Wolfgang,
habe dein Projekt jetzt auch zum laufen gebracht:-)
Kurze Frage:
wie aknn ich jetzt die Messungen über 24 Stunden aufzeichen lassen bzw abspeichern?
Hallo Markus,
herzlichen Glückwunsch zur Umsetzung und vielen Dank für Deinen Kommentar.
In meiner Betragskategorie “Temperatur WebApp” findest Du entsprechende Anregungen zu Deiner Frage.
Viele Grüße
Wolfgang
Hallo Wolfgang
Besteht auch die Möglichkeit an ein gpio Pin ein Windmesser wie den technoline TX 23 anzuschließen und damit Wind Messung zu machen ? Gruß Michael
Hallo Michael,
selbst kenne ich den TX 23 nicht. Eine kurze Google-Recherche hat mir aber verschiedene Ergebnisse gebracht. Anscheinend gibt es verschiedene Versionen, die eine bietet eine UART Schnittstelle, die andere eine 1-Wire Version. Beide könntest du am Raspberry an den entsprechenden Schnittstellen anschließen und auslesen. Zum Auslesen musst du evtl. das richtige Protokoll kennen, aber hierfür liefert Google mehrere Ansätze.
Viele Grüße
Wolfgang
Hallo!
Erstmals danke für dieses tolle Einführung, wenn ich es für meinen Zweck hier adaptiert habe dann werde ich Sie gerne über den Donation Button Unterstützen, denn solche Beiträge sind für Anfänger auserordentlich wichtig!
ich würde gerne die Programmwerte in einem File speichern und wenn der Wert einen bestimmten Wert unterschritten hat soll ein Email (mit Phyton Script? versendet werden.
Den Schleifentimer habe ich erhöht damit nur alle 30 min die Temperatur gemessen wird, dafür würde ich gerne das das Programm endlos läuft. (Schleifenanzahl = 1.000.000.000)
“nice to have” und vermutlich sehr aufwändig:
Es wäre cool wenn man den aktuellen Wert in einem Extra Fenster ganz groß darstellen lässt, z.b grüne Werte für OK und rote Werte für einen Wert unter z.b Nullgrad.
lg aus Österreich
Hallo Jürgen,
vielen Dank für Deine Nachricht.
Damit dein Skript in einer Endlos-Schleife abläuft, würde ich es über eine Statusabfrage statt der von dir erwähnten Zählermethode realisieren. Umgesetzt habe ich dies u.a. in meinem Beitrag “Mehrere DS1820 Sensoren am…”. Bei der Speicherung der Temperaturwerte empfiehlt sich die Speicherung im SQLite3 Format, hierzu empfehle ich dir meinen Beitrag “SQLite 3 Datenbank mit Python erstellen und auslesen”. Zum Thema E-Mail Versand würde ich dir den Beitrag “E-Mails versenden mit Python” auf Coding World empfehlen.
Wenn du den Raspberry Pi mit Monitor verwendest, solltest du dich mit dem Thema grafische Oberfläche beschäftigen. Siehe hierzu den Beitrag “9. Graphische Benutzeroberfläche” auf der Seite pythonbuch.com.
Wenn dir zwei oder drei LED’s ausreichen, empfehle ich dir meinen Beitrag “Ansteuerung von 3 LEDs…“. Weitere Beiträge zu diesem Thema habe ich unter der Kategorie “Temperatur WebApp” zusammengefasst.
Viele Grüße
Wolfgang
Hallo Wolfgang
Dein Video hat mir Sehr geffalen.
Köntest du villeicht noch ein video wie dieses zum AM 2302 (DHT22) machen.
Mit dem DHT22 bzw.AM2302 kann man ja Feuchtigkeit und Temperatur messen.
Da muss aber dann auch ein Script geschrieben werden mitten s python.
Gruß Michael
Hallo Michael,
vielen Dank für Deinen Kommentar und Anregung. Wenn Du Dir das Skript meines Beitrages “OLED Display mit SSD1306 Controller am RaspberryPi und Python verwenden” ansiehst, findest Du die Ansteuerung und Auslesung des DHT Sensors in Python. Den Anschluss des Sensors kannst Du ebennfalls dem Beitrag, oder der entsprechenden Frizing-Projektdatei entnehmen. Die Einbindung der notwendigen Python Bibliothek erfolgt über die Befehle:
git clone https://github.com/adafruit/Adafruit_Python_DHT.git && cd Adafruit_Python_DHT
sudo python setup.py install
Viele Grüße
Wolfgang
Danke für die schnelle Rückantwort auf meine Frage
Das Problem St glaube ich das wenn das messprogramm 7 Tage Woche läuft die Daten Bank sprengen könnte. Was ich gerne noch umsetzen würde wäre Datum NDR Uhrzeit zur messspalte hinzu zufügen Gruß Michael. Das nächste ist das Projekt von dir mit der Web App und der Auswertung der messdatemessadapter. Gruß Michael
Hallo Michael,
gerne doch. Die Datenbankgröße ist natürlich von der Anzahl der Einträge abhängig, allerdings sind die Einträge doch sehr platzsparrend, sodass du dir am Anfang deines Projektes bei einer entsprechend großen SD-Karte keine Gedanken machen musst. Vielleicht verlegst du die Daten ja auch auf ein externes Datenmedium (NAS, Netzlaufwerk, USB-Medium usw.)
Viele Grüße
Wolfgang
Wie kann ich endlos Messwerte erfassen im bereich des Temperatursensor s?
Wie heißt dieser Befehl ?
Gruß Michael
Ich würde mir gerne daraus eine Wetterstation bauen
Ihre Videos sind sehr gut erklärt und machen es einem Anfänger wie mir recht einfach dies nachzuvollziehen
Hallo Michael,
einen direkten Befehl für die ununterbrochene Messwerterfassung gibt es nicht. Aber du kannst die in diesem Beispiel vorhandene while-Schleife abändern bzw. auf unendlich, setzten indem du den Zähler löschst bzw. auskommentierst.
Auskommentierte Zeile 37: #schleifenZaehler = schleifenZaehler + 1
Viele Grüße
Wolfgang
Sehr tolles Portal die Erklärung der Programmierung von Python und auch das konfigurieren des wir eine sensor s an einem Py ist echt super verständlich erklärt worden . Bin auf das nächste Toturial das aufzeichnen und anzeigen von Messwerten des One wirke Sensors gespannt . Großes Lob an den Autor.
Vielen Dank für die positive Rückmeldung. 🙂
Viele Grüße
Wolfgang
Hallo, ich bin anfänger mit dem Pi finde deine seiten prima aber habe eine Frage zur GPIO Bezeichnung.
Ich habe gelesen das die Bezeichnungen sehr unterschiedlich gehändelt werden und um Missverständnisse zu vermeiden es sinnvoll ist die GPIO bzw BCM bezeichnungen zu nutzen.z.B.
GPIO.setmode(GPIO.BCM)
Nun finde ich in deinem Programm aber nicht die zuweisung auf diese Kennzeichnung oder habe ich etwas übersehen?
Lese ich den P-Code richtig das ein vorgesetztes # ein Kommentar ist ?
Ich möchte mit zwei sensoren die Vor und Rücklauf Temperatur der Heizun an den Rohrleitungen bestimmen und dann in einer Datei ( stick ) speichern um diese als Grafik später auf dem Rechner z.B. über excel auzuwerten
Hallo Dieter,
deine Anmerkung zur GPIO Bezeichnung ist durchaus richtig. Ich selbst verwende diese Schreibweise auch, siehe hierzu zum Beispiel meinen Beitrag Ansteuerung von 3 LEDs am Raspberry Pi mit Python.
Zur Auslesung der Temperatur-Sensoren benötigst du allerdings die 1-Wire Schnittstelle, welche nicht über die GPIO’s ausgelesen wird. Auch wenn sich diese Schnittstelle auf einem GPIO-Pin befindet. Daher findest du auch diese Kennzeichnung nicht in diesem Programm.
Das vorgesetzte # liest du richtig, es handelt sich um einen Kommentar.
Um die beiden Sensoren auszulesen, kannst du dir ja mal meinen Beitrag “Mehrere DS1820 Sensoren am Raspberry Pi mit Python einlesen” ansehen. Die von dir ausgelesenen Dateien kannst du in einer entsprechend formatierten Textdatei auf deinem Stick abspeichern und mit Excel zur Auswertung aufrufen.
Viele Grüße
Wolfgang
Hallo Vincent,
das Programm gibt es nicht als Datei. Du musst dir die Datei selbst anlegen und den angebotenen Quellcode kopieren.
Wie du die Datei anlegst kommt darauf an, wie du mit dem Raspberry Pi arbeitest. Zum Beispiel kannst Du über das Terminal und den Befehl “sudo idle” die Python-Oberfläche öffnen. Dann legst du eine neue Datei an und kopierts den Quellcode hinein. Danach speicherst du die Datei und führst sie aus.
Viele Grüße
Wolfgang
Hallo,
ich bin ein absoluter Python-Anfänger, dadurch war ich echt glücklich das deine Anleitung so detailliert ist.
Die Installation und das Abschreiben vom Pythonprogramm ging auch gut. Wenn ich jetzt allerdings versuche das Programm zu starten,
soll man es ja erst speichern und dann kommt folgende Meldung:
I/O Warning
Non-ASCII found, yet no encoding declared. Add in a line like “# -*- coding: utf-8 -*.” to your file
Choose OK to save this file as utf-8
Edit your generall options to silence this warning
Wenn ich dann Ok drücke kommt:
I/O Error
[Errno 2] No such file or directory:
‘/var/www/messprogramm.py’
Kann mir vielleicht jemand helfen?
Danke im vorraus
Hallo Lea,
das Programm kannst du in jedem Verzeichnis abspeichern. Die Fehlermeldung bedeutet nur, der gewählte Pfad /var/www/ ist nicht vorhanden. Daher öffne deinen Editor nicht mit /var/www/messprogramm.py sondern nur mit z.B. messprogramm.py. Im Normalfall befindet sich die Datei dann im Verzeichnis /home/pi/.
Viele Grüße
Wolfgang
Servus Wolfgang!
Ich habe folgendes Problem, und zwar wenn ich cat /sys/bus/w1/devices/ meine Bezeichnung /w1_slave eingebe kommt folgende Meldung:
cat: meine Bezeichnung: Datei oder Verzeichnis nicht gefunden.
Mir ist allerdings auch aufgefallen, dass ich eine sehr komische Bezeichnung für meinen Sensor habe: 00-400000000000 00-800000000000 00-c00000000000
Ich hoffe du kannst mir weiterhelfen 🙂
Liebe Grüße
Felix
Hallo Felix,
die Sensoren müssen beim Booten des Systems angeschlossen sein. Die angegebenen Bezeichnungen lassen darauf schließen, dass dein Sensor nicht im System eingebunden wurde. Ein Neustart dürfte in solchen Fällen helfen.
Viele Grüße
Wolfgang
Servus Wolfgang,
bei der Suche nach einer Lösung um die Vor- und Rücklauftemperaturen unserer Heizung auszulesen, bin ich über Deine Seite “gestolpert” 🙂
Vielleicht kannst Du mir einen Tipp geben.
Das Script läuft soweit ohne Fehler durch – nachdem ich die Sensor-ID ersetzt und die Hinweis von Matthias mit den Prix befehlen in Klammern gesetzt habe. Allerdings bekomme ich keine Werte ausgegeben. Hast Du eine Idee, woran es liegen kann?
Gruß
Jörn
Hallo Jörn,
hast Du Dir zum Test den Messwert vor dem return am Ende der Funktion aktuelleTemperatur() mit einem print ausgeben lassen? Dies wäre mein erster Schritt um der Sache etwas näher zu kommen, wenn auch hier kein Wert ausgegeben wird, über das Terminal mal mit “cat /sys/bus/w1/devices/DEINE SENOSORBEZEICHUNG/w1_slave” den Wert auslesen, vielleicht liegt ja dort das Problem.
Viele Grüße
Wolfgang
Moin Wolfgang,
vielen Dank fuer Deine schnelle Antwort!
Ich weiss nicht, ob ich hier den ganzen Code posten kann. Ich hab nun zwischen der Zeile rueckgabewert = ‘%6.2f’ % temperature und return(rueckgabewert) ein print (aktuelleTemperatur) eingebaut.
Als Ergebnis bekomme ich nun ausgegeben!?
Frage ich den Sensor mit cat /sys/bus/w1/devices/28-0316556d5fff/w1_slave ab, erhalte ich die Temperatur.
Hallo Jörn,
das print soll den Wert von “rueckgabewert” ausgeben, daher musst Du den Befehl entsprechend angeben, also print rueckgabewert bzw. print (rueckgabewert).
Kaum macht man es richtig 😉
Die Temperatur wird nun ausgegeben.
Aktuelle Temperatur :
17.94
Also liegt das Problem wohl im unteren Teil des Codes.
Sehr schön 😉
Wie lautet den Dein print Befehl im unteren Bereich?
print “Aktuelle Temperatur : “, messdaten, “°C”, “in der “, schleifenZaehler, “. Messabfrage”
bzw.
print (“Aktuelle Temperatur : “), messdaten, (“°C”), (“in der “), schleifenZaehler, (“. Messabfrage”)
Hallo, ich bin Anfänger was Sachen Programmierung angeht. Der Temp Sensor ist angeschlossen und es geht auch soweit das ich ihn mir anzeigen lassen kann beim Befehl
cat /sys/bus/w1/devices/ meine id eingetragen /w1_slave
Wo es bei mir aufhört ist bei dem Pyton Programm . Habe mit sudo nano test.py aufgerufen und das Programm dort reinkopiert. Die Temp id natürlich abgeändert. und gespeichert. aber egal was ich versuche ich bekomms nicht zum laufen.
Wer könnte mir da helfen?
Vielen lieben dank schon mal im vorraus
Gruß Matthias
Hallo Matthias,
da es sich um ein Python-Programm handelt, kannst du das Programm direkt mit der IDLE schreiben und ausführen. Rufe hierzu dein Programm mit sudo idle test.py aus dem Terminal auf und führe es über den Menüpunkt “Run” oder mit der Funktionstaste F5 aus.
Viele Grüße
Wolfgang
Vielen lieben dank für die schnelle Antwort. Finde ich echt Klasse.
Leider kommt diese Fehlermeldung dabei raus:
Traceback (most recent call last):
File “/usr/bin/idle”, line 5, in
main()
File “/usr/lib/python2.7/idlelib/PyShell.py”, line 1545, in main
root = Tk(className=”Idle”)
File “/usr/lib/python2.7/lib-tk/Tkinter.py”, line 1813, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, want objects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
Bor , keine Ahnung was der von mir will, Grübel.
Herzlichen Dank nochmal für deine Hilfe , hoffe du kannst mir hier auch weiterhelfen ?
Gruß Matthias
Gerne doch…
Wenn ich die Meldung richtig deute, verwendest du den Raspberry Pi nicht im Desktop-Modus. Die IDLE benötigt meines Wissens allerdings diese. Solltest Du ohne Desktop arbeiten wollen/müssen, dann musst du dich in dieser Richtung beschäftigen oder Python zum Beispiel über den Webserver aufrufen.
Viele Grüße
Wolfgang
Wie heißt es so schön, viele Wege führen zum Ziel … 😉
Auf alle Fälle freut es mich, dass du es zum Laufen gebracht hast. 🙂
Viele Grüße und viel Spaß mit deinem RasPi
Wolfgang
So nach langer suche Problem gelöst. Als 1. Aufruf mit Python 2.7.9 dann die print Befehle in Klammern setzten.
print(“Temperaturabfrage für “), schleifenAnzahl,
print(” Messungen alle “), schleifenPause ,(” Sekunden gestartet”)
Jetzt gehts.
Danke für die Hilfe 🙂
So jetzt bin ich meinem Prob doch schon viel näher gekommen , dank dir 🙂
Hast recht muss den Befehl über Desktop aufrufen ABER dann kam trotzdem eine Fehlermeldung und das Programm läuft jetzt erst wo ich die Zeile:
print “Temperaturabfrage für “, schleifenAnzahl,
” Messungen alle “, schleifenPause ,” Sekunden gestartet”
rausgelöscht habe.
Jetzt bringt er mir alle sec die Aktuelle Temp in Schleife. Komisch oder ?
Hallo,
Ich verwende genau das Python Script was auf der Seite angegeben ist,
aber leider führt der Raspi das Script nicht vollständig aus, und gibt die Meldung aus :
Das die Zeile 33 nicht definiert ist .
woran könnte das liegen ?
Gruß Stephan
Hallo Stephan,
in der Zeile 33 mit “messdaten = aktuelleTemperatur()” wird der Rückgabewert der aufgerufenen Funktion aktuelleTemperatur() bestimmt. Stimmt den der Funktionsaufruf und in der Funktion der Name der Datei?
Viele Grüße
Wolfgang
Is there a way to wire the thermometer to a USB and then connect to the Pi via USB (instead of going through the board and pins)?
Hello Nick,
a 1 wire to USB possibility is not known to me. Perhaps such a solution would be realized via an Arduino or similar.
Best wishes
Wolfgang
Leider klappt es bei mir nicht, wenn ich den Code so übernehme. Ich bekomme folgenden Fehler:
file = open(“/sys/bus/w1/devices/28-000005d2e508/w1_slave”)
IOError: [Errno 2] No such file or directory: ‘/sys/bus/w1/devices/28-000005d2e508/w1_slave’
Ich arbeite über Eclipse und einer SSH Verbindung zum Pi. Könnte es daran liegen? Hast Du vielleicht einen Lösungsansatz für mich?
Vielen Dank!
Hallo Tom,
an Eclipse liegt es nicht. Du musst das verwendeten Verzeichnis “28-000005d2e508” mit dem Sensor-Kennung bestimmten Verzeichnis auf Deinem Raspberry Pi ersetzen. Das Verzeichnis findest Du über die Terminaleingabe: cd /sys/bus/w1/devices
Viele Grüße
Hat alles geklappt.
Schön wäre eine detailiertere Aufschlüsselung der einzelnen Anweisungen. z.B. die Definition der split-Anweisung.
Aber dafür gibt es sicher was zum Nachlesen…
Klasse Arbeit. Danke!
Hallo Viktor,
vielen Dank für Deinen Kommentar.
Viele Grüße
Wolfgang
Kleiner Hinweis, alle Kommentare werden moderiert.
Dies bedeutet, der Kommentar wird vor der Veröffentlichung durchgelesen und von mir geprüft. Auch behalte ich mir vor, jeden Kommentar zu löschen, der nicht direkt auf das Thema abzielt oder nur den Zweck hat, Leser oder Autoren herabzuwürdigen.
Neuste Beiträge
Kleinen Spickzettel für Raspbian OS Befehle
Entdecke die Welt von Webnist.de
Erfahre mehr über die Hintergründe meines Blogs und wie ich dich bei deinen digitalen Projekten unterstützen kann.Kategorien
KATEGORIEN
Aktuelles Video auf YouTube
Beschreibung der Verwendung eines TTP223B Touch Sensors am GPIO Port des Raspberry Pi mit Python.
Die aktuell 6 derzeit meistbesuchten Beiträge
Beiträge mit den meisten Kommentaren
Funktional Immer aktiv
Vorlieben
Statistiken
Marketing