Python auf dem ESP8266

Der ESP8266 ist ein kleiner Mikrocontroller, den es für kleines Geld in verschiedenen Ausführungen und von verschiedensten Herstellern gibt.
Das kleine 32-Bit Board besticht neben einfacher Zugänglichkeit, niedrigem Preis und einem on-board WLAN Modul.

Für viele Zwecke lohnt sich ein Blick auf Micropython als Alternative zu "klassischer" Arduino C++ Entwicklung für das kleine Wunderwerk.

ESP8266 Microcontroller

Diese auf Python 3 basierende, spezialisierte Version von Python bringt vieles mit, was man sich auf einer Entwicklungsplattform wünscht:

  • Interaktive Programmierung/Nutzung des Geräts mit REPL
  • Bibliotheken für Netzwerkkonfiguration
  • Bibliotheken für Schnittstellen (Pins, I2C, SPI, ...)

Für den einfachen Einstieg mit dem ESP8266 laden wir uns zunächst die aktuellste (stable) Version für das Board hier herunter.

Als nächstes installieren wir uns das Tool esptool, welches zum Flashen des Microcontrollers mit unserem Micropython-Image genutzt wird.
Dies geschieht am einfachsten mit

pip3 install esptool

bzw.

sudo -H pip3 install esptool

falls notwendig.

Unter Windows und OS X ist es nun notwendig, den passenden Treiber für das Board zu installieren. Dieser sorgt dafür, dass das Gerät als serielle Schnittstelle auftaucht - unter aktuellen GNU/Linux Versionen ist dies in der Regel nicht notwendig.

Nun sollte das Gerät beim Anschliessen via USB auftauchen:
So meldet sich der ESP8266 der Variante "Nodemcu" als
/dev/cu.SLAB_USBtoUART bzw /dev/tty.SLAB_USBtoUART.

Dies unterscheidet sich nach Treiber und Betriebssystem.

Bei allen folgenden Beispielen muss /dev/cu.SLAB_USBtoUART mit dem passenden Pfad ersetzt werden.

Zunächst löschen wir den vorhandenen Flash des Geräts vollständig:

esptool.py --port /dev/cu.SLAB_USBtoUART erase_flash

Dann schreiben wir das heruntergeladene Image auf unser Board.

esptool.py \
    --port /dev/cu.SLAB_USBtoUART \
    -b 460800 \
    write_flash \
    --flash_size=detect --flash_mode=dio 0 \
    /Pfad/Zu/Image/esp8266-20170108-v1.8.7.bin --verify

Python

Bei Problemen kann die Baud-Rate (hier: 460800) verringert werden. Zudem
sollte man dringend auf die Spannungsversorgung des Geräts achten. Schlechte
USB Hubs können hier für viel Ärger sorgen.

Nun können wir bereits mit dem ESP8266 kommunizieren:

screen /dev/cu.SLAB_USBtoUART -b 115200

Wir sehen (spätestens beim Drücken des Reset-Buttons des ESPs) unsere vertrauten Python REPL, welche nun interaktive Benutzung auf dem Gerät zulässt.

Entwickelt man jedoch etwas länger für das Gerät, möchte man natürlich seine gewohnte Entwicklungsumgebung/Editor einsetzen. Nun kommt das Tool ampy ins Spiel:

Dieses kleine Helferlein erlaubt es uns Dateien von und auf den ESP8266 zu
kopieren und ein Skript auszuführen. Zur Installation kommt abermals kommt pip zum Einsatz:

pip3 install adafruit-ampy

bzw.

sudo -H pip3 install adafruit-ampy

Nun können wir unsere Bibliotheken-Dateien auf den ESP kopieren.

Auch unser Hauptprogramm (auf dem Gerät immer main.py) können wir so auf das Gerät bringen.
Dieses startet bei jedem Neustart des Geräts automatisch.

ampy -p /dev/cu.SLAB_USBtoUART put main.py

Wollen wir das Programm gleich ohne Reset starten, können wir auch dies einfach mit ampy erledigen:

ampy -p /dev/cu.SLAB_USBtoUART run -n main.py

Mit diesen Werkzeugen ist es nun möglich in wenigen Sekunden automatisiert neue Versionen von Software auf das Gerät aufzuspielen um diese auszuprobieren.
Dies verringert die Zeit des klassischen Workflows von "Programmieren, (Cross)-Kompilieren, Flashen" drastisch und erlaubt Fans von Python ein komfortables Arbeiten mit dem ESP8266.

Viel Spaß!

3 thoughts on “Python auf dem ESP8266”

  1. Hey Philipp,

    habe die Geschichte versucht nachzubauen…D1 Mini geflasht, und mit BIN-File bespielt. Funktioniert alles fehlerfrei, per PUTTY kann ich mich verbinden…das gewohnte Promt erscheint. Problem: Ich kann keinerlei Eingaben tätigen, keinerlei Reaktion auf die Tastatureingaben. Vor dem Prompt wird eine Menge ‚Garbage‘ ausgegeben.

    Alternativer SSH-Client tut es leider auch nicht.

    Hast Du ggf. einen Tipp?
    Gruß Felix

    1. Hallo Felix,

      Danke für deinen Kommentar.

      Ein paar Sachen, die mir einfallen, die Du ausprobieren kannst:
      – Andere Baud-Rate: Ist die Baud Rate korrekt eingestellt? (Der Standard könnte inzwischen ein anderer sein)
      – ESP via Hardware-Knopf neu starten
      – Erneut Flashen – es kam bei mir schon manchmal zu Fehlern. Gerade von den D1 Minis gibt es diverse „Nachbauten“ von sehr gemischter Qualität. Ich hatte da schon einige, die sich nur gar nicht flashen liesen, andere nur fehlerhaft.
      – Mittels Tastatur-Eingabe die Eingabe des ESPs in einen „normalen“ Stand zu bringen (Einige Male Return, manchmal funktioniert auch Ctrl+C oder Ctrl+D)

      1. Hallo Philipp,

        super, danke fürs die Info. Habe es nicht per Putty hinbekommen. Wenn ich eine IDE für Micropython nutze kann ich verbinden und Daten schreiben…

        Gruß

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.