[Tutorial] 1Wire Temperaturmessung mit Datenerfassung und Visualisierung

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo zusammen,

    als Grundlage zu diesem Tutorial empfehle ich diesen Artikel.

    Aufgabenstellung:

    • Temperatursensor DS18B20 an den Raspberry anschließen
    • Die Daten via GNUPLOT visualisieren
    • Werte per Python Script erfassen und in eine Datei schreiben


    1) Schaltung aufbauen

    Der Temperatursensor wird wie im o.g. Artikel an den Raspberry angeschlossen
    Ihr benötigt dazu einen DS18B20 Sensor sowie einen Wiederstand 4K7 Ohm und
    am besten ein Steckboard (Breadboard), sowie ein paar Kabelbrücken, die aber
    schnell selbst hergestellt sind.
    In der angehängten Grafik könnt Ihr den genauen Schaltplan ersehen.


    2) Sensor ansprechen und Daten auslesen

    Wenn Ihr den Sensor erfolgreich an euren Raspberry Pi angeschlossen habt,
    müsst Ihr den Sensor "nur" noch dem RasPi bekannt machen.

    Dazu gebt Ihr in der Konsole folgende Befehle ein:

    Code
    modprobe w1-gpio
    modprobe w1-therm


    Die beiden Befehle müssen nach einem Neustart immer wieder neu eingegeben werden.
    Ihr könnt aber natürlich auch ein Bash Script in "/etc/init.d" erstellen.

    Eurer Sensor ist dem RasPi nun bekannt und und wurde als "Device" im Verzeichnis "/sys/bus/w1/" erstellt.
    Im Ordner "/sys/bus/w1/devices" findet Ihr nun einen Ordner der ungefähr so "28-00000483f711" heisst.
    (Wenn Ihr mehrere Sensoren anschließt, habt Ihr auch mehrere entsprechende Unterverzeichnisse)
    In diesem Ordner befindet sich nun die Datei "w1_slave" mit den aktuellen Temperaturwerten des Sensors.
    Öffnet die Datei mit einem Editor: "sudo nano w1_slave"
    Der Inhalt dieser Datei müsste ungefähr so aussehen:

    Code
    18 01 4b 46 7f ff 08 10 b0 : crc=b0 YES
    18 01 4b 46 7f ff 08 10 b0 t=17500

    Der erste Bereich ist der Binäre Code des Sensors.
    Der Wert "crc=b0 YES" in der ersten Zeile hinter dem Binär-Code sagt Euch, das der Sensor erfolgreich erkannt worden ist.
    In der zweiten Zeile könnt Ihr nun die Temperatur auslesen: "t=17500"
    Bei diesem Sensor müsst Ihr diesen Wert durch 1000 teilen um auf die korrekte Temperatur zu kommen.
    Also "17500 / 1000 = 17.500 Grad Celsius"
    Solltet Ihr andere Sensoren nutzen, müsst Ihr die Umnrechnung des Wertes aus der tech. Dokumentation des Sensors entnehmen.


    3) GNUPLOT installieren
    Ich habe mich für die grafische Aufbereitung der Daten für GNUPLOT entschieden.
    Es gibt im Netz zahlreiche Informationen zu GNUPLOT.
    Am besten Google nutzen, oder aber direkt im Projekt nachschauen.
    Um die Übersicht zu wahren, habe ich GNUPLOT lediglich rudimentär eingesetzt.

    Ihr installiert GNUPLOT einfach über:

    Code
    sudo apt-get update
    sudo apt-get install gnuplot

    Das später besprochene Python Script (Punkt 4) erzeugt eine Datei namens "temp-daten.txt"
    Diese Daten werden mittels GNUPLOT Script ausgelesen und in eine jpg-Grafik umgewandelt.
    Nachfolgend der Inhalt meiner Datei "temp-daten.txt", damit Ihr schon mal etwas "Testen" könnt.



    Damit Ihr nicht jedes mal alle Befehle in GNUPLOT neu schreiben müsst, geht Ihr am besten folgendermaßen vor:
    Ihr erstellt eine Datei mit "nano temp.plt"
    In diese Datei schreibt Ihr bitte folgenden Code:

    Code
    set title 'Temperaturverlauf'
    set xlabel 'Messwert'
    set ylabel 'Grad Celsius'
    set yrange [-5:40]
    plot 'temp-daten.txt' using 3 with line
    set output "temperatur.jpg"
    set terminal jpeg
    replot

    Speichert die Datei ab und startet GNUPLOT mit dem Befehl:

    Code
    gnuplot temp.plt

    Die Befehle in der Datei "temp.plt" werden nun von GNUPLOT verarbeitet und
    im aktuellen Verzeichnis wird eine Grafik mit dem Namen "temperatur.jpg" erstellt.

    Kurze Beschreibung des Codes:
    1. Zeile: Der Titel der Grafik wird erstellt
    2. Zeile: Die x-Achse wird Beschriftet
    3. Zeile: Die y-Achse wird beschriftet
    4. Zeile: Die y-Achse erhält einen Wertebereich von -5 bis +40 Grad
    5. Zeile: Die Datei "temp-daten.txt" wird ausgelesen und die Werte der 3. Spalte verarbeitet
    6. Zeile: Die Ausgabedatei "temperatur.jpg" wird definiert
    7. Zeile: Das Ausgabeformat "jpeg" wird definiert.
    8. Zeile: Ausgabe der Daten in die Datei "Temperatur.jpg"

    Den "Plot" könnt Ihr im Anhang ersehen.
    Die so erstellte Grafik könnt Ihr z.B. jederzeit in einer Webseite einbinden.
    Ihr könnt das GNUPLOT Script natürlich individuell anpassen.
    Dazu ist der o.g. Link als Einstieg zu empfehlen.


    4) Das Python Script

    So, nun sind wir schon fast fertig.
    Jetzt müssen wir lediglich die Daten per Python Script abfragen, aufbereiten und in die Datei "temp-daten.txt" schreiben.
    Wer Lust und Zeit hat, kann anstatt der Datei, seine Werte natürlich in eine Datenbank abspeichern.
    Dazu ist am Script nicht viel zu ändern.

    Am besten packt Ihr alle Scripte in ein Verzeichnis,
    dann werden die Ergebnisse ebenfalls alle zentral dort abgespeichert.



    Das Python Script ist durch die Bemerkungen einigermaßen Selbsterklärend.
    In Zeile 30 dient die for-Schleife dazu, evtl. mehrere Sensoren auszulesen.
    Die vorletzte Zeile dient dazu GNUPLOT aufzurufen und das jpg-Bild zu erstellen.


    Feddisch!

    Grüße
    Blaster

  • [Tutorial] 1Wire Temperaturmessung mit Datenerfassung und Visualisierung? Schau mal ob du hier fündig wirst!

  • Zitat von Blaster pid=5810 dateline=1360841239


    Dazu gebt Ihr in der Konsole folgende Befehle ein:

    Code
    modprobe w1-gpio
    modprobe w1-therm


    Die beiden Befehle müssen nach einem Neustart immer wieder neu eingegeben werden.
    Ihr könnt aber natürlich auch ein Bash Script in "/etc/init.d" erstellen.


    Was spricht dagegen, w1-gpio und w1-therm in die /etc/modules einzutragen, wie man es mit anderen Modulen machen würde?

  • Zitat von orb pid=5818 dateline=1360842290


    Was spricht dagegen, w1-gpio und w1-therm in die /etc/modules einzutragen, wie man es mit anderen Modulen machen würde?

    Ich denke nichts.
    Habe es nicht ausprobiert, deshalb auch nicht beschrieben.

    Grüße
    Blaster

    Einmal editiert, zuletzt von Blaster (14. Februar 2013 um 13:34)

  • Hallo zusammen :)

    heute kam endlich alles an was ich brauche und hab es direkt ausprobiert aber leider kommt diese Fehlermeldung wenn ich "modprobe w1-gpio" eingebe:

    Code
    pi@raspberrypi ~ $ modprobe w1-gpio
    libkmod: ERROR ../libkmod/libkmod.c:554 kmod_search_moddep: could not open moddep file '/lib/modules/3.2.27+/modules.dep.bin'

    Kann mir einer helfen?

    Ich habe Raspian vom 16.12.12 drauf.

    danke und gruß
    prace07

  • Habs nach Anleitung gemacht klappt super :)

    Danke danke

    ps. wie schnell aktualisiert der Sensor?? bz was is ein guter abfrage Wert?? 1 Minute ? 5 Minuten ? 10 ?

    ps. wenn ich die 2 in /etc/module eingetragen habe werden die auch bei systemstart geladen?


    LG

    edit:
    habs mal auf 5 minuten gesetzt und folgendes ans python skript angehängt damit er mir die Datei auch aktuelll ins webserver verzeichnis schiebt

    Code
    # Python script beenden und GNUPLOT Grafik erstellen
    os.system("gnuplot /root/TempSensor/temp.plt")
    
    
    # sleep 5 Sekunden und kopiert die Datei dann zum Webserver
    import time
    time.sleep( 5 )
    os.system("cp /root/TempSensor/temperatur.jpg /var/www/homepage/")
    sys.exit(0)

    ps. wenn ich import time oben mache gehts net, wenn ichs weglass gehts auch net, nur wenn ichs vorn befehl schreib gehts.

    PS. mein crontab mit "crontab -e" geschrieben
    */2 * * * * python /root/TempSensor/abfrage.py

    geht nicht, wieso ?

    Einmal editiert, zuletzt von StillResonance1614 (21. Februar 2013 um 18:42)

  • Hallo Steakschen,

    Zitat

    ps. wie schnell aktualisiert der Sensor?? bz was is ein guter abfrage Wert?? 1 Minute ? 5 Minuten ? 10 ?

    Da es sich bei 1-Wire um einen Bus handelt, an welchem mehrere Teilnehmer hängen können, kommt dies ganz darauf an wieviele Teilnehmer du hast und wie oft die einzelnen Teilnehmer abgefragt werden sollen. Da Temperaturänderungen meistens eher langsam stattfinden, denke ich du bist mit 5 Minuten gut dabei.

    Zitat

    ps. wenn ich die 2 in /etc/module eingetragen habe werden die auch bei systemstart geladen?

    Ja. Einfach die Kernelmodule in die /etc/modules eintragen.

    Gruß Georg

    Nachtrag:

    Zitat

    PS. mein crontab mit "crontab -e" geschrieben
    */2 * * * * python /root/TempSensor/abfrage.py

    geht nicht, wieso ?

    Versuchs mal damit ...

    Code
    */2 * * * * /usr/bin/python /root/TempSensor/abfrage.py

    Einmal editiert, zuletzt von boandlkramer (21. Februar 2013 um 18:50)

  • Hollo,

    ich habe 4 Sensoren dran, und frage Sie über den cronjob alle 5 Minuten ab.
    Ich mache bis jetzt alles mit php.
    Dei direkten Abfragen kann man das Script aber per hand ohne Probleme alle 1 - 2 Sekunden starten.

    cu

  • Dank euch klappt jetzt alles :)

    habe jetzt noch ein python script was die temperatur alle 5min abfragt und im terminal ausgibt.

    Wenn ich aber die bild datei öffne aktuallisiert die sich dann trz noch obwohl es geöffnet ist?
    Da ich ein 4.3zoll display hier habe würde ich die bild datei gern geöffnet lassen und neben mein Terrarium stellen.

    gruß
    Nico

  • hab meine temp.plt so angepasst

    damit zeigt er mir so ca. die letzten 10 stunden an

    hier mein skript ende vom abfrage

    Code
    # Python script beenden und GNUPLOT Grafik erstellen
    os.system("gnuplot /root/TempSensor/temp.plt")
    
    
    # sleep 5 Sekunden und kopiert die Datei dann zum Webserver
    import time
    time.sleep( 5 )
    os.system("cp /root/TempSensor/temperatur.jpg /var/www/homepage/")
    os.system("sed -i 1D /root/TempSensor/temp-daten.txt")
    sys.exit(0)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!