Raspberry Pi GPIOs mit wiringPi auslesen und steuern

GPIOEs 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.