owTools unter Linux
Erstellen des Programms aus dem aktuellen Quellcode
Die Vorgehensweise ist bei allen Debian-Basierten Linux-System (Raspbian, Ubuntu, Mint...) gleich. Bei anderen Systemen muss der Befehl zum Installieren der benötigen Programme und Bibliotheken angepasst werden.
1. Installieren der benötigten Programme und Bibliotheken:
sudo apt install automake autoconf g++ libmysqlclient-dev libusb-dev
Bei bei neueren Linux-Distributionen muss eventuell stehen:
sudo apt install automake autoconf g++ default-libmysqlclient-dev libusb-dev
2. Quellcode herunterladen und entpacken (Achtung! Wenn schon eine Datei owTools im aktuellen Verzeichnis existiert, funktioniert die Verzeichniserstellung nicht):
mkdir owTools
cd owTools
wget -O owTools.tar.gz "https://git.smho.de/gw/?p=owTools.git;a=snapshot;h=HEAD;sf=tgz"
tar --strip=1 -xzf owTools.tar.gz
3. Übersetzen des Programms:
aclocal
autoconf
automake
./configure
make
Download Binary
Wem das Übersetzten des Quellcodes, wie gerade beschrieben, zu kompliziert ist, der kann es mit einem fertig übersetzten Programm versuchen.Raspberry PI
wget https://www.tm3d.de/downloads/owTools/owTools_PI_bin.tar.gz
tar -xzf owTools_PI_bin.tar.gz
./owTools
Kommt die Fehlermeldung:
./owTools: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
Muss die Bibliothek libmysqlclient.so.18 noch installiert werden mit:
sudo apt-get install libmysqlclient18
Die Zahl .18 kann in der Fehlermeldung auch anders sein, entsprechend muss auch die Kommandozeile geändert werden.
Funktioniert owTools korrekt, so gibt das Programm folgende Informationen aus:
Verschiedene Adapter
Übersicht
1-Wire Master | Beispiel |
---|---|
LinkUSB(i) | ./owTools -a COM0 |
DS9490 / DS2490 | sudo ./owTools -a USB1 |
1-Wire Kernel Module | sudo ./owTools -a W1 |
Raspberry PI - beliebiges GPIO | sudo ./owTools -a GPIO17 |
Arduino (Nano) | ./owTools -a ARDUINO0 |
Serielle Adapter und LinkUSB
Mit diesem Adapter ist der Zugriff auf den 1-Wire Bus relativ unkompliziert. Der passende Treiber ist im Linux-Kernel enthalten.
Um den entsprechende Port herauszufinden hilft die Eingabe von dmesg nach dem Anstecken des Adapters.
In der letzten Zeile steht ttyUSB0. Somit ist der Adapter mit der virtuellen seriellen USB-Schnittstelle 0 verbunden. Die Kommandozeile muss dann lauten:
./owTools -a COM0
Wenn Fehlermeldungen kommen, kann es sein, dass der Linux-Benutzer noch ein die Gruppe dialout eingetragen werden muss. Dies kann mit dem Befehl:
sudo usermod -a -G dialout $USER
geschehen.
DS9490 - DS2490
Auch für diesen Adapter ist der Treiber im Linux-Kernel enthalten und es muss nichts zusätzlich installiert werden.
Allerdings wird der Master bei neueren Kernel-Versionen automatisch in das 1-Wire-System des Kernels eingebunden und ist somit schon belegt. Das kann man z.B. mit dem Befehl lsmod |grep ds2490 herausfinden:
In diesem Falle muss das Modul erst durch den Befehl:
sudo rmmod ds2490
entladen werden.
Der Befehl zum Starten von owTools mit dem ersten angeschlossen DS9490-Adapter lautet dann:
sudo ./owTools -a USB1
Funktioniert alles richtig sieht die Ausgabe dann ungefähr so aus:
1-Wire Kernel Funktion
Auch die im Linux-Kernel integrierte 1-Wire Funktion lässt sich mit owTools verwenden. Dies ist besonders praktisch, wenn beim RaspberryPI das GPIO4-Port als 1-Wire Master verwendet werden soll. Allerdings läuft das 1-Wire-Kernelmodul auf Intel-kompatiblen PCs mit DS9490 nicht besonders stabil. Dort sollte lieber der direkte Weg, wie oben beschrieben, verwendet werden.
Der Befehl lautet:
sudo ./owTools -a W1
Wichtig ist die Ausführung mit Administratorrechten (sudo).
Beliebiger GPIO vom RaspberryPI ohne Kernel
owTools erlaubt auch die Verwendung jedes freien GPIO-Ports als 1-Wire Master. Auch dazu ist jeweils ein Pullup-Widerstand notwendig.
Leider funktioniert die Funktion nicht ganz fehlerfrei. Aber mit CRC und Prüfung der gesendeten Daten ist eine stabile Kommunikation möglich. Wenn zufällig jemand weiß, wie man es anstellt, dass der Kernel ein Programm 15µs lang nicht unterbricht, dann bitte unbedingt melden!! Dann wäre das Problem der sporadischen Fehler gelöst.
Der Befehl z.B. für GPIO17 lautet:
sudo ./owTools -a GPIO17
Wichtig ist die Ausführung mit Administratorrechten (sudo).
ARDUINO
Ein Arduino ist schon extrem günstig zu haben. Somit ist diese Variante wahrscheinlich der günstigste 1-Wire Adapter für den PC. Mein Arduino Nano hat eine serielle Schnittstelle von QinHeng Electronics. Die Treiber habe ich mal mit in die owTools.zip gepackt. Andere Arduino Nanos haben aber auch andere Chips verbaut.
Zum Arduino selbst will ich hier nicht viel sagen. Dazu gibt es sehr viele Informationen im Internet. Die passende Firmware für den Arduino gibt es hier:
zum Übersetzen wird die 1-Wire Bibliothek für Arduino benötigt:
In der aktuellen Arduino IDE gibt es die Möglichkeit, die ZIP-Datei gleich unter dem Menüpunkt Sketch -> Bibliothek einbinden -> .ZIP Bibliothek hinzufügen ... zu installieren
Der 1-Wire Master ist mit dem Port D10 verbunden. Zum korrekten Betrieb muss noch ein Pullup-Widerstand (1 kOhm - 10 kOhm) zwischen D10 und +5V angebracht werden:
Die Nummer des USB-Serial-Ports kann, wie bei dem LinkUSB-Adapter, mit dem Befehl dmesg herausgefunden werden. Für ttyUSB0 muss z.B. folgender Befehl eingegeben werden:
owTools -a ARDUINO0
Bei erfolgreicher Ausführung zeigt das Programm die Werte der angeschlossenen Sensoren an: