Raspberry Pi – Pibrella
Ein ganz besonderes Erweiterungsboard für den Raspberry Pi heißt Pibrella. Pibrella ist konzipiert für Anfänger um erste Erfahrungen mit dem Raspberry Pi, der GPIO Schnittstelle und Python zu machen. In diesem Artikel zeige ich euch wie Ihr mit dem Pibrella Board arbeitet und schnell und einfach zu den ersten Ergebnissen kommt. In weiteren Artikeln werde ich das Board immer wieder einsetzen. Es vereinfacht das Prototyping.
Das Raspberry Pi Board Pibrella
Das Pibrella Board wurde von der Firma Pimoroni konzipiert und wird von mehreren Händlern vertrieben. Das Board ist sehr günstig und kann zum Beispiel auf Amazon bestellt werden. Das Board hat folgende Funktionalitäten:
- 3 LEDs (grün, gelb, rot)
- einen einfachen Lautsprecher
- einen Knopf
- 4 GPIO Ausgänge
- 4 GPIO Eingänge
- einen eigenen Stromanschluss
Auf GitHub findet man eine Bibliothek mit zahlreichen Codebeispielen für Python. Diese sind hilfreich für einen raschen und unkomplizierten Einstieg.
Montage
Das Board ist einfach zu montieren. Es wird direkt auf die GPIO Schnittstelle des Raspberry Pis aufgesteckt. Dabei ist die Ausrichtung wichtig, das Board muss über dem Raspberry Pi Board platziert werden. Das Pibrella Board ist kompatibel mit allen Raspberry Pi Modellen. Sofern man es mit dem neuen Raspberry Pi B+ verwendet, so muss man darauf acht geben, dass es ganz oben auf dem GPIO Stecker montiert wird. Die ersten Pins sind beim B+ exakt gleich wie beim älteren Raspberry Pi B Modell. Will man das Board verwenden, so muss man den Raspberry Pi von nun an über den Micro USB Anschluss des Pibrella Boards mit Strom versorgen. Falls man es nicht benötigt, kann man den normalen Stromanschluss verwenden. Bitte nicht beide gleichzeitig!
Installation
Das Pibrella Board stellt eine eigene Python Bibliothek bereit, damit es aus Python sehr einfach angesprochen werden kann. Diese wird wie folgt installiert. Zuerst machen wir ein Systemupdate:
sudo apt-get update sudo apt-get upgrade
Danach können wir die Bibliothek wie folgt holen:
sudo apt-get install python-pip sudo pip install pibrella
Damit ist die Installation komplett. Von nun an kann man die Pibrella Bibliothek in den Python Skripten mittels import pibrella verwenden.
Arbeiten mit dem Pibrella Board
Mit Hilfe der Python Bibliothek ist das Arbeiten mit dem Board beziehungsweise die Verwendung der einzelnen Komponenten sehr einfach und meistens mit einer einzigen Codezeile möglich.
Skripte testen
Die folgenden Beispielskripts kann man interaktiv ausführen. Dazu gibt es eine interaktive Python Shell in der man Zeilenweise Python Kommandos eingeben kann. Das eignet sich perfekt um einzelne Komponenten zu testen. Die dort getesteten Kommandos kann man später zu einem Python Script zusammenfügen. Die interaktive Python Shell wird wie folgt gestartet:
sudo python -i
LED ein- und ausschalten
Die LED Lampen kann man mit folgendem kurzen Python Script ansteuern und einschalten:
import pibrella pibrella.light.green.on()
In diesem Fall wird das grüne LED aktiviert. Alternativ dazu kann man mit red beziehungsweise yellow das rote und das gelbe LED ansteuern. Alternativ wird die LED mit off() deaktiviert.
Das Skript muss übrigens immer als root ausgeführt werden, also mit sudo. Der Grund dafür ist, dass am Raspberry Pi die GPIO Schnittstelle nur über den root Benutzer angesteuert werden.
Es gibt noch drei weitere Kommandos um mit den LED Lichtern zu arbeiten. Das sind:
- pibrella.light.yellow.blink(ON_TIME, OFF_TIME)
damit lässt man ein LED blinken. Folgendes Beispiel lässt das gelbe Licht immer 1 Sekunde lang eingeschaltet und 1 Sekunde ausgeschaltet:pibrella.light.yellow.blink(1, 1)
- pibrella.light.yellow.pulse(FADE_IN_TIME, FADE_OUT_TIME, ON_TIME, OFF_TIME)
damit kann man das LED pulsieren lassen. Der Unterschied zum vorherigen Kommando ist, dass das LED nicht mit voller Leuchtstärke leuchtet, sondern erst langsam an Intensität gewinnt. Die Zeitspanne bis zur vollen Leuchtstärke regelt man mit der FADE_IN_TIME und der FADE_OUT_TIME. Das kann beispielsweise beim gelben LED so aussehen und würde 5 Sekunden bis zur vollen Lichtstärke brauchen:pibrella.light.yellow.pulse(5, 5, 1, 1)
- pibrella.light.yellow.fade(INTENSITY_START, INTENSITY_END, FADE_TIME)
eine alternative Möglichkeit ist die fade Funktion. In dieser kann man auch die Intensität regeln. Das folgende Kommando schaltet das gelbe LED von der Intensität 0% zu 50% in 2 Sekunden:pibrella.light.yellow.fade(0, 50, 2)
Lautsprecher
Das Board hat auch einen einfachen Lautsprecher, einen so genannten Buzzer. Man kennt das vermutlich noch von alten PCs, welche am Mainboard auch einen solchen primitiven Lautsprecher integriert hatten. Diese piepte oft im Fehlerfall.
Der Pibrella Lautsprecher hat zwei vordefinierte Klänge. Einen für den Fehlerfall und einer für den Erfolgsfall. Man kann diese folgendermaßen abspielen:
pibrella.buzzer.fail() pibrella.buzzer.success()
Neben diesen vordefinierten Klängen gibt es auch die Möglichkeit, dass man selber kreativ wird und eine Melodie oder einzelne Töne abspielt. Das geht entweder über die Notenfunktion note:
pibrella.buzzer.note( 0 )
Wobei man hier eine Zahl als Note eingibt. 0 ist dabei das Äquivalent der Note A (440 Hz). Wem das noch zu wenig Freiheit ist, der kann auch bestimmte Frequenzen abspielen. Das funktioniert mit der Funktion buzz:
pibrella.buzzer.buzz( 440 )
Knopf
Das Board hat auch eine primitive Eingabe. Einen einzelnen roten Knopf. Den Status dieses Knopfs kann man jederzeit über folgende Funktion abfragen:
pibrella.button.read()
Neben dem Auslesen des Status kann man den Button auch direkt für die Steuerung in einem Python Script verwenden. Dazu stellt die Bibliothek zwei Funktionen zur Verfügung:
- pibrella.button.pressed(button_pressed)
In dieser Funktion wird ein Eventhandler definiert. Der Parameter button_pressed ist dabei eine Funktion, welche im Fall des Drückens des Knopfes ausgeführt wird. Eine einfache button_pressed Funktion würde beispielsweise so aussehen:def button_pressed(pin): print("You pressed the button!") pibrella.button.pressed(button_pressed)
- pibrella.button.changed(button_changed)
Ein weiterer Eventhandler. Dieser wird immer dann ausgeführt, wenn sich der Zustand des Knopfes ändert. Der Unterschied zur pressed Funktion ist der, dass die angegebene Funktion bei einem Tastendruck 2 Mal ausgeführt wird. Einmal weil sich der Zustand auf „gedrückt“ ändert und ein zweites Mal weil sich der Zustand wieder zu „nicht gedrückt“ ändert. In der Eventfunktion kann man darauf eingehen. Ein Beispiel:def button_changed(pin): if pin.read() == 1: print("You pressed the button!") else: print("You released the button!") pibrella.button.changed(button_changed)
GPIO Ein- und Ausgabe
Seitlich vom Knopf stellt das Board jeweils 4 Eingabe GPIO Pins und 4 Ausgabe GPIO Pins zur Verfügung. Am Board sind für jeden dieser Pins auch LEDs hinterlegt die Anzeigen ob der Pin gerade mit Strom versorgt wird. Das ist für die Fehlersuche sehr hilfreich!
Die Verwendung der Ein- und Ausgaben ist extrem einfach. Noch einmal einfacher als die Verwendung der eigentlichen GPIO Pins des Raspberry Pis, weshalb gerade Anfänger viel Freude mit dem Pibrella Board haben werden.
Ausgabe
Die Pins zur Ausgabe (e, f, g, h) kann man folgendermaßen verwenden:
pibrella.output.e.on()
oder alternativ dazu:
pibrella.output.e.write(1)
in beiden Fällen liegt nun am Pin e (siehe Beschriftung auf dem Board) Spannung an. Die LED neben den Steckplätzen von Pin e zeigt auch optisch den Status an.
Eingabe
Für die Eingabe sind die Pins a, b, c, d reserviert. Der aktuelle Status eines Pins kann wie folgt eingelesen werden:
pin_a = pibrella.input.a.read()
Fazit
Das Pibrella Board ist sehr günstig und einfach zu bedienen. Es ist gerade für Anfänger sehr gut geeignet um die ersten Schritte mit der GPIO Schnittstelle und mit Ein- und Ausgabegeräten zu arbeiten. Auch für Fortgeschrittene kann das Board sehr gut benutzt werden, da es das Prototyping vereinfacht und man schnell und unkompliziert zu ersten Ergebnissen kommt. Einzig die geringe Zahl an lediglich 4 Ein- und 4 Ausgangspins ist für viele Projekte zu wenig. Da kann man aber schnell auf die eigentliche GPIO Schnittstelle zurückgreifen.