Einsatz von Python für Prototyping und Entwicklung auf Mikrocontrollerbasis
Python ist praktisch, aber die Skriptsprache ist in der Regel auf die Ressourcen von PC-Anwendungen ausgelegt. Embedded-Anwendungen müssen aber meist mit weniger auskommen. CircuitPython von Adafruit ist eine Variante von Python, die sich speziell an Embedded-Entwicklungsprojekte richtet.
Anbieter zum Thema

Die ursprüngliche Arduino-Entwicklungskarte und ihre zahlreichen Nachfolger waren äußerst beliebte Mikrocontroller-Entwicklungskarten bei Hobbybastlern und Studenten sowie für Embedded-Prototypen. Die Arduino-IDE und die Programmiersprache basieren jedoch auf C++, einer leistungsstarken, aber komplexen kompilierten Sprache mit einer scher zugänglichen Syntax und strengen Interpunktionsregeln, die viele Programmieranfänger abschrecken.
Bei Python handelt sich dabei um eine interpretierte, interaktive, objektorientierte Sprache, die eine bemerkenswerte Programmierleistung mit einer klar strukturierten Syntax kombiniert. Sie ist bekannt für ihre leicht zugängliche Schreib- und Lesbarkeit sowie für ihre einfachere Syntax. Alles das trägt dazu bei, die Gefahr von Programmierfehlern zu verringern und die Wiederverwendbarkeit von Code zu vereinfachen, was wiederum die Softwareentwicklung beschleunigt.
Die interpretative Natur der Sprache gibt dem Programmierer ein unmittelbares Feedback, das zum Experimentieren einlädt und ein rasches Lernen fördert. Aus diesen Gründen ist Python inzwischen die erste Sprache, die viele Studenten und Hobbybastler zum Programmieren erlernen.
Ein Nachteil der Sprache besteht jedoch darin, dass Python für PCs und größere Maschinen mit ausreichend RAM, enormem Massenspeicher sowie einer umfassenden Benutzeroberfläche mit Tastatur, großem Display und Maus entwickelt wurde. Sie war nicht für die Embedded-Programmierung vorgesehen. Mit MicroPython enstand allerdings 2014 eine schlanke und effiziente Implementierung der Programmiersprache Python 3, die speziell auf die Ausführung mit den beschränkten Ressourcen eines Mikrocontrollers optimiert wurde.
Das Erkennen der Möglichkeiten von MicroPython als eine Sprache zur Embedded-Programmierung hat dazu geführt, dass die Open-Source-Community sie für bestimmte Mikrocontroller und Entwicklungskarten angepasst hat, um die ernsthafte Mikrocontrollerentwicklung zu unterstützen.
So hat beispielsweise Adafruit mit CircuitPython eine eigene Version von MicroPython entwickelt. Die auf die Mikrocontroller und die Hardwareressourcen der Entwicklungskarten von Adafruit zugeschnittene Sprache soll zum Experimentieren einladen und das Erlernen der Programmierung mit CircuitPython auf kostengünstigen Mikrocontrollerkarten erleichtern. CircuitPython ist auf verschiedenen Entwicklungskarten von Adafruit bereits vorinstalliert und kann auf weiteren Karten installiert werden.
Die Ursprü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 werden zu können. Aus diesem Grund entwickelte der australische Programmierer und Physiker Damien George eine Python-Version mit der Bezeichnung MicroPython, 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 Befehlszeilenschnittstellen von Basic aus den 1970er- und 1980er-Jahren. Sie akzeptiert Benutzereingaben (Einzelausdrücke oder -aussagen), 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, Kompilieren, 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 einen einzigartigen Satz von Peripheriebausteinen, wobei diese Liste durch jede Entwicklungskarte weiter ergänzt wird. 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 CircuitPython zur Verfügung steht.
Adafruit hat eine Reihe von Mikrocontroller-Entwicklungskarten speziell zur Unterstützung von CircuitPython entwickelt. Hierzu zählen folgende Karten:
- 3333 Circuit Playground Express mit zehn adressierbaren, steuerbaren RGB-LEDs (siehe Bild 1).
- 3500 Trinket M0 mit Abmessungen von lediglich 27 mm x 15,3 mm x 2,75 mm (siehe Bild 2).
- 3501 Gemma M0 mit einem Durchmesser von etwa 25 mm und Stromversorgung über ihren USB-Anschluss oder einen separaten Batterieanschluss (siehe Bild 3).
- 3403 Feather M0 Express mit einem kleinen Steckbrettbereich für kundenspezifische Schaltkreise (siehe Bild 4).
Diese vier Mikrocontroller-Entwicklungskarten von Adafruit basieren alle auf den SAMD21-Mikrocontrollern von Microchip Technology (ehemals Atmel) mit nativer USB-Unterstützung. 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 (siehe Bild 5), die auf dem nRF52840-Mikrocontroller des Unternehmens basiert, von CircuitPython unterstützt. Beide Mikrocontroller, auf denen diese drei Karten basieren, bieten Bluetooth mit geringem Stromverbrauch (BLE) sowie die entsprechende Softwareunterstützung.
Entwickeln mit CircuitPython
Adafruit hat einen einzigartigen Ansatz verfolgt, um CircuitPython auf für die direkte Unterstützung der Sprache konzipierten Entwicklungskarten zu etablieren. 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 (siehe 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 Sie in das Code-Fenster ein Programm eingeben und in Mu auf die Schaltfläche „Save“ klicken, wird der Code auf den CircuitPython-Entwicklungskarten von Adafruit im großen On-Chip-Flash-Speicher des SAMD21-Mikrocontrollers gespeichert. Jeglicher CircuitPython-Code wird im Flash-Speicher des Mikrocontrollers auf der Entwicklungskarte gespeichert. Erinnern Sie sich, dass der PC in der CircuitPython-Karte ein Laufwerk sieht. Von daher ist das aus Sicht eines Betriebssystems nichts Ungewöhnliches.
Vorteile für Embedded-Entwickler durch den Einsatz von Python
Die Programmiersprache Python bietet Programmierern zahlreiche Vorteile wie interaktive Programmierung, Experimentiermöglichkeiten und Debugging. Sie verfügt über eine vereinfachte, der menschlichen Sprache ähnlicheren 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 Adafruit aus MicroPython die Programmiersprache CircuitPython für die direkte Hardwareunterstützung abgeleitet, um das Experimentieren weiter zu vereinfachen und das Erlernen der Sprache sowie die Softwareentwicklung zu beschleunigen. CircuitPython unterstützt bereits verschiedene kostengünstige Mikrocontroller-Entwicklungskarten auf der Basis des SAMD21-Mikrocontrollers von Microchip sowie weitere Entwicklungskarten auf der Basis der BLE-fähigen nRF-Mikrocontroller von Nordic Semiconductor.
:quality(80)/images.vogel.de/vogelonline/bdb/1532200/1532209/original.jpg)
Migration auf Python 3
:quality(80)/images.vogel.de/vogelonline/bdb/1473800/1473858/original.jpg)
Die Verschmelzung von Hardware und Software
:quality(80)/images.vogel.de/vogelonline/bdb/1449500/1449552/original.jpg)
Unit Tests mit Python – Beispiele und Fallstricke
* Rich Miron ist Senior Technical Content Developer und Applications Engineer bei Digi-Key Electronics in Thief River Falls.
(ID:45914258)