Hardware-Unterstützung Python auf Mikrocontrollern

Die Anfänge von MicroPython

Ebenso wie C und C++ wurde auch Python ursprünglich zur Ausführung auf größeren Computern entwickelt. Infolgedessen erforderte die Sprache zu viele Ressourcen, um zur Programmierung von Mikrocontrollern verwendet zu werden. Aus diesem Grund entwickelte der australische Programmierer und Physiker Damien George eine Python-Version mit der Bezeichnung Micro­Python, die auch mit den beschränkteren Ressourcen eines Mikrocontrollers ausgeführt werden konnte. Arduino-Entwicklungskarten waren frühe Anwendungsziele für MicroPython.

Die interaktive Natur von MicroPython beruht auf ihrer Befehlsschnittstelle. Diese wird formell als das REPL-Fenster (Read-Eval-Print-Loop) bezeichnet und üblicherweise über eine serielle Verbindung betrieben, über die ein Host-PC mit einer Mikrocontroller-Entwicklungskarte verbunden ist. Die REPL-Schnittstelle ähnelt sehr stark den Befehls­zeilenschnittstellen von Basic aus den 1970er- und 1980er-Jahren. Sie akzeptiert Benutzereingaben (Einzelausdrücke oder -befehle), wertet sie aus und gibt anschließend entweder über das REPL-Fenster Ergebnisse an den Benutzer zurück oder führt den in die Aussage eingebetteten Befehl aus.

Mit der REPL-Schnittstelle kann eine Variable abgefragt, eine I/O-Leitung umgeschaltet oder eine Zeichenfolge an einen angeschlossenen Peripheriebaustein gesendet werden. Die Zeile wird interpretiert und umgehend ausgeführt, sobald die Eingabetaste gedrückt wird. Hierin liegt die Natur einer interpretierten Programmiersprache.

Die Funktion von MicroPython erleichtert die explorative Programmierung und Fehlersuche und stellt einen der Aspekte von MicroPython dar, der die Programmiersprache sowohl für Einsteiger als auch für erfahrene Programmierer benutzerfreundlich macht. Die REPL-Schnittstelle unterstützt kürzere Entwicklungszyklen im Vergleich zum klassischen, aus Bearbeiten, Compilieren, Herunterladen und Ausführen bestehenden Zyklus der Arduino-IDE. Selbst erfahrene Programmierer profitieren davon, interaktiv mit neuartigen Peripheriebausteinen experimentieren zu können, indem sie die REPL-Schnittstelle von MicroPython verwenden.

CircuitPython-Unterstützung für Entwicklungskarten

Jeder Mikrocontroller verfügt über eine einzigartige Zusammenstellung von Peripherieeinheiten. Für diese Peripheriebausteine sind unterstützende Bibliotheken erforderlich. Das gilt sowohl für die Arduino-IDE als auch für MicroPython. Zusätzlich gibt es zahlreiche Add-on-Peripheriekomponenten, z. B. den adressierbaren NeoPixel RGB-LED-Streifen 1655 von Adafruit, die ebenfalls die Unterstützung durch eine Bibliothek erfordern.

Für eine bessere Unterstützung hat Adafruit mit CircuitPython eine eigene Version von MicroPython entwickelt, um den speziellen Anforderungen verschiedener kostengünstiger Mikrocontroller-Entwicklungskarten des Unternehmens gerecht zu werden. Des Weiteren hat das Unternehmen viele Bibliotheken für Peripheriebausteine aus seiner riesigen Arduino-Sammlung in Bibliotheken für CircuitPython umgewandelt, wodurch bereits eine große und stetig wachsende Anzahl an Bibliotheken für Circuit­Python zur Verfügung steht.

Adafruit hat eine Reihe von Mikrocon­troller-Entwicklungskarten speziell zur Unterstützung von CircuitPython entwickelt. Hierzu zählen vier Karten mit dem SAMD21-Mikrocontroller von Microchip (ehemals Atmel) mit Cortex-M0-Kern und nativer USB-Unterstützung: eine Karte mit zehn adressierbaren, steuerbaren RGB-LEDs (Bild 1), ein Board mit analogen Ein-/Ausgängen, SPI, I2C, seriell und PWM (Bild 2), ein weiteres Board mit drei GPIOs und Eingang für ein Batteriemodul (Bild 3) sowie ein Board mit Lochraster für den Einbau von eigenen Peripheriebausteinen (Bild 4).

