Nachdem du im vorherigen Teil der Serie die GPIO-Leiste des Coral Dev Board Mini kennengelernt hast, lernst du nun, wie man damit umgeht, und wie sich einzelne Pins programmieren lassen.
Die Pins arbeiten grundsätzlich als Eingabe oder als Ausgabe. Ein Ausgangs-Pin gibt etwa eine Spannung aus, um eine Leuchtdiode zum Leuchten zu bringen. Ein Eingang-Pin wiederum liest eine Spannung ein, etwa wenn du einen Schalter drückst. In diesem Beitrag baust du eine Schaltung auf, die genau das macht. Eine LED reagiert auf Betätigung eines Schalters.
|
Benötigtes Material
Die Bauteile für die Schaltung kosten nicht viel. Du benötigst eine LED, einen Schalter, ein Breadboard, zwei Widerstände und ein paar Jumper-Kabel. Das Breadboard-Kit enthält ein Breadboard und 75 Jumper-Kabel. Um die elektronischen Komponenten mit dem Dev Board zu verbinden, benötigst du die Variante Male-Female. Sie ist ebenfalls in dem Kit enthalten.
Das LED + Widerstände basic maker kit bringt je 10 LEDs in den Farben rot, grün, blau, gelb und weiß mit sowie zahlreiche Widerstände von 330 Ω bis 1 MΩ. Alternativ kannst du die LED und die Widerstände auch einzeln kaufen. Du benötigst einen Widerstand mit 10 kΩ und einen mit 330 Ω. Fehlt nur noch der Tastschalter.
Es gibt mehrere Programme und Libraries, um die GPIO-Leiste des Dev Boards zu programmieren. Nachfolgend lernst du python-periphery kennen. Das ist eine Python-Bibliothek für den Zugriff etwa auf GPIO-, PWM-, SPI- und I2C-Schnittstellen.
Dev Board an den Monitor anschließen
Der Text-Editor nano von Mendel Linux funktioniert mit der Git Bash nicht. Deshalb musst du das Dev Board an einen Monitor anschließen und ohne Host betreiben. Du verbindest den Monitor über den microHDMI-Anschluss des Boards. Um das Dev Board bedienen zu können, verbindest du eine Tastatur mit Touchpad mit dem USB-OTG-Anschluss. Das ist der rechte der beiden USB-C-Anschlüsse. Eventuell ist dafür ein Adapter notwendig. Dann schließt du die Stromversorgung an und hältst den Power-Taster gedrückt. Er befindet sich direkt neben dem HDMI-Anschluss. Das Dev Board fährt daraufhin hoch. Tipp: Falls kein Mauszeiger erscheint, entfernst du die Tastatur vom USB-OTG-Anschluss und schließt sie erneut an.
Wenn du das Dev Board Mini an einen Monitor anschließt, dann ist das Terminal die einzige Anwendung.
Das Keyboard-Layout ist Amerikanisch. Um es in Deutsch zu ändern, gibst du zunächst
cd /etc/xdg/weston
ein und dann um die Konfigurationsdatei anzupassen
sudo nano weston.ini
Im Abschnitt [keyboard] trägst du die Zeile
keymap_layout=de
ein. Nach einem Neustart des Boards etwa mit
sudo reboot now
ist die Umstellung des Tastaturlayouts abgeschlossen.
Das Dev Board mit python-periphery programmieren
Der Software-Teil ist einfach, denn python-periphery ist im Betriebssystem Mendel Linux des Dev Board Mini bereits installiert. Falls das bei dir nicht der Fall sein sollte, holst du es mit sudo pip3 install python-periphery nach.
Zunächst begnügen wir uns damit, eine LED zum Blinken zu bringen. Das Fritzing-Diagramm zeigt den Aufbau der Schaltung. Fritzing ist ein Programm, mit der sich elektronische Scahaltungen visualisieren lassen. Da das Dev Board noch nicht Teil der Fritzing-Bibliothek ist, zeigt die Abbildung die GPIO-Leiste des Raspberry Pi, die sich in diesem Zusammenhang aber nicht von der des Dev Boards unterscheidet.
Verbinde das lange Bein der LED, das ist die Anode, mit Pin 16 auf dem Board. Die Auswahl ist willkürlich, es könnte auch ein anderer GPIO-Pin sein. Die LED lässt Strom nur in einer Richtung durch – das D in LED steht für Diode. Daher ist die Polarität wichtig, und die ist durch die Länge der Beine kodiert. Das kurze Bein schließt du über einen Widerstand mit 330 Ω an Pin 34 an, das ist einer der acht Ground-Pins.
In der Abbildung weiter unten auf dieser Seite findest du die Tabelle mit der Pin-Belegung. Hier suchst du die Nummer des „Device Name“ für Pin 16 heraus. Es ist die 387. Im Terminal erstellst du mit dem Befehl sudo nano led.py ein neues Programm und schreibst folgenden Code hinein:
from periphery import GPIO
import time
led_pin = 387
gpio = GPIO(led_pin, "out")
try:
while 1:
print("LED einschalten")
gpio.write(True)
time.sleep(2)
print("LED ausschalten")
gpio.write(False)
time.sleep(2)
except KeyboardInterrupt:
gpio.write(False)
gpio.close()
print("Beendet")
Mit [Strg]+[O] und [Strg]+[X] speicherst du das Programm und schließt den Editor. Beachte, dass bei Python die Einrückungen im Programm-Code notwendig sind. Dabei ist es egal, ob diese mit der TAB-Taste oder mit der Leertaste erzeugst. Es empfiehlt sich, dass du entweder einen einzelnen Tabulator oder zwei oder vier Leerzeichen pro Einrückungs-Ebene benutzt. Um das Programm auszuführen, gibst du im Terminal sudo python3 led.py ein.
So funktioniert das Programm: Die ersten Zeilen importieren die notwendigen Libraries und legen den Ausgangs-Pin fest. In einer Schleife schaltet gpio.write(True) die LED an und gpio.write(False) wieder aus. Die LED blinkt somit in einem Intervall von zwei Sekunden, bis du das Programm mit [Strg]+[C] abbrichst.
Bei der LED verbindest du die Anode mit Pin 16 und die Kathode über einen Widerstand mit Ground, also zum Beispiel mit Pin 34.
LED-Steuerung per Taster
Das zweite Beispiel geht etwas anders vor. Dabei soll die LED ausgehen, solange du den Taster gedrückt hältst. Das Fritzing-Diagramm zeigt den Aufbau der Schaltung. Der LED-Teil bleibt gleich. Beim Taster verbindest du ein Beinchen mit Ground und das andere mit Pin 13. Dazwischen schaltest du einen Widerstand mit 10 kΩ und verbindest die Plus-Bus-Stripe auf dem Breadboard mit Pin 1. Das ist die Spannungsversorgung mit 3,3 Volt. Der 10 kΩ-Widerstand zieht die Leitung standardmäßig auf 3V3 (Pullup-Widerstand). Ein Druck des Tasters zieht die Leitung gegen GND.
Die Grafik zeigt nochmals die Pin-Belegung des Dev Boards sowie die Angaben zu „Default funcion“ und „Device Name“.
Ein Breadboard ist im Prinzip eine Kunststoff-Steckplatine mit einem gleichmäßigen Rasterabstand von 0,1 Zoll oder 2,54 mm. Darauf befinden sich Federkontakte aus Metall, in die sich elektronische Bauteile einfach stecken und ohne Löten verbinden lassen. An den beiden Außenseiten des Breadboards befinden sich die Bus Stripes. Dabei handelt es sich um Kontaktreihen für die Spannungsversorgung, die durchgängig miteinander verbundenen sind. Sie sind mit durchgezogenen Linien markiert. Die Kontaktreihen, auf denen die eigentliche Schaltung aufgebaut wird, heißen Terminal Stripes. Sie sind in 5er-Gruppen miteinander verbunden, durch den Mittelsteg voneinander getrennt und mit Buchstaben A-E und F-J markiert.
Das Fritzing-Diagramm zeigt, wie du den Schalter in den bereits bestehenden Aufbau einbindest.
Dann erstellst du mit nano ein neues Programm namens ledbutton.py und gibst den entsprechenden Python-Code ein.
from periphery import GPIO
led = GPIO("/dev/gpiochip0", 0, "out") # Pin 16
button = GPIO("/dev/gpiochip0", 10, "in") # Pin 13
try:
while True:
led.write(button.read())
finally:
led.write(False)
led.close()
button.close()
Das Programm spricht die Pins anders an als das vorherige Beispiel. Hier ist die „Default function“ relevant. Pin 13 entspricht GPIO10 und Pin 16 entspricht GPIO0, wie der Abbildung zu entnehmen ist.
So funktioniert das Programm: Die While-Schleife fragt kontinuierlich den Status des Tasters ab und gibt das Ergebnis an die LED weiter. Sobald er gedrückt ist, erlischt die LED. Das ist nicht der beste und eleganteste Programmier-Stil, funktioniert aber. Der Button liefert eingehende Informationen an das Board, die LED empfängt ausgehende Befehle.
Andere Eingänge könnten alle möglichen Sensoren sein, Ausgänge zum Beispiel Displays oder ein Piezo-Summer. GPIO-Pins können nur wenig Strom liefern, so dass für leistungsfähigere Abnehmer Transistor-Schaltungen notwendig sind.
Adafruit Blinka und libgpiod funktionieren nichtDie Library Adafruit Blinka und die libgpiod-Bindings stellen für den Raspberry Pi eine komfortable und flexible Möglichkeit dar, die GPIO-Pins zu programmieren. Sie sind speziell auf Entwickler-Boards zugeschnitten und sollten grundsätzlich auch mit dem Dev Board Mini funktionieren. Das ist derzeit jedoch nicht der Fall. libgpiod liegt nicht als Package vor, sondern lässt sich über ein Skript installieren. Dieses Skript ist veraltet und offenbar fehlerhaft. Es ist gut möglich, dass es irgendwann auf den neuesten Stand gebracht wird und dann funktioniert. Bis dahin kannst du python-periphery nutzen. |