Der BBC micro:bit – Teil 5: Programmierung mit MicroPython

In diesem Teil geht es um die Programmierung des BBC micro:bit in Python, genauer gesagt MicroPython, einem Subset von Python.

MicroPython für den micro:bit gibt es als Online-Editor und als Offline-Version, dem Mu-Editor, für alle gängigen Betriebssysteme. Ich empfehle dringend den Offline Editor zu verwenden. Der Online-Editor hat in der derzeitigen Version noch zu viele Einschränkungen, die einem das Arbeiten damit doch sehr vergraulen:

  • Es gibt keinen Syntax Check, jedes Programm kann als Hex-File auf den micro:bit geladen werde. Fehlermeldungen werden als Laufschrift auf der LED-Matrix angezeigt
  • Beim Speichern kann kein Zielname angegeben werden
  • Kein Code Auto-Vervollständigen

Besonders das Fehlen eines Syntax Checks ist eigentlich schon unverzeihlich. Der Syntax Check des Offline Mu Editors ist zwar auch nicht perfekt, aber besser als nichts.

Gegenüber den bisher vorgestellten Editoren fehlt dem Offline wie auch dem Offline Editor der Simulator und auch Bluetooth Funktionen werden nicht unterstützt. Letzteres liegt am begrenzten Speicher des micro:bit. Der Bluetooth Stack belegt von den 16kB RAM schon 12kB, das reicht nicht mehr für Python. Allerdings soll es wohl später einen micro:bit mit doppelten Speicher geben. Statt Bluetooth wird dafür das NRF51 Radio Protokoll sehr gut unterstützt. Damit können sich allerdings nur micro:bit untereinander unterhalten. Der Befehlsumfang ist durchaus als üppig zu bezeichnen. Entsprechend umfangreich ist auch die Dokumentation.

Einsteiger Beispiele

Zunächst einmal folgen hier die schon Einsteiger Beispiele, die schon bei den anderen Editoren vorgestellt wurden.

Hallo Welt

Der Klassiker der Programmierung ist das Hallo Welt Programm. Damit wird gezeigt wie einfach es ist, einen beliebigen Text auszugeben.

from microbit import *

display.scroll("Hallo, Welt!")

In Python bzw. MicroPython werden Bibliotheken mit der Befehlsfolge from import eingebunden. Werden nur bestimmte Funktionen einer Bibliothek benötigt, kann dies hinter import angegeben werden. Ein ‚*‘ bedeutet, importiere alle Funktionen.

Tastenabfrage

Das nächste Beispiel nutzt die beiden Tasten A und B um ein fröhliches (Taste A) bzw. trauriges (Taste B) Gesicht anzuzeigen.

from microbit import *

while True:
    if button_a.is_pressed():
        display.show(Image.HAPPY)
    elif button_b.is_pressed():
        display.show(Image.SAD)

display.clear()

In Python, bzw MicroPython gibt es keine Klammern um Blöcke zu umschließen. Es werden statt dessen Einrückungen verwendet. Alles was mit einem oder mehreren Tabs eingerückt wurde wird vom Python Interpreten als Block gesehen. So werden die beiden If Abfragen innerhalb der While ausgeführt. Die nicht eingerückte Befehlszeile display.clear() am Ende, befindet sich außerhalb der Schleife und würde nur aufgerufen werden, wenn die Schleife beendet würde. Hinter Bedingungen, die hinter den Befehlen While, if, for, folgen, ist immer ein Doppelpunkt erforderlich.

Beschleunigungssensor

Beim nächsten Beispiel handelt es sich um einen elektronischen Würfel, der den Beschleunigungssensor verwendet. Der funktioniert fast wie ein echter Würfel: wird der mcro:bit geschüttelt, generiert das Programm eine neue Zufallszahl und zeigt die Zahl auf der LED Matrix an.

from microbit import *
import random

while True:
    if accelerometer.was_gesture("shake"):
        display.show(str(random.randint(1, 6)))
    
display.clear()

Hier wird neben der micro:bit Bibliothek noch die random Bibliothek für die Zufallszahlen Erzeugung benötigt.

Fortgeschrittene Beispiele

Schneeflocken Generator

Rechtzeitig zur Weihnachtszeit ein Programm zur Erzeugen von Schneeflocken mittels Zufallsgenerator. Das Beispiel stammt von Geekfish

"""
Snowflakes are symmetrical, we should only have to create a 3x3 corner and rotate
End result might resemble a star-wars spaceship instead of snowball.
Equally seasonal imho...
"""
import random
from microbit import *

SIDE_SIZE = 3

BRIGHTNESS = {
    0: 0,
    1: 3,
    2: 6,
    3: 9,
}


def get_random_corner():
    return [[random.randint(0,3) for _ in range(SIDE_SIZE)] for _ in range(SIDE_SIZE)]


def get_flake():
    flake = list(get_random_corner())

    for row in flake:
        row += reversed(row[:-1])  # Middle column doesn't change

    for row in reversed(flake[:-1]):
        flake.append(row)

    return flake


def to_display(flake):
    for y, row in enumerate(flake):
        for x, col in enumerate(row):
            display.set_pixel(x, y, BRIGHTNESS[col])


while True:
    flake = get_flake()
    to_display(flake)
    sleep(1000)

REPL Schnittstelle

Eine Besonderheit bei Python ist die REPL Schnittstelle. REPL bedeuted Read-Eval-Print-Loop. Damit kann interaktiv programmiert werden. Die Bedienung funktioniert ähnlich wie bei der Kommandozeile. Man kann Python-Befehle eingeben und diese werden direkt auf dem micro:bit ausgeführt.

Einfach auf das REPL Symbol klicken und man kann los programmieren.

repl

Fazit

Wer bereits Python kennt, wird sich mit MicroPython sehr schnell anfreunden können. Bis auf die fehlende Bluetooth Unterstützung ist die vorhandene Bibliotheksumfang sehr üppig. Dazu können auch noch andere Python Bibliotheken verwendet werden.

Sehr hilfreich ist auch die REPL Schnittstelle. Damit kann interaktiv programmiert werden.

Links

Die weiteren Teile der Serie:

4 Antworten auf „Der BBC micro:bit – Teil 5: Programmierung mit MicroPython“

  1. danke fürs aktuallisieren des Blogs! :-9 Bei dieser Gelegenheit möchte ich natürlich nicht verabsäumen, auch die besten Wünsche für das neue Jahr 2017 zu übermitteln ?

Kommentare sind geschlossen.