In diesem Tutorial möchte ich den Mikrocontroller BBC micro:bit vorstellen.
Der Mikrocontroller micro:bit wird von der britischen Firma British Broadcasting Corporation (kurz “BBC”) vertrieben. Auf dem kleinen Einplatinencomputer ist ein ARM CPU verbaut, welcher sich mit der Programmiersprache Python (“MicroPython”) programmiert werden.
Geschichte
Der Einplatinencomputer micro:bit wurde ab dem Jahr 2012 von der Firma BBC entwickelt. Neben der genannten Firma waren noch viele weitere Firmen, Institute an der Entwicklung beteiligt. In erster Linie sollte der micro:bit für die Schulen in Großbritannien dienen und Schüler im Alter von 11 bis 12 Jahre in die Welt der Informatik einführen. (Ähnliche Projekte gibt bzw. gab es schon den Niederlanden sowie in Island.)
Ab Oktober 2016 wurde die Weiterentwicklung und der Vertrieb an die gemeinnützige Stiftung Micro:bit Educatinoal Foundation übertragen. Seit dem ist der Mikrocontroller auch für Privatpersonen erhältlich.
Bezug
Den Mikrocontroller micro:bit kann man zbsp. auf eBay.de* für ca. 21 € inkl. Versandkosten erwerben. Den besten Preis inkl. Versandkosten erhält dieses Mal jedoch bei amazon.de*, dort zahlt man zzt. (21.02.2019) nur 18,99 €.
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
Es gibt für den BBC micro:bit einige Sets, welche durchaus einen Kauf Wert sind, hier wird für wenig Geld eine Grundausstattung aus Sensoren & Aktoren geboten und man hat alles auf einmal um sofort loszulegen.
Da ich bereits einiges an Sensoren & Aktoren habe benötige ich dieses Set nicht, jedoch werde ich mir ein BreakoutBoard zulegen, denn dieses macht das Abgreifen von Pins deutlich einfacher bzw. ermöglicht dieses erst.
Lieferumfang
Zum Lieferumfang meines micro:bit gehört, neben dem Mikrocontroller eine kleine Anleitung wie der Controller eingerichtet und betrieben werden kann und ein Blatt über generelle Informationen zu dem Controller in diversen Sprachen.
Technische Daten des micro:bit
- CPU
- ARM Cortex-M0
- 32Bit
- 16 MHz Taktfrequenz
- Speicher
- 256 KB Flash Speicher
- 16 KB SRAM
Der micro:bit verfügt über folgende zusätzliche Features:
- Bluetooth (4.0, Low Energy),
- 2 Tasten,
- 5 x 5 LED Matrix,
- Geesten Sensor,
- Micro USB Buchse,
- Batterie Sockel,
- Reset Taster,
- Stecksockel
Aufbau
Der micro:bit ist beidseitig bestückt, auf der Vorderseite sind eine 5×5 LED Matrix und 2 Taster zu finden, auf der Rückseite sind die Anschlüsse für USB und Batterie zu finden. Des Weiteren sind die Chips der Sensoren und der Prozessor dort zu finden.
Alles ist jeweils mit einem Text markiert.
Dokumentation
Eine ausführliche Dokumentation zum micro:bit mit vielen Beispielen findest du auf der Herstellerseite https://microbit.org/de/.
Auf dieser Seite findest du zusätzliche Informationen, wie du die verschiedenen Sensoren & Aktoren steuern kannst und einen Online Python Editor, du ohne ein zusätzliches Plugin auf deinem Rechner installieren, zu müssen sofort mit der Entwicklung loslegen kannst.
Installation
Damit der Controller mit dem Computer (Mac oder PC) verbunden werden kann, benötigt man ein USB-Kabel (Micro-USB Stecker auf USB Typ A Stecker). Dieses Kabel lag meinem Controller nicht dabei.
Wenn nun also den Controller mit dem Computer verbunden hat, so wird der Controller als zusätzliches Laufwerk eingebunden.
Auf dieses Laufwerk können wir dann den Code ablegen und nach einem Neustart des Controllers wird der Code ausgeführt.
Erster Start
Wenn man den Controller zum ersten Mal startet, so wird ein Beispielcode ausgeführt. Zuerst werden die Button “A” & “B” abgefragt und danach die Sensoren. Die entsprechenden Texte werden über die 5×5 LED Matrix angezeigt.
Programmieren
Der Mikrocontroller kann über verschiedene Entwicklungsumgebungen (kurz “IDE”) programmiert werden. Die meisten dieser IDE’s sind Webanwendungen, welche in einem Browser betrieben werden.
Open Roberta
Das Fraunhofer-Institut für Intelligente Analyse- und Informationssysteme hat mit der Software Open Roberta eine Entwicklungsumgebung ähnlich wie ArduBlock geschaffen. Um das “Lab” nutzen zu können muss man sich nicht anmelden, somit kann man die Adresse https://lab.open-roberta.org/ direkt öffnen und einen Mikrocontroller wählen.
Mit der Software “Open Roberta” lässt sich einfach per Drag’n Drop die Befehle in Form von Bausteinen zusammensetzen und daraus entsteht dann der Quellcode für den Mikrocontroller micro:bit.
Zusätzlich gibt es eine gute Liste mit Beispielen für den micro:bit.
Es ist somit für den Einsteiger und Programmieranfänger sehr schnell möglich, die ersten kleinen Projekte mit dem micro:bit zu erstellen. (Für größere Projekte werden zusätzliche Erweiterungskarten benötigt.)
micro:bit Editor
Auf der Herstellerseite des micro:bit findet man 2 Editoren, einmal den MakeCode für den Anfänger und einmal für den erfahrenen Programmierer, einen Editor in der Programmiersprache MicroPython.
MakeCode
Der Editor MakeCode ist ähnlich wie der Open Roberta & ArduBlock ein visueller Editor. Der Vorteil ist jedoch, dass der Editor einem im Browser gleich das Ergebnis anzeigt. Somit kann man auch, ohne den Code auf den Mikrocontroller zu laden, sich “on the fly” sein Output anschauen.
Auf der Oberfläche befindet sich mittig ein Schalter “Block / Javascript”, wenn man diesen klickt, wechselt die Ansicht auf JavaScript und man kann mit der Skriptsprache JavaScript programmieren.
Den Code kann man über die Tastatur eintippen oder aber auch Codeschnipsel per Drag’n Drop einfügen.
Micropython Editor
In dem recht spartanisch aufgebauten Editor programmiert man mit der Programmiersprache MicroPython.
Wenn man diesen Editor öffnet, wird bereits ein kleines Beispiel angezeigt. Wie bei fast jeder Programmiersprache üblich ist es “Hello World!”.
Es gibt hier keine Vorschau, jedoch eine kleine Unterstützung, wenn man auf die Schaltfläche “Snippets” klickt, erhält man eine kleine Liste an Befehlen und man wird nach einer Auswahl von einem Befehl, durch das Tool angeleitet diesen korrekt zu befüllen.
Fehlerbehandlung
Was jedoch fehlt, ist eine Funktion, um den Code auf Fehler zu prüfen. Fehler werden auf dem micro:bit in Laufschrift angezeigt.
Wenn wir also folgenden kleinen Code auf den micro:bit spielen.
x = 1 y = a print(x+y)
Dann erhalten wir eine Fehlermeldung, dass der Bezeichner “a” nicht bekannt ist.
Bei kleinen Projekten ist das noch relativ überschaubar, jedoch bei größeren kann dieses in ein “Trial-and-Error” ausarten, was doch sehr frustrierend sein kann.
Aufspielen des eigenes Quellcodes
Wenn man in dem Editor die Schaltfläche “Download” betätigt, so wird einem die Datei “microbit.hex” zum Download angeboten. Diese Datei wird auf den micro:bit über den Explorer des Betriebssystems auf das Laufwerk “microbit” kopiert.
Nachdem dieses erledigt ist, muss unter Umständen der Mikrocontroller neu gestartet werden. Dieser Neustart wird durchgeführt, wenn wir das USB-Kabel einmal entfernen und wieder hineinstecken.
Beispiele
Die nachfolgenden Beispiele programmiere ich in dem Online Tool “Python Editor von micro:bit” von dem Hersteller micro:bit. Eine ausführliche Anleitung zu den Funktionen des micro:bit findet sich unter https://microbit-micropython.readthedocs.io/en.
Unterschiede von MicroPython & Python3
MicroPython enthält nicht alle Funktionen der Programmiersprache Python.
Bibliotheken
Gegenüber von Python3 enthält MicroPython nicht alle bzw. nur wenige Standardbibliotheken. Dieses ist für Mikrocontroller besonders wichtig, denn hier kommt es auf den Speicherverbrauch an. Wenn man also eine bestimmte Bibliothek in seinem Code verwenden möchte oder muss, so muss man sich diese über ein Import Befehl hinzufügen.
GarbageCollection
Jede höherwertige Programmiersprache hat einen GarbageCollector. Diese Funktion dient dazu, alte, nicht mehr benötigte (also referenzierte) Objekte aus dem Speicher zu entfernen. Dieses kann MicroPython nicht und der Entwickler muss sich darum selber kümmern.
Eine ausführliche Liste der unterschiede findet sich auf dem GitHub Repository von MicroPython.
Aufbau des Quellcodes
Zunächst möchte ich den Aufbau des Quellcodes erläutern. Da Python eine Skriptsprache ist, wird der Code von “oben” nach unten ausgeführt.
Zunächst müssen wir unsere Bibliothek in das Projekt importieren.
from microbit import *
Damit holen wir uns die Funktionen und Objekte damit wir den microbit programmieren können.
Danach wird die Logik implementiert, wir nutzen hier eine While Schleife welche als Parameter den Wert TRUE erhält.
while True: //do something
Somit haben wir uns eine Endlosschleife erzeugt. Es ist auf die korrekte Einrücktiefe zu achten, damit der Code auch in der Schleife ausgeführt wird. Sollten wir den Code nicht in einer Endlosschleife ausführen so wird dieser nur einmal ausgeführt, diesen Umstand kann man nutzen wenn man Bsp. eine Grafik auf der LED Matrix anzeigen möchte. Wenn man jedoch eine Benutzerinteraktion abfragen möchte, so benötigt man die Endlosschleife.
# Add your Python code here. E.g. from microbit import * while True: //do something
Tasten
In diesem Beispiel möchte ich nun zeigen wie man das Drücken einer Taste auswerten und daraus eine Aktion generieren kann.
Wenn der Benutzer auf die Taste “A” klickt, so wird auf der LED Matrix der Buchstabe “A” ausgegeben, wenn dieser jedoch die Taste “B” drückt, dann der Buchstabe “B”. Drückt der Benutzer keiner der beiden Tasten, so passiert nichts.
# Add your Python code here. E.g. from microbit import * while True: if button_a.is_pressed(): display.scroll("A") elif button_b.is_pressed(): display.scroll("B")
Video
5 x 5 LED Matrix
Die 5×5 LED Matrix des micro:bit kann man mit nur einer Zeile Code bedienen.
display.scroll("A")
Ein großer Vorteil beim Verwenden des Online Editors und der damit verbundenen Bibliothek “microbit” ist das für jeden Sensor & Aktor bereits ein Objekt existiert. In diesem Fall nutzen wir das Objekt “display“.
Das “display” Objekt hat einige Funktionen, damit man auf der LED Matrix Texte & einfache Grafiken anzeigen kann.
Texte anzeigen
Möchte man Texte auf der LED Matrix anzeigen, so verwendet man die Funktion ‘scroll(“<TEXT>”)’. Der Text wird dabei von rechts nach links als Lauftext angezeigt.
# Add your Python code here. E.g. from microbit import * while True: display.scroll("Dies ist ein langer Text.")
Bilder anzeigen
Der Bibliothek “microbit” liegen einige Bilder bei.
Eine komplette Liste aller Bilder findest du unter https://microbit-micropython.readthedocs.io/en/latest/tutorials/images.html.
einzelne Pixel steuern
Möchte man nur ein einzelnes Pixel (quasi eine LED) aufleuchten lassen, so nutzt man die Funktion ‘set_pixel(x_pos, y_pos, brightness)’. Dieser Funktion wird die X & Y Koordinate und die Helligkeit (min. 0 und max. 9) übergeben.
# Add your Python code here. E.g. from microbit import * while True: display.set_pixel(0, 1, 4)
X & Y Koordinaten der LED Matrix
Das Koordinatensystem der LED Matrix beginnt mit dem Index “0” und endet somit mit “4”. Die Koordinate X=0 und Y=0 ist dabei oben links.
Geesten Sensor
Mit dem Gesten-Sensor kann man die Lage des Mikrocontrollers erkennen und welche G-Kräfte auf diesen wirken. Die Lage des Mikrocontrollers kann man als X & Y Koordinate auslesen oder aber auch als Text.
Wenn man den Text verarbeiten möchte gibt es folgende mögliche Werte
- up,
- down,
- left,
- right,
- face_up,
- face_down,
- freefall,
- 3,
- 6g,
- 8g und
- shake
Wobei die Werte “freefall”, “3g”, “6g” und “8g” schwierig zu erreichen sind.
steuern eines Pixels auf der LED Matrix
An einem kleinen Beispiel möchte ich zeigen wie man die Werte des Gesten-Sensors ausliest und damit eine LED auf der LED Matrix steuert.
Es wird geprüft, ob die letzte ausgeführte Geste eine Richtung zu einer bestimmten Seite war (oben, unten, rechts, links) wenn dieses so ist, dann soll der Wert für die Koordinate manipuliert worden.
Zum Schluss wird an der Koordinate auf der LED Matrix das Pixel aktiviert und eine kleine Pause von 35ms. durchgeführt. Danach beginnt die Schleife von vorne und alle Pixel werden deaktiviert und die Daten werden wieder ausgelesen.
from microbit import * x = 2 y = 2 while True: display.clear() accelerometer.current_gesture() if accelerometer.was_gesture("up") and y < 4: y = y + 1 elif accelerometer.was_gesture("down") and y > 0: y = y - 1 elif accelerometer.was_gesture("left") and x < 4: x = x + 1 elif accelerometer.was_gesture("right") and x > 0: x = x - 1 display.set_pixel(x, y, 4) sleep(35);
Video
Bluetooth
Leider gibt es bisher keine implementation von Bluetooth in MicroPython. Daher werde ich in dem folgenden Beispiel auf die visuelle Darstellung von Code mit “MakeCode” zurückgreifen (müssen).
Um die Bluetoothfunktionen anzuzeigen, müssen wir zunächst das Paket in die “IDE” einbinden. Dieses machen wir, indem wir über das Menü “Fortgeschritten” > “Erweiterungen” navigieren. Auf der neuen Seite wählen wir dann die Kachel “Bluetooth” aus. Es wird eine Meldung angezeigt welche aufzeigt, dass, das bereits existierende Paket “radio” nicht kompatibel mit dem neuen Bluetooth ist, somit müssen wir bestätigen, dass dieses zunächst entfernt wird. Danach haben wir die Bluetoothfunktion zur Verfügung.
Pairing von Geräten
Damit die Bluetoothgeräte untereinander kommunizieren können müssen diese gekoppelt werden. Diesen Vorgang nennt man “Pairing”. Für das Pairing muss man die Tasten A & B gedrückt halten, zusätzlich muss man danach den Reset Taster kurz betätigen. (Die Tasten A & B weiter gedrückt halten.) Als Bestätigung wird dann die LED Matrix aufgefüllt, nun muss gewartet werden bis alle LED aktiviert sind, dann müssen die Tasten A & B wieder losgelassen werden.
Mit einem Handy oder Tablet (diese müssen BLE unterstützen) kann nun nach einem Bluetoothgerät gesucht werden. In meinem Fall wurde der micro:bit unter der Bezeichnung “BBC micro:bit [popeg]” gefunden.
AndroidApp zum aufbauen der Verbindung
Nachdem wir die Geräte gekoppelt haben, können wir nun eine Verbindung aufbauen, dazu nutze ich die App “micro:bit Blue”.
Wenn die App gestartet wird, muss zunächst mit der Schaltfläche “FIND PAIRED BBC MICRO:BITS” nach Geräten gesucht werden. In meinem Fall wird der “BBC micro:bit (BONDED)” gefunden.
Mit einem “klick” auf den Eintrag wird dann die Verbindung aufgebaut.
einfaches Beispiel mit Bluetooth
Als Erstes möchte ich ein ganz einfaches Beispiel mit Bluetooth zeigen. Es soll auf der LED Matrix ein glückliches Smiley angezeigt werden, wenn eine Verbindung aufgebaut wurde, andernfalls ein schlechtes.
Wenn also nun mit AndroidApp “micro:bit Blue” eine Verbindung aufgebaut wurde, dann ändert sich das Gesicht “schlecht” auf “glücklich” bzw. wenn die Verbindung unterbrochen wird von “glücklich” auf “schlecht”.
Auf Seite 2 geht es weiter mit den Erweiterungskarten zu dem micro:bit.