Python für MCU: MicroPython auf einem ESP32 und ESP8266

Die Programmiersprache Python erfreut sich großer Beliebtheit, da sie im Gegensatz zu anderen höheren Programmiersprachen wie C/C++ auch von Anfängern leicht erlernbar ist und plattformunabhängig ist.

Meine Empfehlung

Bei MicroPython handelt es sich um eine Softwareimplementierung, die Python für Mikrocontroller zur Verfügung stellen soll, der Quellcode ist offen und wurde unter der MIT-Lizenz auf GitHub veröffentlicht. Sie ist in C geschrieben und wurde für den Betrieb auf einem Mikrocontroller optimiert. MicroPython ist weitgehend mit der aktuellen Version Python 3 kompatibel, so dass sich Python-Entwickler leicht zurecht finden werden.

Zu MicroPython gehören

  • ein vollständiger Python-Compiler
  • eine Laufzeitumgebung
  • eine Auswahl von Python-Kernbibliotheken

In diesem Tutorial möchte ich dir einen kleinen Einstieg in MicroPython mit einem ESP32 und ESP8266 ermöglichen, diese Mikrocontroller sind weit verbreitet und die Boards sind günstig zu erwerben. Eine Auswahl von kompatiblen Boards findest du im MicroPython.org Forum. Um ganz sicher zu gehen empfehle ich dir das offizielle Pyboard.

Setup unserer Entwicklungsumgebung

Bevor wie die ersten Programmierzeilen schreiben können, müssen wir vorher noch einige Vorbereitungen treffen. Wie bei jedem Software-Projekt benötigen wir eine Entwicklungsumgebung, die uns mit MicroPython unterstützt, hier empfehle ich uPyCraft IDE. Sie ist kostenlos und steht für Windows, Mac und Linux zur Verfügung. Bitte lade und installiere nun die passende IDE.

Der nächste Schritt besteht nun darin die MicroPython Firmware auf dein Board zu flashen, wie das geht erfährst du im nächsten Abschnitt.

Meine Empfehlung

MicroPython Firmware auf ESP32/ESP8266 flashen

Zuerst müssen wir uns die passende Firmware finden und herunterladen.

Gehe zur MicroPython Downloadseite und lade die letzte esp32-xxxx.bin bzw. esp8266-xxxx-bin Datei herunter.

Gehe nun in der uPyCraft IDE zu Tools -> Serial und wähle den COM-Port aus, der mit deinem Board verbunden ist.

Wichtig: Falls du den Port nicht finden kannst, liegt es oftmals am fehlenden USB-Treiber für dein Board. In diesem Fall solltest du einen Blick auf den USB-Chip auf deinem Board werfen und dir den Typ aufschreiben. Mit einer einfachen Google-Suche solltest du schnell den passenden Treiber finden.

Als nächstes wir in der IDE über Tools -> Board unser Board auswählen, d.h. entweder esp8266 oder esp32.

Nun geht es ans flashen. Wähle über die IDE Tools -> BurnFirmware aus. Im Dialog sollten folgende Optionen ausgewählt werden:

  • board: esp32 oder esp8266
  • burn_addr: 0x1000 (esp32) oder 0x0 (esp8266)
  • erase_flash: yes
  • com: dein COM-Port
  • Firmware: unter „Users“ die Firmware-Datei esp32-xxxx.bin bzw. esp8266-xxxx-bin auswählen

Den Dialog jetzt noch nicht mit „ok“ schließen!

Bitte halte nun auf deinem Board die „Boot/Flash“ Taste gedrückt und klicke gleichzeitig im Dialog auf den „ok“ Button. Wenn nun der „EraseFlash“ Prozess beginnst, kannst du die Taste loslassen.

Meine Empfehlung

Unser erstes MicroPython Skript

Nachdem wir MicroPython auf dem MCU installiert haben, können wir nun das erste Skript schreiben. Um den ganzen Prozess so leicht wie möglich zu halten, beschränken wir uns auf das Blinken der on-board LED.

Klicke nun auf den Connect Button um eine Verbindung mit dem Board herzustellen. Bei erfolgreicher Verbindung sollte in der Shell nun >>> auftauchen. Sollte dies nicht der Fall sein, dann vergewissere dich ob die Verbindung richtig konfiguriert wurde, indem du die Einstellungen bei Tools -> Board und Tools -> Port überprüfst und ggf. neu einstellst.

Erstelle nun eine Datei mit dem Namen main.py. Klicke nun auf „Download and Run“, die Datei wird dabei auf den MCU kopiert, sie sollte nun links im „devices“-Ordner auftauchen.

Klicke nun auf den Stop-Button. Damit ist das Setup abgeschlossen und dein ESP ist bereit für das erste Programm.

Wir lassen die On-Board LED blinken

Bitte kopiere den folgenden Code in die main.py:

from machine import Pin
from time import sleep
 
led = Pin(2, Pin.OUT)
 
while True:
  led.value(not led.value())
  sleep(0.5)

Ein paar Erläuterungen:

Die ersten beiden Zeilen stellen die Funktionen Pin() und sleep() zur Verfügung. Mit der Pin()-Funktion konfigurieren wir den Pin 2 (on-board LED) als Ausgang.

Mit „while True:“ erzeugen wir eine Endlosschleife und lassen die LED alle 0.5s blinken. Mit led.value() wird der Pin 2 entweder auf True oder False gesetzt, dies erreichen wir indem der aktuelle Wert mit led.value() ohne Parameter geholt und mit „not“ invertiert wird.

Klicke nun auf den „Download and Run“-Button um das Skript auf den ESP32 oder ESP8266 zu laden.

Meine Empfehlung

Unser Skript testen

Klicke nun wieder auf den „Stop“-Button.

Drücke jetzt den on-board ESP32/ESP86266 EN (ENABLE) oder RST (RESET) Knopf um das Board neu zu starten. Unser LED-Programm müsste nun automatisch starten, eine Verbindung zum PC per USB-Kabel ist nicht mehr notwendig. Wenn alles funktioniert, müsste die LED nun alle 500 ms blinken.

Kommentar hinterlassen