Blog

MicroPython - Pythonisches Edge Computing

Aktualisiert Oktober 21, 2025
11 Minuten

Da das Internet der Dinge immer beliebter wird, steigt auch der Bedarf an Computerlösungen, die über ein Netzwerk kleinerer Geräte und nicht nur über zentralisierte Verarbeitungsserver funktionieren.

Zu diesem Zweck werden Entwickler immer wieder mit den Anforderungen an die Hardware konfrontiert. Modernere Lösungen, wie z.B. Edge Computing, erhöhen jedoch unseren Bedarf an solchen Komponenten.

Fälschlicherweise wird jedoch oft angenommen, dass die Programmierung von Edge Computing auf diesen Controllern keine leichte Aufgabe ist, da sie auf älteren Sprachen beruhen und nur über begrenzte Möglichkeiten verfügen. Doch das könnte nicht weiter von der Wahrheit entfernt sein. Als begeisterter Python-Programmierer - eine neuere, aber sehr beliebte Programmiersprache - wollte ich zeigen, dass wir mit moderner Technologie tatsächlich die gewünschten Ergebnisse erzielen können.

Das Hardware-Problem

Wo liegt also das Problem? Das Problem ist, dass viele Entwickler in die Branche kommen und neuere Sprachen verwenden, die sie ansprechen. Wenn man über Hardware nachdenkt, ist es sehr einfach, an ältere Lösungen zu denken und das haben wir bisher zu vermeiden versucht - wir wollen nicht auf älteren Ansätzen aufbauen.

Obwohl Python immer beliebter wird und sich dank vieler verschiedener Frameworks und Bibliotheken seine Position als effizientes Werkzeug zur Lösung eines breiten Spektrums von Softwareproblemen sichern kann, gibt es Teile der elektronischen Welt, die immer noch von der alten Garde der Programmiersprachen besetzt sind. Ich spreche von elektronischer Hardware in Form von Mikrocontrollern (MCUs), die seit Jahren mit wenigen Ausnahmen in C oder C++ programmiert werden, in der Regel mit sehr hardwarespezifischen Bibliotheken.

Die Wahrnehmung von MCUs durch die Softwareingenieure hatte sich schon einmal geändert, nämlich mit dem Aufkommen von Projekten wie Arduino, die es einer ganzen Generation von Programmierern ermöglichten, mit dem Schreiben von Software für Geräte zu experimentieren, ohne die Hardware selbst beherrschen zu müssen. So entstand eine riesige Community, zu der sowohl Software- als auch Elektronikingenieure gehören, die Informationen austauschen und oft zusammenarbeiten, um die Probleme der anderen zu lösen und das Internet der Dinge (IoT) voranzubringen.

Das ist ein Problem, das dem von Altsystemen nicht unähnlich ist. Wenn neue Lösungen weiterhin nicht genutzt werden, dann wird die Abhängigkeit von einer älteren, weniger beliebten Option nur noch weiter wachsen. Unsere IoT-Geräte mögen dynamisch und zukunftsorientiert sein, aber wenn die zugrundeliegenden Mikrocontroller immer noch an eine begrenzte Anzahl von Optionen gebunden sind, schränkt dies das ultimative Potenzial ein, das unsere Lösungen aus ihnen ziehen können.

Wieder einmal können wir sehen, dass ein neuer großer Sprung stattfindet, indem Sprachen wie JavaScript (JS) und Python die Bühne der Programmiersprachen für Hardware betreten. Mit diesem Beitrag möchte ich alle, die noch zögern, diese neuen Möglichkeiten auszuprobieren, ermutigen, es einfach mit MicroPython zu versuchen.

Was ist MicroPython?

MicroPython ist eine Implementierung einer kleinen Teilmenge von Python 3.5-Interpretern. Er ist teilweise plattformspezifisch, d.h. ein Teil von ihm unterscheidet sich je nach der Hardware, auf der er ausgeführt wird. Es wurde auf verschiedene Hardwareplattformen portiert, die sowohl industrielle als auch eher hobbymäßige MCUs enthalten. Im Kern besteht es aus einer Python-API (Application Programming Interface), die auf den vom Hardwarehersteller bereitgestellten C-Bibliotheken aufbaut. Dieser Kern wird dann von Bibliotheken verwendet, die in reinem Python geschrieben sind.

Warum verwenden Sie es?

