Inhaltsverzeichnis
1wire an GPIO4
Aufbau der Schaltung
kurze Leitungswege 3,3V
Software
Vorbereitung
Nachdem die Hardware ordnungsgemäß mit dem Banana Pi verbunden ist kann das Auslesen der Temperatur beginnen. Dazu installieren wir zunächst ein Softwarepaket, mit welchem wir den 1-Wire Bus zugänglich machen.
sudo apt-get install git
sudo apt-get install libusb-1.0 libusb-dev git clone https://github.com/linux-sunxi/sunxi-tools cd sunxi-tools make
Im nächsten Schritt wird die binäre Konfigurationsdatei script.bin bearbeiten. Mit dem gerade heruntergeladenem Tool laden wir aus der binären Datei eine fex-Datei.
su - mount -o,rw /dev/mmcblk0p1 /mnt cd /root/sunxi-tools ./bin2fex /mnt/script.bin script.fex
Die fex-Datei bearbeiten wir im Anschluss mit dem Editor nano.
sudo nano script.fex
Am Ende der Datei fügen wir folgenden Inhalt ein.
[w1_para] gpio = 4
Anschließend können wir die Datei schließen und wandeln die bearbeitete fex-Datei zurück in die binäre Datei script.bin.
./fex2bin script.fex /mnt/script.bin umount /mnt
Nun am Ende von /etc/modules folgendes eintragen:
# modules for the gpio and the DS18B20 sensor w1-gpio w1-therm
Damit die Einstellungen übernommen werden ist ein Neustart notwendig.
sudo reboot
Auslesen des DS1820 1-wire
Zum Auslesen der Temperatur eines Sensors am 1-Wire Bus müssen wir den entsprechenden Sensor selektieren. Wie in der Schaltung oben gezeigt können mehrere Sensoren angeschlossen sein. Zur Identifikation besitzt jeder Temperatursensor einen vom Hersteller eindeutig vergebenen Code. Jeder angeschlossene Sensor bekommt im Verzeichnis /sys/bus/w1/devices/ sein eigenes Unterverzeichnis. Innerhalb des Verzeichnisses eines Sensor findet man immer die Datei w1_slave. Mit dem cat Befehl können wir daraus (via Terminal) die Temperatur auslesen.
Zum Ermitteln der Identifikationsnummer und des entsprechenden Verzeichnisses wechseln wir zunächst in das Verzeichnis /sys/bus/w1/devices/ und lassen uns dort alle drin befindlichen Ordner und Dateien anzeigen.
cd /sys/bus/w1/devices/ ls
In meinem Fall habe ich einen Sensor angeschlossen mit der Identifikationsnummer 10-000802b5ab54. Anschließend wechseln wir in das gleichnamige Verzeichnis. Dort sehen wir das die genannte Datei w1_slave vorhanden ist.
cd /sys/bus/w1/devices/10-000802b5ab54 ls
Mit dem cat Befehl lesen wir anschließend die Datei und damit die momentane Temperatur aus. Es ergibt sich insgesamt folgender Verlauf und die im Bild dargestellte Ausgabe.
cat /sys/bus/w1/devices/10-000802b5ab54/w1_slave
Am Ende der Ausgabe finden wir die Angabe t=18687. Teilen wir diese Zahl durch 1000 ergibt sich eine aktuelle Temperatur von 18,687 °C.
vzlogger.conf
Im Abschnitt „meters“ wird folgende Konfiguration vorgenommen:
"meters": [ { "enabled": true, "allowskip": false, "interval": 300, // alle 300sec (5min) "aggtime": -1, "aggfixedinterval": false, "channels": [ { "api": "volkszaehler", "uuid": "e6be7550-1393-11e7-a417-5ff918fcd6b3", // UUID im Frontend "identifier": "10-000802b5ab54", // ID des DS1820 "middleware": "http://localhost/middleware.php", "aggmode": "none", "duplicates": 0 } ], "protocol": "w1therm" } ]
Anschließend den vzlogger neustarten
service vzlogger restart