Hardware-Unterstützung Python auf Mikrocontrollern

CircuitPython ist im Gegensatz zu anderen Programmier-Tools für Mikrocontroller, nicht auf externe Bibliotheken angewiesen.
CircuitPython ist im Gegensatz zu anderen Programmier-Tools für Mikrocontroller, nicht auf externe Bibliotheken angewiesen.

Die Entwicklung mit Python ist gegenüber C++ eine große Vereinfachung. Für die Programmierung von Mikrocontrollern gibt es MicroPython. Eine Abwandlung davon ist CircuitPython, das bestimmte Mikrocontroller-Boards unterstützt und nicht auf externe Bibliotheken angewiesen ist.

Obwohl die Sprache Python das Programmieren einfacher gemacht hat, wurde die Programmiersprache für PCs konzipiert, die über reichlich Rechenleistung, Speicher und Peripherie  verfügen. Für Embedded-Systeme mit deutlichen Einschränkungen hinsichtlich Ressourcen und Schnittstellen hat sich mit MicroPython eine für Mikrocontroller optimierte Version zu einer beliebten Alternative entwickelt. Die Popularität dieser Ver­sion geht sogar so weit, dass die Open-Source-Community MicroPython für bestimmte Mikrocontroller und Entwicklungs-Boards angepasst hat, um die ernsthafte Mikrocontroller-Entwicklung zu unterstützen. Eine dieser Anpassungen ist CircuitPython, die weiter unten vorgestellt wird.

Eines der ersten Entwicklungs-Boards für Maker war das ursprüngliche Ar­duino-Board. Mit seinen zahlreichen Nachfolgern waren diese Boards äußerst beliebte Mikrocontroller-Entwicklungskarten bei Studenten sowie für Em­bedded-Prototypen. Die Entwicklungsumgebung von Arduino und die Programmiersprache basieren jedoch auf C++, einer leistungsstarken, aber komplexen compilierten Sprache mit einer komplexen Syntax und strengen Interpunktionsregeln, die viele Programmieranfänger abschrecken.

Leichter erlernbar als C++

Python ist eine neuere Programmiersprache. Es 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 gute Schreib- und Lesbarkeit sowie für ihre einfache Syntax. Alles das trägt dazu bei, dass weniger Programmierfehler gemacht werden und die Wiederverwendbarkeit von Code vereinfacht wird, wodurch wiederum die Software-Entwicklung beschleunigt wird. 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 Programmiersprache, die viele Studenten und Amateure lernen.

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 ist jedoch eine schlanke und effiziente Implementierung der Programmiersprache Python 3 entstanden, die speziell zur Ausführung mit den beschränkten Ressourcen eines Mikrocontrollers entwickelt und optimiert wurde.

Für Mikrocontroller-Boards angepasst

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 Entwicklungs-Boards 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 Hardware-Ressourcen 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.

Unterschiede zwischen C++ und Python

Angesichts der Beliebtheit und Verbreitung der Arduino-IDE (Integrated Development Environment, integrierte Entwicklungsumgebung) und der Vielzahl an verfügbaren Arduino-Entwicklungskarten stellt sich die Frage, ob für die Embedded-Entwicklung wirklich eine eigene Python-Version benötigt wird. Ein Vergleich der Programmiersprachen liefert die Antwort.

C++ ist eine Erweiterung der älteren Programmiersprache C mit objektorientierten Erweiterungen. Doch selbst mit diesen Erweiterungen liest sich C++ etwas kryptisch, da auch weiterhin die Syntax von C verwendet wird, die ursprünglich von Kernigan und Ritchie in den späten 1960er- und frühen 1970er-Jahren in den Bell-Laboratorien entwickelt worden ist.

Die ursprüngliche Absicht hinter der Entwicklung von C bestand darin, geschriebenen Code problemlos in Maschinenanweisungen für einen Zielprozessor umwandeln zu können. Diese Ausrichtung auf die Anforderungen der Maschine anstatt auf die der Programmierer spiegelt sich in der Syntax der  Programmiersprache wider. Da kommerzielle Mikroprozessoren erst 1971 auf den Markt kamen, wurde C ursprünglich für Minicomputer entwickelt. C-Compiler für Mikroprozessoren entwickelten sich in den 1980er-Jahren allmählich zu hilfreichen Werkzeugen. C war schon immer eine compilierte Sprache und selbiges gilt auch für C++.