MicroPython bietet Ihnen die Leistungsfähigkeit von Python auf einem Mikrocontroller. Anstatt Ihren Code in C oder C++ zu schreiben und ihn dann zu kompilieren und auf ein Gerät hochzuladen, können Sie einfach in Python programmieren und Ihr Programm so ausführen, wie Sie es normalerweise auf Ihrem Computer tun würden. Obwohl ich MicroPython schon in vielen Projekten verwendet habe, ist es für mich immer noch beeindruckend, vor allem, weil Python den Ruf hat, ressourcenhungrig und langsam zu sein.

Apropos Ressourcen - beim Schreiben von Code müssen Sie in der Regel mehr auf Hardwarebeschränkungen achten, z.B. die Anzahl der Kerne oder die Speichergröße. 64 KB sind in manchen Fällen nicht genug. MCUs sind in der Regel weniger nachsichtig, wenn es um die Ressourcenzuweisung geht. Daher enthält MicroPython verschiedene Mechanismen, um diese Schwierigkeiten zu entschärfen.

Die Möglichkeit, Python und die damit verbundenen Tools auf der MCU auszuführen, macht die Programmierung von Elektronik nicht nur für jeden Python-Programmierer, sondern auch für jeden Programmieranfänger zugänglich. Und warum? Denn Python ist eine sehr benutzerfreundliche Sprache, die sich immer größerer Beliebtheit erfreut und für Anfänger oft die erste Wahl gegenüber JS oder C++ ist.

Wie funktioniert das?

Das Geheimnis des Erfolgs von MicroPython liegt in einer cleveren Reihe von Transformationen, die zwar nicht besonders hübsch oder elegant sind, aber plattformspezifischen Code ermöglichen, der zu einer Python-API wird. MicroPython ist, ähnlich wie CPython, in C geschrieben und muss für einen bestimmten Rechner kompiliert werden. Eine solche Version von MicroPython wird als Port bezeichnet.

Wie bereits erwähnt, liegt jedem Port eine maschinenspezifische C-API zu Grunde. Sie muss etwa 5 Mal auf unterschiedliche Weise verpackt werden, wobei eine Datenstruktur nach der anderen entsteht, um schließlich in eine Python-API umgewandelt zu werden, die zur Ausführung von maschinenspezifischen Operationen verwendet werden kann. Auf dieser Basis kann praktisch jede rein in Python implementierte Bibliothek verwendet werden.

Beste Eigenschaften

MicroPython verfügt über einige Funktionen, die bei der Programmierung von Mikrocontrollern einen echten Wendepunkt darstellen. Hier möchte ich Ihnen zeigen, dass die Programmierung von Hardware für Sie absolut machbar ist, wenn Sie Python beherrschen.

Zunächst einmal handelt es sich um einen Python-Interpreter, was bedeutet, dass er über eine voll funktionsfähige REPL (read-eval-print-loop) verfügt, so dass Sie Ihren Code in Echtzeit schreiben, Bibliotheken importieren und alles andere tun können, was Sie normalerweise in einer Python-REPL tun würden.

Eine weitere erstaunliche Funktion ist das eingebaute Dateisystem, das es Ihnen ermöglicht, Dateien auf einen Mikrocontroller zu laden und sie dann zu lesen und zu schreiben. Ich habe diese Funktion mehrmals genutzt, um eine Konfigurationsdatei auf einen Mikrocontroller zu laden und dann auszuführen:


>>> import json
>>> with open(‘config.json’, ‘r’) as f:
…       config = json.loads(f)

Ich habe jetzt eine 'config'-Variable, die ein Diktat ist, in das die JSON-Daten (JavaScript Object Notation) geladen wurden. Standardmäßig sucht MicroPython nach Dateien in seinem Stammverzeichnis.

In den meisten Fällen werden Sie REPL nicht verwenden wollen, sondern lieber Ihr eigenes Programm schreiben, es auf ein Gerät laden und beim Start ausführen lassen. Glücklicherweise könnte nichts einfacher sein - unmittelbar nach dem Einschalten führt MicroPython die Datei 'boot.py' aus, die in der Regel das Hardware-Setup enthält, und dann 'main.py', die normalerweise Ihren Anwendungscode enthalten sollte. Sie können Ihren Code natürlich auch in mehreren Dateien hochladen und dann aus diesen Dateien importieren, genau wie bei der Verwendung einer normalen Python REPL.

Die nächste große Funktion wäre die Installation von PyPI-Paketen direkt auf Ihrem Gerät. Wenn Sie ein Gerät mit Internetzugang haben und Ihre Internetverbindung konfiguriert haben, müssen Sie nur noch den Befehl ausführen:


