Skip to content
Temperaturlogger

Hummingboard GPIO Temperatursensoren

Heute haben wir mal wieder ein neues Praxisbeispiel/ Anleitung für Euch. Nachdem wir in einigen Anleitungen die Basics und erste Anwendungen wie Office-PC beschrieben haben, geht es dem Hummingboard jetzt an die Wäsche 😉

Interresse?! Dann READ MORE

Bevor wir mit dem eigentlichen Tutorial beginnen, hier erstmal eine Liste an Komponenten die Ihr benötigt um das Hummingboard als Temperatur-Logger zu verwenden:

  • Euer Hummingboard
  • DS18S20 Temperatursensor(en)
  • 4,7 kOhm Widerstand
  • Steckboard (Zum herumprobieren, außer Ihr möchtet alles direkt verlöten)
  • Jumperkabel (Männlein und Weiblein) (Gibt es im Internet in großen Packungen. Ihr benötigt einerseits Kabel mit Weiblein um diese auf das Hummingboard zu stecken und ein määnliches Ende um dieses auf das Steckboard zu stecken. Zudem benötigt Ihr weitere männliche Kabelenden um den/die Sensoren mit dem Steckboard zu verbinden, das andere Ende könnt Ihr abisolieren und mit dem Sensor verlöten)

Hier seht Ihr wie der Kabelstrang eines Sensores vor dem verlöten (obere 3 Kabel) und nach dem anlöten der männlichen Jumperstecker aussehen sollte.

DSC_0177

Wenn Ihr diese Komponenten alle habt kann es auch schon los gehen 🙂

Basics

1. Schritt: Hardwareinformationen an den Kernel weiter reichen

Auch in diesem Tutorial wird das bereits bekannte Debian 8 Image verwendet, welches Ihr aus den anderen Anleitungen ggf. schon kennt. Sollte jedoch auch problemlos mit anderen Distributionen funktionieren 😉

Ladet Euch zunächst die für die GPIO-Nutzung angepassten *.dtb Files HIER herunter (Diese Dateien geben die erforderlichen Hardwareinformationen an den Kernel weiter). Anschließend entpackt Ihr die Daten in diesem Archiv und ersetzt die alten gleichnamigen Dateien in boot/dtb durch die zwei neuen Dateien und startet anschließend euer System neu.

2. Schritt: Temperatursensor(en) mit dem Hummingboard verbinden

DS18S20

Obige Abbildung stellt exemplarisch den Anschlussplan für zwei DS18S20 Sensoren an das Hummingboard dar. (Farben können u.U. von denen eurer Sensoren abweichen, bitte kontrollieren!)

Die PIN-Belegung des Board ist HIER sehr gut dargestellt.

1. GND-Kabel des Sensors mit PIN 9 (GND) auf dem Board verbinden. Solltet Ihr mehrere Sensoren verbinden, könnt Ihr das Steckboard nutzen um diese dort parallel zu verbinden und dann mit dem Hummingboard zu verbinden (gilt auch für die weiteren Schritte).

2. Nun legt Ihr alle eure DATA-Kabel der Sensoren auch wieder parallel auf das Steckboard auf und verbindet diese mit dem PIN 7 (GPIO1) eures Hummingboards.

3. Selbes macht Ihr nun für die 3.3V Leitungen der Sensoren welche Ihr mit PIN 1 (3.3V) eures Hummingboards verbindet.

4. Nun steckt Ihr den Widerstand so auf das Steckboard, dass er eine Verbindung zwischen der DATA-Leitung und der 3.3V Leitung herstellt, wie es in der Abbildung dargestellt ist.

 

Nächste Abbildung zeigt die über das Experimentierboard mit dem Hummingboard verbundenen Kabel.

(Orange = Spannung 3.3 V)

(Gelb/ Grün = DATA)

(Weiss = GND)

DSC_0181

 

Und hier nochmal das verdrahtete Board:

DSC_0178

 

 

Nun sollte euer Board in wenigen Sekunden erkannt haben, dass Ihr Temperatursensoren angeschlossen habt. Eine Überprüfung erfolgt folgendermaßen:

Wechselt mit folgendem Befehl in das Verzeichnis /sys/bus/w1/devices/:

cd /sys/bus/w1/devices/

