One-Wire in OpenWrt

Wenn man nachdenkt, ist der Sensor eine der am häufig verbreiteten Einrichtungen in unserem Leben. Die Sensoren sind überall... Alle Aufgaben, welche von denen oder jenen Einrichtungen gestellt werden, enthalten in der Grundlage die Sensoranzeigen. Wenn ein Sensor seinen Zustand auf einen anderen geändert hat, bedeutet es, dass jenes Gerät das und das machen soll...)). Wie es für viele von Ihnen wahrscheinlich bekannt ist.

Es gibt eine Vielzahl von Sensortypen: Temperatur-, Feuchtigkeits-, Rauch-, Gas-, Flüssigkeitsstand-, Schlag-, Vibrations-, Bewegungssensor, Strom-, Spannungs-, Frequenz-, Leistungs-, Lichtsensor usw. Trotz dieser großen Vielfalt der Arten ist ihre Gesamtstruktur etwa gleich. Dies ist ein empfindlicher Sensor, welcher diverse Leistungsniveaus am Ausgang ausgibt. Also, unsere Aufgabe ist die Spannung messen zu lernen und dann können wir einen beliebigen Sensor zu bauen.

Deshalb schlage ich vor, die Spannung messen zu lernen, und gleichzeitig auch die Temperatur mittels eines Ein-Draht-Sensors DS2438.

Auf der Konfigurationsstufe von OpenWrt sind folgende Module auszuwählen:
Kernel modules:
USB Support:
<M> kmod-usb-serial
<M> kmod-usb-serial-cp210x
Utilities:
Filesystem:
<M> owfs
<M> owshell
<M> digitemp

Alle Aktivitäten mit einem Ein-Draht-Sensor in OpenWrt sind mit Hilfe von 2 Programmen möglich. Treten wir zuerst dem Programm digitemp näher.

Installieren wir die Pakete:

root@OpenWrt:/# opkg install kmod-usb-serial-cp210x
Installing kmod-usb-serial-cp210x (2.6.36.2-1) to root...
Downloading ftp://ftp:ftp@192.168.0.9/kmod-usb-serial-cp210x_2.6.36.2-1_brcm47xx.ipk.
Installing kmod-usb-serial (2.6.36.2-1) to root...
Downloading ftp://ftp:ftp@192.168.0.9/kmod-usb-serial_2.6.36.2-1_brcm47xx.ipk.
Configuring kmod-usb-serial.
Configuring kmod-usb-serial-cp210x.
root@OpenWrt:/# opkg install digitemp
Installing digitemp (3.6.0-3) to root...
Downloading ftp://ftp:ftp@192.168.0.9/digitemp_3.6.0-3_brcm47xx.ipk.
Configuring digitemp.

Die Netzstruktur eines one-wire Sensors besteht aus einem Adapter und den Sensoren selbst. Der Adapter konvertiert das USB Protokoll zu einem 1-wire Sensor. Und die Sensoren können der Reihe nach angeschlossen werden. Das Adapter-Schema finden Sie im Abschnitt «Herunterladen».

Schließen wir den Adapter an den USB-Port des Routers an und prüfen wir die Ausgabe dmesg:

root@OpenWrt:/# dmesg
usb 1-1.4: new full speed USB device using ohci_hcd and address 4
cp210x 1-1.4:1.0: cp210x converter detected
usb 1-1.4: reset full speed USB device using ohci_hcd and address 4
usb 1-1.4: cp210x converter now attached to ttyUSB0

Der Adapter wird vom System als ttyUSB0 definiert. Jetzt schließen wir einen Sensor an den Adapter an. Es ist ziemlich leicht das Programm digitemp zu verwenden. Zuerst initialisieren wir wie folgt:

root@OpenWrt:/# digitemp_DS9097 -i -s /dev/ttyUSB0
DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
GNU Public License v2.0 - http://www.digitemp.com
Turning off all DS2409 Couplers
.
Searching the 1-Wire LAN
265576BA000000DF : DS2438 Temperature, A/D Battery Monitor
ROM #0 : 265576BA000000DF
Wrote .digitemprc

Wie wir sehen können hat das digitemp bei dieser Operation mit der Suche nach einem Busgerät von 1-wire begonnen, in deren Ergebnis unser Sensor — 265576BA000000DF : DS2438 Temperature, A/D Battery Monitor gefunden wurde.

Weiter, um die Temperatur- und Spannungswerte von unserem Sensor ablesen zu können, ist Folgendes zu tätigen:

root@OpenWrt:/# digitemp_DS9097 -a -A -l /home/1wire_log
DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
GNU Public License v2.0 - http://www.digitemp.com

Machen wir die Datei mit dem Log auf und prüfen wir die Temperatur- und Spannungswerte am ADC-Eingang.

root@OpenWrt:/# cat /home/1wire_log
Jan 01 00:01:44 Sensor 0 VDD: 5.06 AD: 4.98 CAD: -1018 C: 24.59

Wie wir sehen können, ist der Temperaturwert 24.59C, und die Spannungswert 4.98V. Die Messgenauigkeit ist ziemlich hoch. Hier kann man die Beschreibung der Aktivitäten mit dem digitemp beenden, wobei darauf noch hinzuweisen ist, dass man die Liste der verfügbaren Optionen sehen kann, wenn man digitemp_DS9097 -h schreibt.

Installieren wir die Pakete für das Programm owfs:

root@OpenWrt:/# opkg install owshell owfs
Installing owshell (2.8p4-1) to root...
Downloading ftp://ftp:ftp@192.168.0.9/owshell_2.8p4-1_brcm47xx.ipk.
Installing libow (2.8p4-1) to root...
Downloading ftp://ftp:ftp@192.168.0.9/libow_2.8p4-1_brcm47xx.ipk.
Installing libusb (0.1.12-2) to root...
Downloading ftp://ftp:ftp@192.168.0.9/libusb_0.1.12-2_brcm47xx.ipk.
Installing libpthread (0.9.31-64) to root...
Downloading ftp://ftp:ftp@192.168.0.9/libpthread_0.9.31-64_brcm47xx.ipk.
Installing librt (0.9.31-64) to root...
Downloading ftp://ftp:ftp@192.168.0.9/librt_0.9.31-64_brcm47xx.ipk.
Installing owfs (2.8p4-1) to root...
Downloading ftp://ftp:ftp@192.168.0.9/owfs_2.8p4-1_brcm47xx.ipk.
Installing libfuse (2.8.5-1) to root...
Downloading ftp://ftp:ftp@192.168.0.9/libfuse_2.8.5-1_brcm47xx.ipk.
Installing kmod-fuse (2.6.36.2-1) to root...
Downloading ftp://ftp:ftp@192.168.0.9/kmod-fuse_2.6.36.2-1_brcm47xx.ipk.
Installing fuse-utils (2.8.5-1) to root...
Downloading ftp://ftp:ftp@192.168.0.9/fuse-utils_2.8.5-1_brcm47xx.ipk.
Configuring librt.
Configuring libpthread.
Configuring libusb.
Configuring libow.
Configuring owshell.
Configuring kmod-fuse.
Configuring libfuse.
Configuring fuse-utils.
Configuring owfs.

Owfs ist ein Ein-Draht-Dateisystem. Es erstellt diverse Loge und überwacht alles! Owhttpd ist dasselbe System, aber mit einem Web-Server. Owfs passt perfekt für den Bau der eindrähtigen Netzwerke. Alles ist bis ins Detail durchdacht und es gibt eine Menge der Möglichkeiten.

Die Anwendung Owhttpd kann auf das Dateisystem in der aktuellen Version von OpenWrt bei der Paketeninstallation nicht kopiert werden. Deshalb kann man dies selbst machen, wobei man die Datei owhttpd von hier kopiert:
openwrt/build_dir/target-mipsel_uClibc-0.9.31/owfs-2.8p4/module/owhttpd/src/c/.libs

Beim Starten von owfs hat man den Montierungspunkt sowie auch den Adaptertyp anzugeben (ich habe ds9097).

root@OpenWrt:/# owfs -d /dev/ttyUSB0 /home/1wire/

Beim Starten ist der Merker --debug anzugeben, damit der Testbetrieb gestartet werden kann. Nach dem Start von owfs wird ein Dateisystem in dem installierten Verzeichnis erstellt:

root@OpenWrt:/# ls -l /home/1wire/
drwxr-xr-x 1 root root 8 Jan 1 00:02
drwxrwxrwx 1 root root 8 Jan 1 00:02 26.5576BA000000
drwxr-xr-x 1 root root 8 Jan 1 00:02 settings
drwxrwxrwx 1 root root 8 Jan 1 00:02 simultaneous
drwxr-xr-x 1 root root 8 Jan 1 00:02 statistics
drwxr-xr-x 1 root root 30 Jan 1 00:02 structure
drwxr-xr-x 1 root root 8 Jan 1 00:02 system
drwxr-xr-x 1 root root 8 Jan 1 00:02 uncached

Um den Temperaturwert zu erkennen, prüfen wir den Verzeichnisinhalt des Sensors:

root@OpenWrt:/# ls -l /home/1wire/26.5576BA000000
-r--r--r-- 1 root root 16 2011-02-16 20:52 address
-r--r--r-- 1 root root 256 2011-02-16 20:52 alias
drwxrwxrwx 1 root root 8 2011-02-16 20:56 B1-R1-A
-rw-rw-rw- 1 root root 1 2011-02-16 20:56 CA
-r--r--r-- 1 root root 2 2011-02-16 20:52 crc8
-rw-rw-rw- 1 root root 24 2011-02-16 20:52 date
drwxrwxrwx 1 root root 8 2011-02-16 20:56 disconnect
-rw-rw-rw- 1 root root 1 2011-02-16 20:56 EE
drwxrwxrwx 1 root root 8 2011-02-16 20:56 endcharge
-r--r--r-- 1 root root 2 2011-02-16 20:52 family
drwxrwxrwx 1 root root 8 2011-02-16 20:56 HIH3600
drwxrwxrwx 1 root root 8 2011-02-16 20:56 HIH4000
drwxrwxrwx 1 root root 8 2011-02-16 20:56 HTM1735
-r--r--r-- 1 root root 12 2011-02-16 20:52 humidity
-rw-rw-rw- 1 root root 1 2011-02-16 20:56 IAD
-r--r--r-- 1 root root 12 2011-02-16 20:52 id
-r--r--r-- 1 root root 16 2011-02-16 20:52 locator
drwxrwxrwx 1 root root 8 2011-02-16 20:56 MultiSensor
-rw-rw-rw- 1 root root 12 2011-02-16 20:56 offset
drwxrwxrwx 1 root root 8 2011-02-16 20:56 pages
-r--r--r-- 1 root root 16 2011-02-16 20:52 r_address
-r--r--r-- 1 root root 12 2011-02-16 20:52 r_id
-r--r--r-- 1 root root 16 2011-02-16 20:52 r_locator
drwxrwxrwx 1 root root 8 2011-02-16 20:56 S3-R1-A
-r--r--r-- 1 root root 12 2011-02-16 20:52 temperature
-r--r--r-- 1 root root 32 2011-02-16 20:52 type
-rw-rw-rw- 1 root root 12 2011-02-16 20:56 udate
-r--r--r-- 1 root root 12 2011-02-16 20:56 VAD
-r--r--r-- 1 root root 12 2011-02-16 20:56 VDD
-r--r--r-- 1 root root 12 2011-02-16 20:56 vis

Если бы к входу ацп микросхемы ds2438 был подключен датчик влажности, то мы бы смогли посмотреть и влажность. А так смотрим значение температуры:Wenn ein Feuchtigkeitssensor an den ADC-Eingang des Chips ds2438 angeschlossen wäre, so könnten wir auch den Feuchtigkeitswert anschauen. Aber wir können jetzt nur den Temperaturwert sehen:

root@OpenWrt:/# cat ./temperature
22.3125

Weiter starten wir den Web-Server und prüfen seine Optionen:

root@OpenWrt:/# owhttpd -d /dev/ttyUSB0 -p 8080

Es sollte etwa wie folgt dargestellt sein:

Später werden die Informationen aktualisiert, wo wir die Grafike auf Basis von laufenden Logen zu zeichnen lernen.

Bestellen Sie einen Usb-Adapter für einen Ein-Draht-Sensor bei uns:

usb-adapter for 1-wire

1-wire temperature sensor