Der dänische Computerwissenschaftler Bjarne Stroustrup begann 1979 mit der Entwicklung von C++. Sein erstes Lehrbuch zur Programmiersprache erschien 1985. Es dauerte jedoch bis 1998, bevor sich C++ zu einer standardisierten Programmiersprache entwickelte. Ebenso wie C war Stroustrups C++ ursprünglich für größere Computer vorgesehen. Die 2003 entwickelte Arduino-IDE machte C++ auch für Arduino-Mikrocontroller zugänglich.

Bei Python handelt es sich ebenfalls um eine objektorientierte Sprache. Sie wurde von dem dänischen Programmierer Guido van Rossumin entwickelt und erstmals 1991 veröffentlicht. Die syntaktische Struktur von Python betont die Lesbarkeit des Codes (für Menschen), worin einer der entscheidenden Unterschiede zwischen Python und C++ liegt. Die Schreibbarkeit, die eng mit der Lesbarkeit zusammenhängt, ist ebenfalls ein Punkt zugunsten von Python. Sie ermöglicht Programmierern im Allgemeinen das schnellere Schreiben von Anwendungen, wodurch die Experimentierfreudigkeit angeregt wird und ein schnelleres Prototyping und kürzere Entwicklungszyklen ermöglicht werden.

Schluss mit Edit–Compile–Debug

Ein zweiter großer Unterschied besteht darin, dass Python eine interpretierte Sprache ist, so wie die Programmiersprache Basic, die erstmalig in den 1960er-Jahren für Minicomputer zum Einsatz kam und ihre große Blütezeit in den 1970er-Jahren erlebte, und zwar mit Einführung der Mikrocomputer. Wie bei Basic auch, lädt die interpretative Natur von Python zum Experimentieren ein, was ein Lernen durch den Verzicht auf den Entwicklungszyklus für compilierte Programmiersprachen unterstützt, der aus Bearbeiten, Compilieren, Herunterladen und Ausführen bestand. Im Gegensatz zu Basic handelt es sich bei Python jedoch um eine moderne, objektorientierte Sprache auf einer höheren Ebene, die die Fortschritte der Computerwissenschaft eines halben Jahrhunderts berücksichtigt, das seit der erstmaligen Entwicklung von Basic vergangen ist.

Beispielsweise müssen die in Python verwendeten Variablen vor der Verwendung nicht deklariert oder typisiert werden. Programmierer müssen sich keine Gedanken darüber machen, ob es sich bei der Variable um eine Ganzzahl oder eine Gleitkommazahl handeln soll. Der Python-Interpreter erkennt dies automatisch und nimmt während der Ausführung die entsprechende Auswahl vor.

Zwei weitere Unterschiede zwischen C++ und Python liegen in der Verarbeitung von Zeichenketten (Strings) und der Interpunktion. Viele Programmierer halten die Verarbeitung von Strings in C++ für stumpf und verwirrend. Die Verarbeitung von Strings in Python ist sehr viel einfacher und erinnert stark an die einfache und beliebte Verarbeitung von Strings in Basic, was lange als eine der großen Stärken von Basic galt.

Die Interpunktion von C und C++ – insbesondere die geschweiften Klammern {} – ist ein weiterer Punkt, der Neueinsteiger und selbst erfahrene Programmierer häufig vor Probleme stellt. Ständig scheint ein Programm eine ungerade Anzahl an geschweiften Klammern zu enthalten, was bedeutet, dass sich der Programmierer auf die mühevolle Suche nach der Stelle machen muss, an der die fehlende geschweifte Klammer platziert werden muss. Python verwendet keine derart knifflige Interpunktion. Stattdessen verwendet die Sprache Einrückungen, die auch für die Lesbarkeit des Python-Codes sorgen.