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: