Da die Verfügbarkeit des BBC micro:bit jetzt offen für Jedermann und nicht mehr rein auf zwölfjährige Schüler in UK beschränkt ist, wird es höchste Zeit, das Board einmal genauer zu betrachten und auch seine Programmierung etwas detaillierter auszuloten.

Was ist das denn?
Beim BBC micro:bit handelt es sich mit 52 x 42 mm um ein wirklich kleines Mikrocontroller-Board für Spaß & Spiel sowie für Applikationen mit Verbindung zu anderen (Mobil-)Geräten. Auf der Bestückungsseite des Boards erkennt man einen Mikrocontroller des Typs nRF51822 von Nordic – ein ARM Cortex-M0 mit integriertem BLE (Bluetooth Low Energy),  3D-Accelerometer MMA8652 von NXP, 3D-Magnetometer MAG3110 ebenfalls von NXP sowie einen Erweiterungssteckplatz. Auf der anderen Seite befindet sich eine Matrix aus 5x5 LEDs und zwei Taster. Als ARM-mbed-kompatibles Device (implementiert mit einer zweiten ARM Cortex-M0 MCU, Kinetis KL26 von NXP) kann das Board nicht nur per drag&drop via USB programmiert werden, sondern dank BLE auch per Funk bzw. OTA (Over The Air).



Die grafische Gestaltung des Boards zielt natürlich auf die Vorlieben von Kindern ab und hat daher annähernd die Form eines Gesichts (fungieren die Taster oder das micro:bit-Logo als Augen) und es gibt es in unterschiedlichen Farben. Außerdem spielen jetzt Sicherheitsaspekte eine stärkere Rolle, weshalb es nun mit Batterien (zwei AAA-Zellen) statt einer Knopfzelle auf dem Board versorgt wird. Selbstverständlich kann das Board aber auch seinen Strom via USB vom angeschlossenen Gerät beziehen.

Da das wichtigste Ziel der BBC war, Kinder zur Programmierung von Software zu motivieren, wird micro:bit von Online-Programmier-Tools unterstützt, die sich an Anfänger richten. Momentan werden vier unterschiedliche Programmiersprachen unterstützt: von Block Editor sowie TouchDevelop von Microsoft, von einem visuellen JavaScript-Editor von Code Kingdom und von MicroPython. Fortgeschrittene User können das Board auch direkt in C/C++ der ARM-mbed-Entwicklungsumgebung programmieren.

Was kann man damit machen?
Jenseits scrollender Text-Messages und anderen optischen Effekten auf der LED-Matrix eignet sich micro:bit natürlich auch für viele andere Applikationen. Dank der Batterieversorgung und integriertem BLE pack eignet sich das Board besonders gut für IoT-Projekte, Wearables oder sonstige mobile Anwendungen. Mit den vorhandenen Sensoren ist eine Orientierung und Positionsbestimmung möglich, wodurch man damit sehr gut Game-Controller oder Fernsteuerungen für andere Geräte realisieren kann. Das Board eignet sich dank Erweiterungssteckplatz natürlich auch überall da, wo irgendetwas mit Intelligenz versehen werden soll, wie etwa bei Robotern oder Fahrzeugen.

Der abgewinkelte Erweiterungsanschluss stellt 19 GPIO-Pins der Haupt-MCU plus Stromversorgung zur Verfügung. Man kann also Taster anschließen oder die sechs analogen Eingänge nutzen. Über serielle Schnittstellen wie SPI und I²C sind Accelerometer und Magnetometer angekoppelt. Darüber hinaus gibt es fünf größere Löcher, in die man Bananenstecker hineinstecken oder an die man Krokodilklemmen anklipsen kann, um auf die Schnelle Verbindung zu Steckbrettern oder andere Hardware zu schaffen.

Interessanterweise ist die 5x5-LED-Matrix elektrisch als 3x9-Matrix realisiert. Der Grund für diese Anordnung und die Verschwendung von zwei Pins ist, dass man die Fähigkeit der LEDs als Mini-Solarzellen zu fungieren, zur Berührungserkennung ausnutzen wollte. Mit dieser Matrix ist es möglich, eine LED leuchten zu lassen und gleichzeitig die Beleuchtung der anderen LEDs zu erfassen.

micro:bit-Programmierung
Will man loslegen, geht man einfach zu dieser Website und klickt auf „Create Code“ oder – wenn man schon einige Scripts erstellt hat – klickt auf den Link „My scripts“ oben auf dieser Seite. Zuvor muss man sich nicht einmal registrieren oder einen Account erstellen, sondern man kann gleich mit der Programmierung anfangen. Die eigenen Scripts, wie sich die Programme hier nennen, werden direkt in der Cloud gespeichert. Solange man die Cookies im Browser nicht löscht, hat man auch später noch Zugriff darauf. Man kann die Scripts natürlich auch auf dem eigenen Computer sichern oder auch einem anderen Computer importieren. Und wenn man etwas kreiert hat, das man glaubt vorzeigen zu können, kann man dieses Script recht einfach sharen und veröffentlichen.

Wie schon erwähnt, gibt es mehr als ein Programmierwerkzeug. Alle sind sie „online“: Block Editor, TouchDevelop, JavaScript, MicroPython und mbed. In der Theorie kann man mit allen die gleichen Aufgaben erledigen, aber die Praxis schränkt das dann doch ein. Dennoch arbeiten alle Tools ähnlich: man erstellt ein Script oder Programm, klickt auf „Compile“ und erstellt so eine HEX-Datei, die man dann per drag&drop auf dem Massenspeicher von micro:bit ablegt (wenn das Board an einen PC angeschlossen ist, versteht sich). Das Board bootet anschließend neu und führt das neue Script aus.

Block Editor
Der Block Editor von Microsoft ist ein grafisches Programmier-Tool mit Ähnlichkeiten zu Scratch, bei dem man per drag&drop Programm-Konstrukt auf eine Arbeitsfläche schiebt und dann die Details wie variable Namen und Werte von Konstanten einträgt. Man kann die Konstrukte nicht nach Gutdünken verwenden, was syntaktisch korrekte Programme erzwingt. Dieser Starrheit ist durchaus hilfreich, denn Programmierer können bekanntlich ein Chaos mit den Algorithmen anrichten, die sie implementieren wollen. Block Editor ist aber kein wirkliches Lern-Tool, sondern verhindert lediglich Syntaxfehler.



Mit diesem Tool ist wirklich schnelle Programmierung möglich, was wohl an der Drag&drop-Technik liegt. Das fertige Programm kann dann schnell auf einem virtuellen micro:bit getestet werden. Richtige Debugging-Unterstützung fehlt allerdings.

TouchDevelop
Auch dieses Tool ist von Microsoft. TouchDevelop ähnelt Block Editor darin, dass auch hier Syntaxfehler vermieden werden, indem vorgefertigte Konstrukte angeboten werden. Der Unterschied liegt darin, dass hier der Programmcode als Test vorliegt. Es handelt sich also eher um ein textbasiertes Tool – in meinen Augen aber um ein frustierendes Werkzeug, da es so tut, als hätte man die volle Kontrolle, obwohl man dauernd auf das Drag&drop-Menü angewiesen ist. Wie bei Block Editor auch kann der Code sehr schnell auf einem virtuellen micro:bit ausprobiert werden und beim Thema Debugging gibt es ebenfalls Fehlanzeige.



Für mich war TouchDevelop mühsam und es bremste mich aus.

JavaScript
Der JavaScript-Editor stammt von Code Kingdom. Dieser Editor verfügt über eine interessante Funktion zur Code-Abstraktion. Mit einem Slider unten kann man einstellen, wieviele Code-Details angezeigt werden. In der höchsten Abstraktionsstufe (Slider ganz links) arbeitet die Sache ähnlich wie Block Editor voll grafisch, doch wenn man den Slider nach rechts verschiebt, kann man richtige Java-Instruktionen eintippen. Wenn man schon über Programmiererfahrung verfügt, wird man Letzteres bevorzugen, da zusätzlich auch copy&paste unterstützt wird, was die Sache sehr beschleunigt. Auch hier gibt es wieder einen Simulator zum Test des erstellten Codes.



Zunächst hatte ich Compiler-Probleme und das erstellte Programm ließ sich nicht herunterladen. Nach einem Neustart des Browsers klappte es dann.

MicroPython
Im Prinzip ist die Möglichkeit der Programmierung des micro:bit in MicroPython eine tolle Sache, doch leider ist diese Implementierung eher enttäuschend. Der Grund hierfür liegt am Editor und der Notwendigkeit von Python bez. Einrückungen (was ich nicht leiden kann). Ich fand es schwierig, ein Python-Script zum Funktionieren zu bringen, da der Editor irgendwie mit Tabs und „end-of-line“-Zeichen oder sonst irgendwo seine Probleme hat. Erst wenn man das Programm auf dem Board ausführt, sieht man z. B. eine Fehlermeldung langsam über den Bildschirm scrollen wie etwa 'line 11: indentation error blah, blah, blah'. Aber die Tabs waren wirklich da, verdammt! Bei mir war es nötig, alle Tabs in jeder Zeile jedes Mal neu einzugeben, um eine funktionierende HE-Datei zu erhalten. Copy&paste klappt zwar, sorgt aber auch oft für Chaos. Richtig frustrierend das!

Bei MicroPython gibt es keinen Simulator.



Für mich besteht der einzig positive Aspekt darin, dass die Compilation und der Download sehr viel schneller als bei anderen Tools funktioniert. Und wenn man sich durch die detaillierte Help-Dokumentation arbeitet, kann man gut lernen, wie man mit MicroPython programmiert. Laut Doku gibt es viele verfügbare Module, mit denen alle Funktionen des Boards genutzt werden. Es wird sogar auf einen Offline-Programmer für micro:bit mit der Bezeichnung uFlash (micro-flash) verlinkt, dank dem man Projekte in MicroPython mit einem Editor der eigenen Wahl realisieren kann. Letzteres macht MicroPython dann doch zu einer Option, die man berücksichtigen sollte.

mbed
Zum Schluss noch das gute, alte mbed for micro:bit direkt von ARM. Dieses Online Programmier-Tool setzt Programmiererfahrung voraus und erlaubt die Programmierung in C/C++. Aber auch hier gilt: Kein Simulator und auch kein Debugger. Aber immerhin eine ordentliche Programmierumgebung mit richtigem Editor. Kein Spielzeug also. Damit kann man also „richtige Applikationen“ halbwegs professionell entwickeln. Hinzu kommt eine umfangreiche und gut dokumentierte Library von der Lancaster University, die Zugriff auf alle Features von micro:bit gestattet. Insgesamt also ein wirklich überzeugendes Stück Software. Es können auch mbed-Libraries anderer Leute hinzugefügt werden, um neue Funktionen in eigenen Projekten zu verwenden. Noch besser: Mit mbed kann man auch offline arbeiten und damit auch einen richtigen Debugger einsetzen. Segger, der Hersteller der J-Link-Pods, stellt eine spezielle Firmware für micro:bit zur Verfügung, die dann auch Breakpoints und einen Einzelschrittmodus erlaubt.

Die mbed-Website ist sowieso der Ort für Firmware-Updates (bislang wurden aber noch keine neuen Versionen veröffentlicht) und für detaillierte technische Informationen zum Board.

Um mit mbed für micro:bit loszulegen, muss man lediglich die HTML-Datei auf seinem Massenspeicher doppelklicken. Dies führt zur mbed-Website, wo man sich einloggen oder einen Account anlegen kann, falls man noch keinen hat. Anschließend ist micro:bit als eine der eigenen Plattformen verfügbar (als Neuling die einzige) und man kann sofort damit arbeiten.

Bluetooth & OTA
Die Online-Programmier-Tools für micro:bit können auch auf Mobilgeräten genutzt werden, was wohl besonders für die ganz junge Generation attraktiv ist, die ohne Smartphone fast nicht mehr atmen kann. micro:bit ist ja mit BLE ausgestattet und es gibt eine App von Samsung für das Laden eines Programms auf das Board per Funk bzw. OTA. Hierzu muss man natürlich zuvor das Board mit dem Mobilgerät „pairen“. Diese Prozedur benötigt mehrere Schritte und ist für den, der so etwas vielleicht noch nie gemacht hat, nicht ganz trivial.

