GPIOs steuern mit wiringPi

WiringPi ist ein Programm mit dem man die GPIO Pins des Banana Pi ganz einfach ansteuern kann. Unter den Raspberry Pi Anwendern wird wiringPi vorzusweise verwendet. Das Tool ist auch für den Banana Pi verfügbar.

Die Programmbibliothek kann mit wenig Aufwand in die Programmiersprachen C/C++, Phyton, Java und PHP eingebunden werden. Die durch die Libary bereitgestellten Funktionen ermöglichen unteranderem das Schalten eines High- und Low-Zustandes auf gewünschte GPIO-Pins. Gleichermaßen können die Pins als Eingang genutzt und mit wiringPi ausgewertet werden. In diesem Artikel zeige ich wie man wiringPi installiert und einsetzt.

Zu Beginn öffnen wir das Terminal und laden uns wiringPi von Github herunter.

git clone https://github.com/LeMaker/WiringBPi.git

Wenn der Download abgeschlossen ist sollte im Verzeichnis /home/bananapi ein neuer Ordner erscheinen: wiringBPi. In diesem Ordner ist die Programmbibliothel von wiringPi abgelegt.

Um wiringPi verwenden zu können, müssen wir die Software im nächsten Schritt installieren. Zur Installation bringt die Software einen Skript mit, den wir im folgenden ausführen. Hierfür wechseln wir in das entsprechende Verzeichnis und setzen optional Zugriffsrechte.

cd /home/bananapi/wiringBPi
chmod +x build

Jetzt können wir den Installationsskript ausführen. Dies nimmt einen kurzen Augenblick in Anspruch.

sudo ./build

Screenshot Banana Pi - wiringPi
Screenshot Banana Pi – wiringPi

Nach dieser langen Ausgabe ist wiringPi erfolgreich installiert und kann verwendet werden. WiringPi ist sehr vielseitig und kann daher mit den Programmiersprachen C/C++, Phyton, Java und PHP genutzt werden. Außerdem ist das Schalten der GPIO Pins über die Konsole möglich. In diesem Tutorial beschränke ich mich auf die Ansteuerung des Pin Headers via Konsole und mit C/C++.

Grundlegend ist festzuhalten das die GPIO Pins als Eingang oder Ausgang konfiguriert werden können. Weiterhin gilt ein Pegel von 5 Volt bedeutet High und ein Pegel von 0 Volt bedeutet Low. Dies ist bei der Beschaltung des Banana Pi zu beachten: Zum einen um eine korrekte Funktionalität zu gewährleisten und zum anderen um den Banana Pi nicht zu beschädigen. Neben den Zuständen High und Low unterstützen einige Pins Funktionen wie PWM und UART.

GPIOs über Terminal steuern

Um herauszufinden wie die GPIO Pins momentan konfiguriert und beschalten sind, kann man folgenden Befehl im Terminal absetzen.

gpio readall

gpio readall - Screenshot Raspbian

Im folgenden wollen wir den GPIO Pin 17 ansteuern. Physikalisch ist das Pin 11 und aus Sicht von wiringPi ist es Pinnummer 0. Anhand der angezeigten Tabelle vom Befehl gpio readall kann dies nachvollzogen werden. Weitere Informationen zum Aufbau und Pindefinitionen gibt es hier.

Wenn wir Pin 17 beschalten wollen müssen wir diesem zunächst sagen, ob er als Eingang oder Ausgang fungieren soll. In diesem Tutorial möchte ich GPIO Pin 17 als Ausgang schalten. Dazu verwenden wir im folgenden Befehl den Parameter out. Als Eingang würde man in nehmen.

gpio export 17 out

Anschließend soll an GPIO Pin 17 ein High-Zustand (5 Volt) angelegt werden.

gpio -g write 17 1

Ruft man jetzt die Pinübersicht mit gpio readall erneut auf, wird ersichtlich, dass
der GPIO Pin 17 bzw. physikalisch 11 bzw. wiringPi Pin 0 auf Output und High geschalten ist. Wenn man anschließend vom High zum Low wechseln möchte, ersetzt man die 1 durch eine 0: gpio -g write 17 0