Lasst euch den Inhalt anzeigen:

  ls -h

Als Ausgabe solltet Ihr zum einen w1_bus_master1 erhalten und zusätzlich weitere Einträge wie 28-0115536864ff für jeden Eurer Sensoren.

Um diese Sensoren nun mal testweise abzufragen, könnt Ihr diesen Befehl nutzen:

1.Sensor:

cat /sys/bus/w1/devices/28-0115536864ff/w1_slave 

28-0115536864ff durch Eure ID ersetzen!

Ausgabe:

70 01 80 80 1f ff 80 80 7a : crc=7a YES
70 01 80 80 1f ff 80 80 7a t=23000

t=23000 steht hierbei für 23,000 °C (Angezeigten Wert durch 1000 teilen)

Mehrere Sensoren:

cat /sys/bus/w1/devices/28-0115536864ff/w1_slave /sys/bus/w1/devices/28-0215535cddff/w1_slave

28-0115536864ff und 28-0215535cddff durch Eure IDs ersetzen

Ausgabe:

70 01 80 80 1f ff 80 80 7a : crc=7a YES
70 01 80 80 1f ff 80 80 7a t=23000
58 01 80 80 1f ff 80 80 f8 : crc=f8 YES
58 01 80 80 1f ff 80 80 f8 t=21500

In diesem Fall zeigt der eine Sensor eine Temperatur von 23°C und der andere eine von 21,5°C an.

Webseite erstellen

Da diese Art die Werte auszugeben auf Dauer jedoch nicht besonders praktikabel ist, erstellen wir uns nun Schritt für Schritt eine kleine Seite für den Browser, welche in regelmäßigen Abständen den aktuellen Wert und den vorhergehenden Verlauf anzeigt.

1. Schritt: Installieren der erforderlichen Pakete

Um das von uns gewünschte Ziel zu erreichen, nutzen wir zum einen eine RRD-Datenbank, welche die Messwerte aufnimmt und zusätzlich PHP um das ganze dann über die Browseranzeige bequem zu visualisieren.

Hierzu folgenden Befehl ausführen:

sudo apt-get install php5-cli rrdtool lighttpd vim php5-cgi

2. Schritt: Anlegen des Ordners für unsere Datenbanken

Wir erstellen mit folgenden Befehl den Ordner rrd im Verzeichnis root:

mkdir /root/rrd

3. Schritt: Erzeugen der Datenbank(en)

Im Folgenden seht Ihr das Skript für das Anlegen von zwei Datenbanken für die zwei Sensoren 28-0115536864ff und 28-0215535cddff, welche alle 60 Sekunden aktualisiert werden. Diesen Code könnt Ihr nach Belieben erweitern oder reduzieren, sollte dies erforderlich sein.
Nicht vergessen, die Sensorbezeichnungen an Eure anzupassen!

rrdtool \
create /root/rrd/28-0115536864ff.rrd --step 60 \
DS:28-0115536864ff:GAUGE:120:U:U \
RRA:AVERAGE:0.5:1:2160 \
RRA:AVERAGE:0.5:5:2016 \
RRA:AVERAGE:0.5:15:2880 \
RRA:AVERAGE:0.5:60:8760 \
RRA:MIN:0.5:1:2160 \
RRA:MIN:0.5:5:2016 \
RRA:MIN:0.5:15:2880 \
RRA:MIN:0.5:60:8760 \
RRA:MAX:0.5:1:2160 \
RRA:MAX:0.5:5:2016 \
RRA:MAX:0.5:15:2880 \
RRA:MAX:0.5:60:8760

rrdtool \
create /root/rrd/28-0215535cddff.rrd --step 60 \
DS:28-0215535cddff:GAUGE:120:U:U \
RRA:AVERAGE:0.5:1:2160 \
RRA:AVERAGE:0.5:5:2016 \
RRA:AVERAGE:0.5:15:2880 \
RRA:AVERAGE:0.5:60:8760 \
RRA:MIN:0.5:1:2160 \
RRA:MIN:0.5:5:2016 \
RRA:MIN:0.5:15:2880 \
RRA:MIN:0.5:60:8760 \
RRA:MAX:0.5:1:2160 \
RRA:MAX:0.5:5:2016 \
RRA:MAX:0.5:15:2880 \
RRA:MAX:0.5:60:8760 