Man startet die App und geht auf „Connections“, tappt ‘Pair a new micro:bit’ und folgt den Anweisungen. Um micro:bit in den Pairing-Modus zu bringen, muss man die beiden Taster A und B drücken und dann auch noch den Reset-Taster auf der anderen Seite des Boards. Dann wird eine Meldung ausgegeben und ein LED-Muster leuchtet auf. Man gibt dann dieses Muster in der App ein, indem man die entsprechenden Felder aktiviert und tappt dann auf ‘Next’. Nachdem man die Anweisungen dann wirklich gelesen hat, kann man auf ‘Pair’ tappen. Jetzt wird es etwas „tricky“:  Auf dem micro:bit erscheint ein sechsstelliger Code und zwar Zeichen für Zeichen. Diese muss man dann in der App eingeben. Leider erscheinen die Zeichen sehr schnell hintereinander und man vertut sich daher leicht. Der Code erscheint aber nochmals, sodass man sich gegebenenfalls korrigieren kann. Es ist aber wohl sinnvoll, hier jemand um Unterstützung zu bitten, denn zu zweit geht das besser. Einer liest die Anzeige und sagt die Zeichen auf und der Andere tippt. Wenn der Code richtig eingegeben ist, fordert micro:bit zur Betätigung von Taster A auf und dann wird ein Haken angezeigt. Laut Anleitung muss das Board jetzt resettet werden, doch es bootet wohl auch automatisch neu.

Der nächste Schritt ist das Ausprobieren der OTA-Funktion. Die App enthält drei Beispiel-Programme zum Testen. Ich habe es mit ‘find my phone sample’ probiert und es klappte auf Anhieb.



OTA ist mit etwa einer Minute vielleicht nicht gerade schnell, aber die Programmierung funktioniert. Die Sache hatte bloß einen Schönheitsfehler: Das Programm selbst funktionierte nicht mit meinem Smartphone. Ein Druck auf Taster A, wie vom Pfeil auf dem Display des micro:bit intendiert, hatte keinerlei Auswirkungen. Vielleicht war mein Smartphone nicht richtig konfiguriert? Keine Ahnung. Also probierte ich es mit dem ‘selfie remote sample’. Jetzt mit dem Ergebnis, eines nicht sehr hilfreichen Fehlers (not) GATT. Nach Schließen dieser App und Löschen via Android Applikation Manager und neuem Aufspielen erhielt ich dann doch Verbindung zum Beispiel-Programm auf dem micro:bit. Wieder zeigte das Display des micro:bit einen Pfeil, aber jetzt als Sequenz: Zunächst A drücken, dann B und dann beide. Aber auf meinem Smartphone tat sich immer noch nichts. Und mit der Kamera im Selfie-Modus konnte ich keine Bilder mehr aufnehmen. Das Beenden der Samsung-App machte keinen Unterschied. Kann an meinem Samsung-Gerät liegen, aber enttäuschend ist es doch.



Zurück in der App tappte ich nach Verbindung mit micro:bit ‘Create code’. Dies führte mich zur Website von micro:bit, die gleiche wie zuvor. Ich erstellte ein einfaches Programm in Block Editor und tappte ‘Play’. Wieder kein Effekt, diesmal weil der Simulator nicht angezeigt wurde. Ein Typ auf „Download“ ließ diesen Button aktiv werden, aber das war auch schon alles. Nichts wurde aufs Board geladen. Alles still. Auch die App half nicht weiter, und als ich versuchte, meine Scripte der Website zu finden, klappte nichtmal das. Genauer: Mein Script war schon da, aber leer. Ich probierte es nochmals: Script neu erstellen und Download, aber gleiches Resultat. An diesem Punkt gab ich auf.

Fazit
Auch wenn micro:bit zu Unterrichtszwecken gestartet wurde, bekommt das Board doch mehr und mehr professionelle Aufmerksamkeit. Für die Industrie ist es schlicht ein einfaches, aber leistungsfähiges und preiswertes Board, irgendwie angesiedelt zwischen Arduino und Raspberry Pi.

Auch wenn das Board von einigen Tools für Anfänger unterstützt wird, fand ich diese doch arg begrenzt und nicht gerade hilfreich. Da ich schon viel im Bereich Embedded gemacht habe und über größere Erfahrung verfüge, ziehe ich „richtige“ IDEs vor. Aber meine Haltung ist eine persönliche und nicht allgemeingültig. Dennoch empfehle ich so schnell wie möglich auf mbed zu setzen, um viel aus dem Board heraus zu holen. Dank der exzellenten Library der Lancaster University ist das recht einfach. Python-Fans finden vielleicht doch ihr Glück bei MicroPython.

Die Bluetooth-Fähigkeiten von micro:bit funktionieren – leider nur teilweise. Für ein System, das für eine Million ungeduldiger Kinder geschaffen wurde, ist das nicht wirklich prickelnd.