LED ansteuern mit wiringPi

Ansteuerung mit C/C++

Die Beschaltung der GPIO Pins mit Hilfe von wiringPi ist in Verbindung mit einer Programmiersprache wie zum Beispiel C/C++ sehr vielseitig und nützlich. Dazu muss die Programmbibliothek von wiringPi wie beschrieben installiert sein.

Im folgenden erstellen wir eine kleine C-Anwendung mit der wir über Pin 11 (GPIO 17, wiringPi 0) eine LED zum blinken bringen möchten. Dazu erstellen wir über das Terminal die Datei blinken.c .

sudo nano blinken.c

Der Inhalt der C-Anwendung kann wie folgt aussehen:

#include <wiringPi.h>

int main ()
{
// wiringPi initialisieren
if (wiringPiSetup() == -1) {
return 1;
}

// Pin 11 auf Ausgang schalten (GPIO 17, wiringPi 0)
// Achtung! wiringPi Layout nutzen
pinMode (0, OUTPUT);

// Dauerschleife
while(1) {

// Pin 11 High, LED an
digitalWrite (0, HIGH);
delay(500);

// Pin 11 Low, LED aus
digitalWrite(0, LOW);
delay(500);

}

return 0 ;
}

Nachdem wiringPi initialisiert ist geht das C-Programm in eine While-Schleife. Innerhalb der Schleife wird Pin 11 (GPIO 17, wiringPi 0) auf High geschalten. Anschließend wartet das Programm mit Hilfe des delay-Befehls 500 ms und schaltet dann den Pin und damit die LED wieder ab.

Mit den Tastenkombinationen Strg+X, Y und Enter schließen und speichern wir unseren C-Skript ab. Anschließend kompilieren wir den Quellcode.

gcc -o blinken blinken.c -lwiringPi

Jetzt können wir unser Programm ausführen.

sudo ./blinken

Beschaltet man über Pin 11 eine LED, so würde diese jetzt im Takt von 500 ms blinken. Wie man eine LED hardwareseitig installiert erkläre ich im nächsten Schritt.

LED verbinden

LED ansteuern
LED ansteuern
Für dieses Beipiel verwende ich eine Standard LED (2,1 Volt), einen 140 Ohm Vorwiderstand, ein Breakboard und Jumperkabel.

Zunächst verbinden wir den Vorwiderstand mit der LED. Dabei ist auf die richtige Polung der Leuchtdiode zu achten (Anode +, Kathode -). Anschließend muss Pin 11 des Banana Pis (GPIO 17, wiringPi 0) mit dem Vorwiderstand verbunden werden. Den Masse Pin (GND) des Banana Pi wird abschließend mit der Kathode (-) der LED verbunden.

Warum benötigen wir einen Vorwiderstand?

Der Vorwiderstand einer LED dient der Strombegrenzung und Spannungsanpassung. In unserem Falle bekommen wir vom Banana Pi eine 5 Volt Betriebsspannung. Die Standard-LED arbeitet in der Regel mit etwa 2,1 Volt und hat eine Stromaufnahme von ca. 20 mA. Daher liegen zwischen den 5 Volt Betriebsspannung und 2,1 Volt für die LED ganze 2,9 Volt die über den Vorwiderstand abfallen müssen.

Vorwiderstand dimensionieren

Mit Hilfe des Ohmschen Gesetzes kann der Vorwiderstand dimensioniert werden. Wir wissen das über dem Widerstand 2,9 Volt abfallen müssen und das durch diesen 20 mA durchfließen (Reihenschaltung).

R= U/I = 2,9 Volt / 0,02 A = 145 Ohm

Der Vorwiderstand sollte etwa 145 Ohm groß sein. Je nach LED und deren Farbe kann die Arbeitsspannung und Stromaufnahme abweichen. Hierbei sollte das jeweilige Datenblatt beachtet werden.

Led Ansteuerung mit Banana Pi
Led Ansteuerung mit Banana Pi

Quellen (Stand:03.11.14): Wikipedia, wiki.lemaker.org

Weiterlesen