Der Streit um „die Beste“ Programmiersprache ist so alt, wie der Transistor. Aber für mich ist Python die perfekte Sprache. Projekte lassen sich sehr schnell entwickeln, der Code ist gut lesbar und man kann auf ein enormes Ökosystem an Bibliotheken und Community zurückgreifen. Seid einiger Zeit ist es auch möglich Python Code auf einem esp8266 oder esp32 auszuführen. Dabei scheint es wie ein Widerspruch in sich zu sein. Schwache Hardware und dann noch ein Interpreter Sprache? Das klingt wie eine „lose-lose“ Situation. Natürlich kann ich mit C deutlich performanter auf die Hardware zugreifen Und wem das noch nicht reicht, der kann noch ein paar CPU Takte mit Assembler herausholen. Aber wenn alle halbe Stunde die Raumtemperatur erfassen und den Wert an einen Server schicken möchte, dann komme ich auch mit Python nicht an die Hardwaregrenzen.
Wie fange ich an
Eigentlich ist es überflüssig hierzu ein eigenes Tutorial zu schreiben, weil es im Netz schon einige dazu gibt. Ich dokumentiere aber dennoch hier meinen Weg. Vielleicht hilft es ja dem Einen oder Anderen. Als Voraussetzungen brauchst du:
- Einen ESP32 Micro Controller
- Einen Rechner mit Linux (Windows geht natürlich auch, aber ich verwende Linux)
- Ein wenig Kenntnisse in Python (aber nicht viel).
Am Anfang steht die Firmware
Um Python Code auf dem Controller ausführen zu können, brauchst Du eine spezielle Firmware. Diese findest Du hier. Zum Zeitpunkt des Artikels habe ich mich für die Stable Version v1.14 entschieden. Nach dem Download stellt sich die Frage, wie Du die Firmware auf den Controller bekommst. Dazu verwendest du das Python Programm esptool. Das Tool kannst Du global mit Python pip installieren. Ich empfehle Dir aber die Installation in einem „Virtual Environment“ durchzuführen. Das hat den Vorteil, dass Du genau die Bibliotheken installieren kannst, die du für Dein Projekt benötigst, ohne einen Konflikt mit anderen Bibliotheken auf Deinem System zu riskieren. Außerdem kannst Du so eine Umgebung wieder komplett löschen.
ESPTool installieren
Öffne zunächst ein Terminal und lege eine virtuelle Umgebung für Python an. Wie das geht ist in diesem Blogpost beschrieben.
Im nächsten Schritt installierst Du die notwendigen Bibliotheken. Auch wenn es zunächst nur um das Flashen der Firmware geht, empfehle ich Dir folgende Bibliotheken in der genannten Reihenfolge zu installieren:
- wheel
- esptool
- adafruit-ampy
Dazu gibt Du in der Linux Konsole (achte darauf, dass Du Dich in der virtuellen Umgebung befindest) folgende Befehle ein:
$ pip install –upgrade wheel
$ pip install –upgrade esptool
$ pip install –upgrade adafruit-ampy
Der Zusatz ist bei einer frisch angelegten virtuellen Umgebung zwar unnötig, aber eine gute Angewohnheit. Für den Fall, dass Du eine ältere Fassung installiert hast, wird diese dann aktualisiert.
Serial Port Permissions
Unter Linux haben in der Regel nicht alle User das Recht, über Serielle Leitungen zu kommunizieren. Damit Linux User mit einem Controller über USB kommunizieren dürfen, müssen Sie der Gruppe dialout
angehören. Der Name stammt noch aus der Zeit der Modems. Und auch, wenn man mit seinem Controller nicht telefonieren möchte, so müssen User doch dieser Gruppe angehören. Nutzer mit root Rechten können Dich der Gruppe mit folgendem Befehl hinzufügen:
sudo usermod -a -G dialout $USER
Der Befehl geht davon aus, dass der aktuelle User root Rechte hat. Ansonsten musst Du $USER
, durch den Login des Users ersetzen, der der Gruppe hinzugefügt werden soll. Wenn Du gerade angemeldet bist, am Besten einmal abmelden und wieder anmelden, damit Linux die neue Gruppenzugehörigkeit auch bekannt ist.
Endlich flashen
Jetzt geht es endlich ans flashen, also der Übertragung der Firmware auf den Controller. Die Firmware hast Du heruntergeladen und dir virtuelle Umgebung ist aktiv. Nun solltest Du eine eventuell vorhandene Firmware löschen. Ich würde Dir raten diesen Schritt immer zu machen. Es kann auch ohne gehen, aber der Vorgang dauert nicht lange und Du bist auf der sicheren Seite. Zum Löschen einer eventuell vorhandenen Firmware gibst Du folgenden Befehl ein:
$ esptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash
Den Port musst Du eventuell anpassen. Achte darauf, dass du ein USB Kabel verwendest, bei dem alle vier Adern beschaltet sind. Es gibt auch Kabel, die nur zum Laden sind. Wenn Du zum Beispiel mit einem Kabel Daten von Deinem Smartphone zum Computer übertragen kannst, dann ist es ein „gutes“ Kabel.
Wenn Du nicht weißt, an welchem Port Dein esp angeschlossen ist, dann ziehe das Kabel einmal ab, schließe es wieder an und tippe in der Konsole den Befehl:
$ dmesg
Hier sollten die letzten Zeilen Dir verraten, ob das Gerät erkannt wurde und wie der Port lautet.
War das Löschen erfolgreich, kannst Du nun die Firmware (endlich) flashen. Dazu gibst Du folgenden Befehl ein:
$ esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 write_flash -z 0x1000 esp32-idf4-20210202-v1.14.bin
Den Namen der Firmware und den Port musst Du entsprechend anpassen. Der Vorgang dauert eine kleine Weile und wenn alles gut geht, Kannst Du nun anfangen, den Controller mit Python zu programmieren.
Wie geht es weiter?
Nun möchtest Du sicherlich direkt loslegen. Lese doch einfach hier weiter.