CircuitPython unterstützt jedoch nicht nur die Entwicklungskarten von Adafruit und die SAMD21-Mikrocontroller. Inzwischen gibt es auch Versionen von CircuitPython für andere Entwicklungskarten mit anderen Mikrocontrollern, so etwa die Entwicklungskarten 3406 Feather NRF52 von Adafruit und die nRF52-DK von Nordic Semiconductor, die beide auf dem nRF52832-Mikrocontroller von Nordic Semiconductor basieren. Des Weiteren wird auch die Entwicklungskarte nRF52840-DK von Nordic Semiconductor (Bild 5), die auf dem nRF52840-Mikrocontroller des Unternehmens basiert, von CircuitPython unterstützt. Beide Mikrocontroller, die sich auf diesen drei Karten befinden, bieten Bluetooth Low Energy (BLE) sowie die entsprechende Software-Unterstützung.

Entwickeln mit CircuitPython

Adafruit verfolgt den Ansatz, Circuit­Python auf die direkte Unterstützung der dafür konzipierten Entwicklungskarten zu optimieren. Verbindet man eine dieser Karten per USB mit einem Host-PC, wird die Karte als Laufwerk des PCs angezeigt. Im Stammverzeichnis dieses Laufwerks befinden sich die für CircuitPython wichtigen Dateien, inklusive des Interpreters, des Benutzerprogramms und eines Ordners mit den Bibliotheksdateien. Dank dieser Anordnung kann der Host-PC problemlos über sein bestehendes Dateisystem und seine Treiber auf die Entwicklungskarte zugreifen.

Die CircuitPython-Benutzeroberfläche auf dem Host-PC erfordert einen kostenlosen als Download verfügbaren Open-Source-Editor sowie eine REPL-Schnittstelle. Adafruit empfiehlt die Open-Source-Anwendung Mu (Bild 6). Der Mu-Bildschirm ist in ein Code-Fenster für die Bearbeitung und das REPL-Fenster für Steuerung und Überwachung aufgeteilt, in dem der Programmierer den CircuitPython-Interpreter der Entwicklungskarte steuert. Wenn man in das Code-Fenster ein Programm eingibt und in Mu auf die Schaltfläche »Save« klickt, wird der Code auf den CircuitPython-Entwicklungskarten im On-Chip-Flash-Speicher des SAMD21-Mikrocontrollers gespeichert. Aus Sicht des Entwicklungs-PCs ist das Mikrocontroller-Board ein Laufwerk – einfacher geht es nicht.

Unkompliziertes Entwickeln auf preiswerten Boards

Die Programmiersprache Python bietet Programmierern zahlreiche Vorteile wie interaktive Programmierung, Experimentiermöglichkeiten und Debugging. Sie verfügt über eine vereinfachte, dem menschlichen Satzbau ähnlichere Syntax, bei der die Deklaration oder Typisierung von Variablen sowie eine komplexe Interpunktion entfallen. MicroPython stellt eine Abwandlung von Python 3 dar, mit der die Programmierung von Mikrocontrollern in Python ermöglicht wird.

Wie gezeigt, hat Ada­fruit aus MicroPython die Programmiersprache CircuitPython für die direkte Hardware-Unterstützung abgeleitet, um das Experimentieren weiter zu vereinfachen und das Erlernen der Sprache sowie die Software-Entwicklung zu beschleunigen. CircuitPython unterstützt bereits verschiedene kostengünstige Mikrocontroller-Entwicklungskarten auf der Basis des SAMD21-Mikrocon­trollers von Microchip sowie weitere Entwicklungskarten auf der Basis der BLE-fähigen nRF-Mikrocontroller von Nordic Semiconductor.

 

 

Der Autor

Rich Miron ist Applications Engineer bei Digi-Key Electronics. Seit 2007 verfasst er für die Technical Content Group der Firma Fachartikel und führt auch Produkt-Trainings durch. Der Elektroniexperte testete vor seiner Zeit bei Digi-Key Mess- und Kontrollsysteme für Atom-U-Boote. Miron hat einen Abschluss in Elektrotechnik und Elektronik der North Dakota State University in Fargo.