Raspberry Pi GPIOs mit wiringPi auslesen und steuern
Es existieren mehrere Möglichkeiten, die GPIO-Ports eines Raspberry Pi zu steuern oder deren Stati auszulesen. Den herkömmlichen und recht umständlichen, oder mit Verwendung der wiringPi-Bibliothek. wiringPi ermöglicht die Einbindung in Programmiersprachen wie PHP, Java oder Python. Als weiteres Hilfsmittel steht ein Kommandozeilentool zur Verfügung, mit welchem aus der Konsole heraus GPIO-Ports gesteuert oder gelesen werden können.
Hier möchte ich zunächst drei Wege der Installation sowie die Verwendung des Kommandozeilentools aufzeigen.
Installation
Installation via Repository
Die einfachste Methode, wiringPi zu installieren, ist
apt-get install wiringpi
, da wiringPi mittlerweile in den Repositories vorhanden ist.
Installation via GIT
Vor der Installation stellen wir mit den Befehlen
apt-get update apt-get upgrade
sicher, dass sich unser Raspberry mitsamt allen Paketen auf dem aktuellsten Stand befindet.
Anschließend installieren wir GIT und eine Abhängigkeit via
apt-get install git-core libi2c-dev
Nun kann wiringPi aus dem GIT-Repository „heruntergeladen“ werden:
git clone git://git.drogon.net/wiringPi
Anschließend führen wir das Installationsscript aus:
cd wiringPi ./build
Dies konfiguriert und installiert wiringPi.
Manuelle Installation
Sollte GIT oder gar eine Internetverbindung nicht zur Verfügung stehen, besteht auch die Möglichkeit einer manuellen Installation von wiringPi.
Das gepackte Archiv mit wiringPi laden wir zunächst (an einem anderen Rechner?) herunter (und verschieben es auf den Raspberry):
wget http://project-downloads.drogon.net/files/wiringPi.tgz
Anschließend wird eine Abhängigkeit installiert, das heruntergeladene Paket entpackt, kompiliert und installiert:
apt-get install libi2c-dev tar xvzf wiringPi.tgz cd wiringPi/wiringPi make make install cd ../gpio make
Anwendung
Das Kommandozeilentool
Nach der erfolgreichen Installation von wiringPi steht uns das Kommandozeilentool „gpio“ zur Verfügung. Ein Vorteil dieses Tools ist, dass es von jedem Nutzer des Systems ausgeführt werden kann und im Gegensatz zu der herkömmlichen Weise, die GPIO-Ports anzusprechen, keine root-Rechte benötigt.
Die aktuell installierte Version des Tools wird ausgegeben mit
gpio -v
wiringPi nutzt eine andere Nummering der GPIO-Ports als das System. Daher ist immer auf die korrekte Bezeichnung des zu behandelnden Ports zu achten. Dazu gibt es in diesem Beitrag eine grafische Tabelle, die die Umsetzung der Nummerierung verdeutlicht.
Diese Tabelle kann für das System passend (verschiedene Versionen und Revisionen der Raspberrys) auf der Konsole angezeigt werden mit dem Aufruf:
gpio readall
Sollte dennoch der Wunsch bestehen, die Nummerierung seitens des Raspberrys zu nutzen, kann dies mit einem vorangestellten „-g“ durchgeführt werden. Beispiel:
gpio -g $BEFEHL
Um nun einen GPIO-Port zu schalten, nutzen wir das Tool wie folgt. Ein Port (im folgenden Beispiel wiringPi-GPIO 7) wird auf „high“ (1) geschaltet mit
gpio write 7 1
und auf „low“ (0) geschaltet mit
gpio write 7 0
Zudem ist ein Dimmen durch Pulsweitenmodulation (PWM) möglich. Dies wird realisiert mit dem Befehlsaufruf
gpio pwm 7 500
wobei in diesem Beispiel der wiringPi-Port 7 angesprochen wird und ein PWM-Wert von 500 gesetzt wird. Gültige Werte liegen im Bereich von 0 bis 1023.
Auch ist das Auslesen des Zustanden eines GPIO-Ports mit diesem Tool möglich:
gpio -g read 4
liest in diesem Beispiel den Schaltzustand des System-GPIO-Ports 4 (=wiringPi Port 7) aus. Dies kann der Zustand 1 (high) oder 0 (low) sein.
Mit diesem Tool sind nun unzählige Anwendungsfälle vorstellbar, die u.a. mit Shell-Scripten realisiert werden können. Eine Möglichkeit wäre das Auslesen von Reed-Kontakten oder Schwimmern, wie in diesem Beitrag beschrieben. Vorstellbar wäre auch eine Übergabe eines jeweiligen GPIO-Status an die Hausautomatisierungsplattform openHAB, wie in diesem Beitrag ausführlich beschrieben.
Willi
17.08.2015 @ 09:42
Nach dem Neustart verschwindet aber die Einstellung :(
Wie kann man die Eistellung speichern.
Daniel Wenzel
17.12.2014 @ 05:25
Danke für den Hinweis. Der Artikel wurde entsprechend korrigiert.
nixdagibts
16.12.2014 @ 22:54
Kleiner Schreibfehler in der URL. Es muss wohl drOgon statt drAgon sein. Dann klappt’s auch mit dem download :)
git clone git://git.drogon.net/wiringPi