4. Schritt: Erstellen des Verzeichnisses für unser Cron-Skript

mkdir /root/sh

5. Schritt: Skript anlegen

Wechselt in den erstellten Ordner mit:

cd /root/sh

Erstellt eine neue Datei (w1_to_rrd.php) und füllt sie mit folgendem Code, auch hier nicht vergessen die Sensor-IDs anzupassen!

#!/usr/bin/php
<?php
$teilen = '1000';

// 28-0115536864ff
$temp01 = exec('cat /sys/bus/w1/devices/28-0115536864ff/w1_slave |grep t=');
$temp01 = explode('t=',$temp01);
$temp01 = $temp01[1] / 1000;
$temp01 = round($temp01,2);
//print $temp01 . PHP_EOL;
exec("/usr/bin/rrdtool update /root/rrd/28-0115536864ff.rrd N:$temp01");

// 28-0215535cddff
$temp02 = exec('cat /sys/bus/w1/devices/28-0215535cddff/w1_slave |grep t=');
$temp02 = explode('t=',$temp02);
$temp02 = $temp02[1] / 1000;
$temp02 = round($temp02,2);
//print $temp02 . PHP_EOL;
exec("/usr/bin/rrdtool update /root/rrd/28-0215535cddff.rrd N:$temp02");
?>

Mit folgendem Befehl ändern wir noch die Eigenschaften der Datei, sodass diese ausführbar ist:

sudo chmod +x w1_to_rrd.php

Noch passiert aber nichts, ausser wir führen selbst diese Datei aus. Um uns diese Arbeit abzunehmen nutzen wir einen Cronjob.

Öffnet die Crontab-Dabei mit folgendem Befehl:

crontab -e 

Und fügt folgende Zeile hinzu:

* * * * * php5 /root/sh/w1_to_rrd.php > /dev/null 2>&1

6. Schritt: Anlegen unseres Verzeichnisses für das Webportal

Ordner erstellen:

mkdir /var/www/rrd

7. Schritt: Erstellen der Datei, welche aus den RRD-Datenbanken Bilder erstellt

Glücklicherweise besitzt das rrdtool eine Funktion zum Erstellen der gewünschten Diagramme, diese nutzen wir nun um

– Einzeldiagramme für jeden Sensor und
– ein Diagramm mit allen Daten zu erzeugen.

#!/bin/sh 

#28-0115536864ff
nice -n 19 /usr/bin/rrdtool graph /var/www/rrd/0115536864ff.png -a PNG -b 1024 --start -86400 -A \
-t "Temperaturverlauf Sensor 1" --vertical-label "Temperatur [°C]" -w 1024 -h 400 \
DEF:g1=/root/rrd/28-0115536864ff.rrd:28-0115536864ff:AVERAGE \
DEF:gmin=/root/rrd/28-0115536864ff.rrd:28-0115536864ff:MIN \
DEF:gmax=/root/rrd/28-0115536864ff.rrd:28-0115536864ff:MAX \
VDEF:g1a=g1,LAST \
VDEF:gmina=gmin,MINIMUM \
VDEF:gdurch=gmin,AVERAGE \
VDEF:gmaxa=gmax,MAXIMUM \
LINE1:g1#ff0000:"Sensor 1 (0115536864ff)\n" \
GPRINT:g1a:"Aktuell\: %10.2lf °C\n" \
GPRINT:gdurch:"Schnitt\: %10.2lf °C\n" \
GPRINT:gmina:"Min\: %10.2lf °C\n" \
GPRINT:gmaxa:"Max\: %10.2lf °C\n" > /dev/null

#28-0215535cddff
nice -n 19 /usr/bin/rrdtool graph /var/www/rrd/0215535cddff.png -a PNG -b 1024 --start -86400 -A \
-t "Temperaturverlauf Sensor 2" --vertical-label "Temperatur [°C]" -w 1024 -h 400 \
DEF:g1=/root/rrd/28-0215535cddff.rrd:28-0215535cddff:AVERAGE \
DEF:gmin=/root/rrd/28-0215535cddff.rrd:28-0215535cddff:MIN \
DEF:gmax=/root/rrd/28-0215535cddff.rrd:28-0215535cddff:MAX \
VDEF:g1a=g1,LAST \
VDEF:gmina=gmin,MINIMUM \
VDEF:gdurch=gmin,AVERAGE \
VDEF:gmaxa=gmax,MAXIMUM \
LINE1:g1#000080:"Sensor 2 (0215535cddff)\n" \
GPRINT:g1a:"Aktuell\: %10.2lf °C\n" \
GPRINT:gdurch:"Schnitt\: %10.2lf °C\n" \
GPRINT:gmina:"Min\: %10.2lf °C\n" \
GPRINT:gmaxa:"Max\: %10.2lf °C\n" > /dev/null

#Alle Sensoren in einem Diagramm

nice -n 19 /usr/bin/rrdtool graph /var/www/rrd/allsensors.png -a PNG -b 1024 --start -86400 -A \
-t "Übersicht alle Sensoren" --vertical-label "Temperatur [°C]" -w 1024 -h 400 \
--start -3d --end now \
DEF:sensor1=/root/rrd/28-0115536864ff.rrd:28-0115536864ff:AVERAGE \
DEF:sensor2=/root/rrd/28-0215535cddff.rrd:28-0215535cddff:AVERAGE \
LINE1:sensor1#ff0000:"Sensor 1(0115536864f)" \
LINE2:sensor2#000080:"Sensor 2 (0215535cddff)" > /dev/null

Auch hier ist es erforderlich sämtliche Sensor-IDs durch Eure zu ersetzen. Anschließend speichert Ihr diese Datei im Ordner /root/sh unter dem Namen create_img.sh ab und macht Sie mit folgendem Befehlt ausführbar:

sudo chmod +x /root/sh/create_img.sh

Nun tragen wir diese Datei noch in die crontab ein und lassen sie minütlich aktualisieren.

Crontab-Datei öffnen:

crontab -e

Folgende Zeile hinzufügen:

*/1 * * * * /root/sh/create_img.sh > /dev/null 2>&1

8. Schritt: Erstellen des Webportals:

Um die Daten nun im Browser anzeigen zu können, nutzen wir das folgende Skript:


Hummingboard Temperatur-Logger
<h1>Hummingboard Temperatur-Logger</h1>
<h2>Übersicht Temperaturverläufe</h2>
Für jeden eingerichteten Sensor wird hier der Temperaturverlauf dargestellt, zusätzlich ein Übersichtsdiagramm mit allen Temperaturkurven. Um weitere Sensoren anzeigen zu können, einfach cr\
ate_img.sh in /root/sh/ erweitern.


<?php
foreach (glob("*.png") as $file)
{
print 'DATEINAME: ' . $file . '
' . '<img src="' . $file . '" alt="" /> ' . '

';
};
?>

Diese Datei speichern wir nun in /var/www/rrd und dem Namen index.php ab.

9. Schritt: Letzte Einstellungen bis zum Ziel

————————————-
Optional:
So wie unsere lighttpd.conf momentan eingestellt ist müsstet Ihr folgendes eingeben um das Webportal zu erreichen:
IPVONEUREMHUMMINGBOARD/rrd/index.php

Solltet Ihr keine weiteren Webportale im Hauptverzeichnis nutzen, könnt Ihr Euch die Welt ein wenig einfacher machen, indem Ihr das root-Verzeichnis anpasst:
Datei lighttpd.conf in /etc/lighttpd/ öffnen und folgende Zeile

server.document-root = "/var/www"

ändern zu

server.document-root = "/var/www/rrd"

————————————-

Nun bringen wir dem Server noch PHP bei 😉

lighty-enable-mod fastcgi
lighty-enable-mod fastcgi-php
/etc/init.d/lighttpd force-reload

…FERTIG 🙂

Nun solltet Ihr euer Webportal innerhalb eures Netzwerkes

unter

IPVONEUREMHUMMINGBOARD/rrd/index.php (WENN OPTIONALEN SCHRITT ÜBERSPRUNGEN)

oder unter

IPVONEUREMHUMMINGBOARD/index.php

erreichen und solltet etwa dieses Bild sehen:

Auswahl_004

Viel Spaß mit eurem neuen Temperatur-Logging-System 🙂

Kommentar verfassen