>>> import upip
>>> upip.install(‘micropython-requests’)

Jetzt haben Sie das Paket 'urequests' installiert. Normalerweise werden Pakete im Verzeichnis '/libs' installiert, aus dem sie auf die gleiche Weise importiert werden können, als ob sie sich im Stammverzeichnis befinden würden, indem Sie aufrufen:


>>> import urequests

Programmierung von Hardware

Die gerätespezifischen Operationen sind genauso einfach wie die bereits oben beschriebenen, können aber zwischen den Plattformen unterscheiden. Hier ist ein Beispiel für die Einrichtung eines Ausgangspins (z.B. eines Pins, der mit einer LED verbunden ist) für einen ESP8266-Mikrochip:

>>> import machine
>>> pin = machine.Pin(15, machine.Pin.OUT)
>>> pin.value()
>>> pin.value(1)

Der obige Code erstellt ein neues Pin-Objekt (das mit dem Board-Pin 15 verknüpft ist) aus der Maschinenbibliothek und verwendet dann den Eigenschaftswert, um dessen Zustand zu lesen und dann auf High zu ändern. Wenn Sie einen Eingangs-Pin erstellen möchten, müssen Sie machine.Pin.OUT in machine.Pin.IN ändern. Das ist praktisch alles, was Sie brauchen, um Ihre digitalen Ein- und Ausgänge mit MicroPython zu programmieren.

Einige der besten Tricks, die Sie mit MicroPython ausführen können, haben ihren Ursprung in der Tatsache, dass Funktionen in Python Objekte erster Klasse sind. Das bedeutet, dass Sie sie als Parameter an eine andere Funktion übergeben können, was die Programmierung von Callbacks zu einem Kinderspiel macht. Bei der Programmierung von digitalen Eingängen möchten Sie oft eine Aktion implementieren, wenn sich der Zustand des Pins ändert. Sie können eine einfache while-Schleife schreiben, aber die ist blockierend, so dass wir sie nicht wirklich verwenden wollen. Wenn Sie einen Mikrocontroller programmieren, verwenden Sie normalerweise Interrupts, um diese Funktionalität zu implementieren. Einfach ausgedrückt: Wenn Sie einen Interrupt setzen, wartet er auf eine Zustandsänderung an einem bestimmten Pin und führt ein Programm aus, wenn dies geschieht. Kombinieren Sie dies mit der Tatsache, dass Funktionen als Parameter übergeben werden können, und Sie erhalten dies:

