Programmieren mit dem Coral AI Dev Board Mini

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.

In diesem Blog erscheint nach und nach eine Serie von Artikeln, die sich mit dem Coral Dev Board Mini beschäftigen und dir zeigen, wie du damit umgehst und was du alles damit machen kannst.

Teil 1: Coral Dev Board Mini: Künstliche Intelligenz für den Hobbykeller

Teil 2: Das Coral AI Dev Board Mini im Überblick

Teil 3: Das Coral Dev Board Mini anschließen und loslegen

Teil 4: Mendel Linux: Das Betriebssystem des Coral AI Dev Board Mini

Teil 5: Kamera an das Coral AI Dev Board Mini anschließen

Teil 6: Die Erweiterungsleiste des Coral Dev Board Mini

Teil 7: Programmieren mit dem Coral AI Dev Board Mini

Teil 8: Bilderkennung mit dem Dev Board Mini und der Coral Camera

Teil 9: Spracherkennung mit dem Coral Dev Board Mini

Teil 10: Gestenerkennung mit dem Coral Dev Board Mini

Teil 11: KI-Modelle für das Coral AI Dev Board Mini erweitern

Extra: Mit dem Edge TPU-Compiler Modelle für das Coral Dev Board Mini erstellen

 

 

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.

 

Das Terminal des Coral Dev Board Mini

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.

 

Die GPIO-Leiste des Coral Dev Board Mini

Hier siehst du nochmals die Anordnung der Pins auf dem Dev Board Mini, damit du die Schaltungen korrekt aufbauen kannst.

 

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.

 

 So verbindest du bei der LED die Anode mit Pin 16

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 Pin-Belegung des Coral Dev Board Mini

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.

 

 Hier siehst du den vollständigen Aufbau und Anschluss des Beispiel-Projekts

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.

 

 Aufbau und Anschluss des Beispiel-Projekts mit LED und Taster

Das Foto zeigt den vollständigen Aufbau und Anschluss des Beispiel-Projekts mit LED und Taster.

 

 

 

Adafruit Blinka und libgpiod funktionieren nicht

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

AiCoral dev board miniCoral.aiGoogle aiKiKünstliche intelligenz

Kommentar hinterlassen

Alle Kommentare werden von einem Moderator vor der Veröffentlichung überprüft