Mit dem MicroBit Manager können Programme für den micro:bit (oder einem dazu kompatiblen Mikrocontroller, z.B. dem Calliope) mit verschiedenen Programmeditoren bzw. IDEs entwickelt und dann mit einem Klick auf das Targetsystem hinunter geladen und dort ausgeführt werden. Während der Programmausführung ist ein interaktives Terminal-Fenster (Console, REPL) geöffnet, in welchem Fehlermeldungen und print()-Ausgaben erscheinen. Mit Ctrl+C kann das Programm abgebrochen werden und der Python-Interpreter zeigt den Prompt >>>. Hierauf kann der Benutzer Python-Befehle interaktiv ausführen lassen.
Mit dem MBM lässt sich zudem die Firmware des Mikrocontrollers flashen. Nach dem Flashen werden zudem einige nützliche Python Library-Module auf das Target kopiert (Unterstützung von zusätzlichen Sensoren, Motoren, Tutorials, usw.) enthält.
Für die Programmentwicklung verbindet man das Mikrocontroller-Board über die USB-Schnittstelle mit dem Entwicklungssystem. Es erscheint dann im Dateisystem des PC als ein neuer externer USB-Device mit einem Laufwerkbuchstaben (Windows) bzw. einem Laufwerknamen (Mac, Linux), ist aber auch als serielles Gerät (mit einem Com Port) ansprechbar. (Unter Windows-Versionen früher als 10 muss dazu ein mbed-Driver installiert werden, der von hier hinuntergeladen werden kann. Ab Windows 10 und unter Mac/Linux ist kein zusätzlicher Treiber nötig.)
Der MicroBit Manager ist in TigerJython integriert und benötigt keine Zusatzinstallationen. Als Standalone-Programm oder zur Integration in andere IDEs kann er von hier als Java-Applikation hinuntergeladen werden (inklusive Source). Alle Funktionen wählt man über Kommandozeilen-Parameter aus, die beim Aufruf ohne Parameter aufgelistet werden (java -jar MBM.jar).
Um den MBM in TigerJython zu aktivieren, wählt man unter Einstellungen | Bibliotheken | Roboter auswählen die Option micro:bit/Calliope. Es erscheint dann in der Taskleiste ein zusätzlicher schwarz-umrandeter Button und im Menü Tools werden die Optionen Remote Terminal, Hinunterladen/Ausführen, Modul hinunterladen, Flash Target frei geschaltet.
Die Source wird im Editorfenster von TigerJython geschrieben und gleich wie andere Pythonprogramme auf dem Entwicklungssystem abgespeichert. Da die Programmausführung nicht auf dem Entwicklungssystem, sondern auf dem Target erfolgt, wird zur Ausführung nicht der grüne, sondern der schwarz-umrandete Button geklickt oder die Option Hinunterladen/Ausführen gewählt. Vor dem Hinunterladen überprüft der in TigerJython eingebaute Python-Parser die Syntax und Fehler werden in benutzerfreundlicher Form direkt neben der Fehlerstelle im Editor angezeigt. Findet der Parser keine Fehler, so öffnet sich ein zusätzliches Terminal-Fenster (REPL), in dem die Kommunikation mit dem Target stattfindet. Diese umfasst folgende automatisch ablaufenden Schritte:
Alle print()-Ausgaben und Laufzeit-Fehlermeldungen werden im Terminal-Fenster ausgeschrieben und durch Eintippen von Ctrl+C kann die Programmausführung gestoppt werden. Nachher erscheint wieder der Prompt >>> des Python-Interpreters und Befehlszeilen können eingegeben und unmittelbar ausgeführt werden. Ctrl+D erzwingt einen Soft-Boot, der main.py neu startet.
Da beim Hinunterladen ein bereits laufendes automatisch Programm gestoppt wird, ist es erlaubt, nicht abbrechende Programme bzw. Endlosschleifen zu verwenden, wie dies bei der Microcontroller-Entwicklung in C und Assembler üblich ist. Diese sollten aber den Prozessor nicht zu stark belasten, da sonst das Abbrechen mit Ctrl+C misslingen kann (in engen Schleifen empfiehlt sich der Einbau von sleep(0.001)).
Zur Unterstützung strukturierter Programmierung können mit der Option Modul hinunterladen auch Python-Module ohne Namensänderung auf das Target-System kopiert und mit den üblichen import-Anweisungen eingebunden werden. Unglücklicherweise ist wegen des bescheidenen Speicherplatzes die Grösse der Programme auf einige kBytes beschränkt.
Nachdem ein Programm hinuntergeladen (und automatisch in main.py umbenannt) wurde, kann die USB-Verbindung zum Entwicklungssystem abgehängt werden. Jedesmal beim Anschluss einer 5V-Spannungsquelle (USB-Ladegerät, USB-Powerbank, usw.) wird das Programm main.py sofort wieder ausgeführt.
Hängt sich main.py auf oder lässt sich das Target wegen einer Software-Fehlmanipulation nicht mehr ansprechen, kann durch Flashen ein neues System aufgesetzt werden. Dabei werden auch alle Programmmodule gelöscht, sodass diese vom Entwicklungssystem wiederhergestellt werden müssen.
Der Python-Interpreter MicroPython ist keine vollständige Implementierung von Python 3.x, aber die meisten gewohnten Sprachelemente sind verfügbar. Die spezielle Hardware des Target wird über das Modul microbit bzw. calliope_mini unterstützt. Dazu importiert man dieses mit from microbit import * bzw. from calliope_mini import * (eine vollständige englischsprachige Dokumentation für den micro:bit (und kompatible) findet man hier) .
Als zusätzliches Feature können die Operationen des MBM auch mit einem Pythonprogramm aufgerufen werden, das in TigerJython läuft. Es stehen nach import mbm folgende Funktionen zur Verfügung:
Funktion | Aktion |
showFiles() |
schreibt alle Dateien aus, die sich auf dem Target befinden |
openTerminal() | öffnet ein Terminalfenster (REPL) und stellt die Verbindung mit dem Target her |
extract(filename) | kopiert die Datei filename vom Target unter dem gleichen Namen in das Verzeichnis, in dem sich das TigerJython-Programm befindet |
copy(filename) |
kopiert die Datei filename mit gleichbleibendem Namen auf das Target. Ein mit angegebener Pfadbezeichner wird abgeschnitten |
run(filename) | öffnet eine Terminalfenster (REPL) und kopiert die Datei filename auf das Target. Führt dort eine Umbenennung in main.py durch und führt das Programm aus. Ein mitangegebener Pfadbezeichner wird abgeschnitten |
runMain() | öffnet ein Terminalfenster (REPL) und führt main.py aus (falls vorhanden) |
flash() | installiert die Firmware mit einer internen Flash-Imagedatei |
flash(filename) | installiert die Firmware mit der angegebenen externen Flash-Imagedatei |
enableDataCapture(enable) | aktiviert/deaktiviert das Auffangen von Textzeilen im Terminalfenster. Die Zeilen werden in einem Textbuffer (Liste mit Strings) angefügt |
getDataLines() | gibt eine Liste aller Zeilen des Textbuffers zurück und löscht den Buffer |
isTerminalDisposed() |
gibt True zurück, falls das Terminalfenster nicht sichtbar ist (noch nicht geöffnet oder wieder geschlossen) |
Typische Beispielanwendung (Datenlogger): Mit extract(filename) werden die in einer Datei auf dem Target gespeicherten Daten zum PC transferiert und dort weiter verarbeitet.