>>> import machine
>>> def irq_func(interrupt_pin):
…       print(“Interrupt happened on pin: {pin}”.format(pin=interrupt_pin.id)
>>> input_pin = machine.Pin(15, machine.Pin.IN)
>>> machine.irq(trigger=machine.Pin.IRQ_FALLING, handler=irq_func)

Und das ist alles - 'irq_func' wird mit einem Pin, an dem der Interrupt aufgetreten ist, als Parameter ausgeführt.

Edge Computing

Edge Computing ist eine von zwei Hauptarten von IoT-Anwendungen, die andere ist Cloud Computing. Bei letzterem wird die gesamte Berechnungsphase zur Verarbeitung der von den Geräten des IoT-Systems erfassten Daten auf einem zentralen Server durchgeführt, in der Regel in der Cloud, daher der Name. Beim Edge-Computing hingegen wird ein Teil der Datenverarbeitung oder -filterung auf Geräten durchgeführt, die Daten erfassen und Teil des Netzwerks sind - das sind die sogenannten Edge-Geräte.

Die Vorteile des Edge Computing zu erörtern, ist ein eigenes Thema, aber es genügt zu sagen, dass Edge Computing unter anderem schnellere Reaktionszeiten ermöglicht, die Anforderungen an den Datentransport reduziert und andere kosteneffiziente Lösungen bietet. Edge Computing konzentriert sich auf die Verarbeitung von Daten direkt an der Quelle - oder "Edge" -, wo sie erzeugt werden. Aus diesem Grund lässt es sich gut mit dem Internet der Dinge (IoT) kombinieren, in dem es eine Vielzahl von Eingabegeräten und Sensoren zur Datenerfassung gibt.

Folglich ist der Bedarf an leistungsstarken und zuverlässigen MCUs von größter Bedeutung. Wir wollen die Daten auf den Geräten verarbeiten, die sie sammeln, so dass wir nur durch die Grenzen der internen Hardware und die Art und Weise, wie wir sie anschließend programmieren, eingeschränkt sind.

Angesichts der anerkannten Eignung von Python für die Datenverarbeitung scheint es, dass MicroPython ein perfektes Tool für die Programmierung von IoT-Systemen mit Edge-Computing wäre. Und das ist es auch! Sehen wir uns als Beispiel die IoT-Plattform von Amazon Web Services (AWS) an, die ein Software Development Kit (SDK) für Python bereitstellt. Es kann mit upip, das wir bereits besprochen haben, auf einer MCU installiert werden. Die Verbindung zu AWS IoT mit MicroPython ist mühelos und darüber hinaus können große Teile des Codes plattformunabhängig sein, was bedeutet, dass die Logik für die Datenverarbeitung einfach in andere oder aus anderen in Python geschriebenen Anwendungen exportiert werden kann.

Um ein System zu erstellen, das Edge Computing ausführen kann, benötigt man MCUs, die eine beträchtliche Rechenleistung (für einen Mikrocontroller) bieten und über einige Netzwerkfunktionen verfügen. Die populärsten MCUs, die es derzeit gibt, sind ESP8266 und ESP32. Dies sind wahrscheinlich die beliebtesten MCUs, die im IoT eingesetzt werden. Beide sind mit einem WiFi-Modul ausgestattet und verfügen über einen recht leistungsstarken Mikroprozessor. Außerdem sind sie sehr preiswert. Angesichts ihrer Beliebtheit ist es nicht verwunderlich, dass MicroPython für die Unterstützung dieser Geräte portiert wurde.

Alternativen

Es gibt nicht viele Alternativen zu MicroPython, und es scheint auch nur eine zu geben, die nicht direkt von MicroPython abstammt. Für letztere gibt es zwei, die es wert sind, als brauchbare Alternativen diskutiert zu werden.

CircuitPython ist ein Fork von MicroPython, der für die Verwendung mit Adafruit-Hardware entwickelt wurde. Sein Hauptzweck ist es, das Programmieren mit Mikrocontrollern zu lehren. Es gibt geringfügige Unterschiede zwischen CircuitPython und MicroPython, aber der Code ist weitgehend identisch.

Pycom ist eine IoT-Plattform, die Kunden Hardware-, Software- und Netzwerklösungen anbietet. Die Firmware für seine MCUs ist Open Source und basiert auf MicroPython. Pycom hat das AWS IoT Python SDK neu implementiert, so dass es sich leicht auf ESP32-Mikrocontrollern mit MicroPython installieren lässt.

Die einzige Alternative zu MicroPython, die eine eigene Codebasis hat, ist Zerynth. Dieses Programm wurde ursprünglich als Viper entwickelt und ist eine Mischung aus Python und C. Sie ist typisiert und versucht, die Einfachheit der Python-Entwicklung mit der Kontrolle von C zu kombinieren. Zerynth ist auch eine IoT-Plattform und bietet die Integration mit vielen Cloud IoT-Diensten. Ein Teil der Sprachstruktur von Zerynth kann in MicroPython verwendet werden, um die Codeleistung zu optimieren.

Zusammenfassung

IoT-Systeme und -Anwendungen tauchen in der Welt um uns herum immer häufiger auf. Sie sind für die Verwaltung von Flotten von Geräten in einer Vielzahl von Umgebungen verantwortlich. Der Trend erweist sich als stabil und es ist allgemein anerkannt, dass das IoT die Welt erobert. Bisher musste man, um an diesem Phänomen teilzuhaben, Sprachen wie C oder C++ lernen. Mit MicroPython kann jeder Python-Entwickler seine Programmierkenntnisse in der Welt der Mikrocontroller ausprobieren.

Es gibt sicherlich eine enorme Menge an plattformspezifischem Wissen, das man sich aneignen muss, um komplizierte Hardware-Anwendungen zu entwerfen und zu programmieren, aber der erste und schwierigste Schritt kann mit MicroPython nahtlos gemacht werden.

Geschäftsperspektive

Wenn Sie das Beste aus dem IoT herausholen wollen, kann Edge Computing schnelle und leistungsstarke Ergebnisse liefern und gleichzeitig Geld sparen. Cloud- und Serverless-Technologien können zwar hilfreich sein, aber um dies vollständig zu erreichen, müssen Sie die Mikrocontroller (MCUs) unter diesen Geräten optimieren. Die Verwendung modernerer Codierungslösungen wie Python kann dazu beitragen, Ihre MCUs zu aktualisieren und eine Lösung zu schaffen, die leichter zugänglich ist.

Contact

Let’s discuss how we can support your journey.