Last Updated on 25. Dezember 2020 by sfambach
Mein neuestes Board besitzt einen ESP32-S2 Chip. Dieser kann, zum Zeitpunkt der Erstellung dieses Beitrags, nur über die Espressif IDF programmiert werden. Nach vielen Anläufen habe ich es geschafft diese unter Windows zu installieren. Die Installation und die dabei entstandenen Probleme möchte ich hier kurz beschreiben.
Fakten
Wir benötigen:
Anwendungsbereiche
- Programmierung aller ESP einschliesslich ESP32-S2.
- Programmierframework des Herstellers als erstes für neue Prozessoren verfügbar.
Installation
Git
Git wird benötigt um später das Espressif IDF von Github herunter zu laden. Die letzter Version kann über die folgende Webseite herunterladen werden:
Auführen und installieren. Am Ende noch den Pfad zu Git in die Windows Umgebungsvariblen eintragen. (WindowsTaste + R zum öffnen [Enter] -> Reiter Erweitert -> Knopf Umgebungsvariablen->Pfad wählen -> Neu)
Das wars auch schon mit Git. Weiter gehts mit dem IDF.
Espressif IDF
Das IDF kann auf der Herstellerseite oder über folgenden Direktlink herunter geladen werden. Ich verwende die Version 2.3.
Datei ausführen und den Dialogen folgen.
Python Version auswählen. Ich verwende die 3.9er, da ich ein paar Runden gedreht haben war diese bei mir schon installiert.
Wahl der installierten Git Version, diese sollte vom Installationsprogramm erkannt werden. (Es ist an dieser Stelle auch möglich Git neu zu installieren) .
Ich habe ein paar Versionen ausprobiert und bin fast verzweifelt weil jede andere Fehler erzeugte. Kurz vor der Resignation habe ich den aktuellen Build ausprobiert. Dieser hat bei mir dann endlich funktioniert.
Die IDF wird nach „<Benutzer Profil>/esp“ herunter geladen (Also landet sie bei Windows auf dem Desktop). Solltet ihr, wie ich, ein anderes Verzeichnis wünschen, gebt das unten an.
Ziel Wählen für die Espressif Tools wählen. (die Zweiteilung verstehe ich immer noch nicht aber egal. )
Im nächsten Dialog habe ich mal full Service „Wachen, Unterbodenschutz und Polieren gewählt.
Zusammenfassung noch bestätigen.
… und dem Balken folgen …. schon mal je nach Tageszeit einen Kaffee oder ein Bier holen …
… ESP-IDF wird herunter geladen
Evtl. Noch die Management Console bestätigen. Am Ende fragt er ob die Konsole starten möchten soll, dies habe ich bestätigt.
Nun sollte die IDF in dieser Konsole funktionieren. Nur in dieser weil hier ein Batch Skript ausgeührt wurde. Würde man die cmd. exe so öffenen funktioniert die Umgebung nicht weil die Umgebungsvariablen nicht gesetzt sind. Es gibt jedoch einen Link im Startemenü um die „ESP Konsole“ erneut starten zu können. Wie es auch anders geht beschreibe unter Sonstiges, erstmal testen wir die Umgebung.
Programmierung
Im Windows-Explorer findet ihr im esp-idf Verzeichnis, unter Examples, einige Beispielprogramme. Diese sind für einen ersten Test perfekt. Kopiert eines der Beispiele in ein Arbeitsverzeichnis. Bei mir liegt das Arbeitsverzeichnis direkt im Benutzerordner und heisst esp. Ich verwende das Hello World Projekt im Unterverzeichnis „get-started“ – zum Start erstmal mit einem einfachen Programm anfangen.
In der noch offenen Konsole in das ensprechende Verzeichnis wechseln.
Nun mal die Zielplattform festlegen. Der Befehl set-target ohne Parameter dahinter listet alle möglichen Zielplatformen auf:
idf.py set-target
Da ich einen Esp32-S2 vorliegen haben verwende ich den Parameter esp32s2 und führe den folgenden Befehl im Verzeichnis hello_world aus. Es gibt eine längere Ausgabe an deren Ende sollte „– Configuration done“ und möglichst kein Fehler stehen.
idf.py set-target esp32s2
Nun kann die Konfiguration gestartet werden.
idf.py menuconfig
In der Regel muss hier nicht viel eingestellt werden. Ich habe die Flashgöße beim mir auf 4MB gesetzt, das war es. Die Navigation erfolgt über die Pfeiltasten, mit Enter kann in ein Untermenü gesprungen werden und mit der Ecape Taste wieder heraus. Gespeicht wird mit Shift + S und beenden werden kann die Konfiguration mit Shift + Q (oder öfters Escape drücken). Im Quellcode können Konstanten definiert werden, die ebenfalls mit dem Tool gefüllt werden können. Ein Beispiel hierfür ist das blink Programm, hier kann der GPIO für die LED eingestellt werden ohne den Code ändern zu müssen.
Nach der Konfiguration wird gebaut. Dies dauert erschreckend lange.
idf.py build
Nach dem Bauen sollte der Satz „Project build complete.“ stehen. Eine Flash-Anleitung gibts gleich mit. Somit flashen wir jetzt unser Board. Hierzu das Board an den Computer anschliessen. Den seriellen Port könnt ihr über den Gerätemanager von Windows herausfinden.
Da es beim mir COM30 ist sieht der Befehl wie folgt aus.
idf.py -p COM30 flash
Mit dem Monitor Befehl können wir uns per Konsole auf das Board verbinden und schauen was es macht.
idf.py -p COM30 monitor
Es hat also geklappt.
Probleme
Compiler/Linker Fehler
Es gibt „komische“ Compiler Fehler die sporadisch auftreten können und nicht wirklich deutbar sind. Der wichtigste Leitsatz hierbei ist, „KEINE LEERZEICHEN IM PFAD- UND DATEINAMEN„
Python 3.9 Installation schlägt fehl
Bei mir ist die Python Installation mit dem IDF Tool fehlgeschlagen. Es gibt die Möglichkeit Python manuell zu installieren. Die aktuelle Version kann unter folgenden Link herunter geladen werden.
https://www.python.org/downloads/
Installation auf Console schlägt fehl mit „.. für Viruelle Umgebung …“
Pfade mal überprüfen, evtl. andere Pyhton oder Espressif IDF Version wählen.
***.py nicht gefunden
Pfade überprüfen, ggf. aktualisieren.
Benötigre Version stimmt nicht – ProgrammXYZ>=Version123
Zum Beispiel:
click>=5.0
pyserial>=3.0
future>=0.15.2
cryptography>=2.1.4
pyparsing>=2.0.3,<2.4.0 pyelftools>=0.22
gdbgui==0.13.2.0
Die Version können mit pip angezeigt und auch aktualsiert werden. Wird eine ältere Version benötig kann diese mit == angebeben werden.
Auflisten der Versionen
pip list
Auf die aktuelle Version updaten
pip install pyserial
Pyserial Version 3.0 einspielen
pip install pyserial==3.0
Flashen bricht mit Fehler 0x50 ab
In alten Versionen gibt es das Ziel (target) esp32s2 nicht sondern nur esp32s2beta. Dies funktioniert zwar beim Compilieren aber nicht beim Fashen. Ab Version > 4.0 ist das funktionierende Zeil vorhanden.
Somit sollte, wenn nur die beta Version verfügbar ist das IDF Framework mindestens auf Version 4.1 aktualisiert werden.
Sonstiges
Wichtige Befehle
Der Befehl zum Aufruf des IDF Tools auf der Console ist idf.py. Alle genannten optionen folgen nach diesem Befehl. Der Befehl muss im entsprechenden Projektverzeichnis aufgerufen werden. ( <TEXT> sind Plathalter für Werte, [-p <PORT] sind optionale Bestandteile, | oder)
Befehlt | Beschreibung |
---|---|
–help | Listed alle Befehle auf. Wird ein Befehl vorangestellt, werden nur die Optionen des Befehls aufgelistet. |
set-target <Ziel> | Setzt die Zielplattform Ziel= esp32, esp32s2 … ohne Parameter werden die verfügbaren Plattformen aufgelistet |
menuconfig | Öffnet die Konfiguration |
build | Konfiguriert und kompiliert die Sourcen |
clean | Löscht das Kompilat aber nicht die Konfiguration die durch build erstellt wurde |
fullclean | Löscht alles, die mit menuconfig erstellet Prjektkonfiguration wird beibehalten |
[-p <PORT>] [-b <BOUD>] [-C <Projekt Verzeichnis>] fash | Schreibt das Programm auf den ESP |
[-p <PORT>] monitor | Gibt den seriellen ouptut des Boards aus. (Ctrl-] schliesst den Monitor) |
app / bootloader / partiation_table | Sorgt dafür dass nur der angebene Teil gebaut wird. Z.B mit bootloader wird nur dieser gebaut. |
app-falsh / bootloader / partition_table | Analog zum letzten Befehl sorgt dieser dafür dass nur der angebene Teil auf das Board geschrieben wird. |
[-p <PORT>] erase_flash | Löscht den Speicher des ESP |
reconfigure | Zwing CMAKE dazu erneut zu Konfigurieren und zu Bauen |
python-clean | Löscht Python-Ausgaben aus dem Prjektverzeichnis, sollte immer dann gestartet weden wenn die Python Version gewechselt wird. |
size | Zeigt ein paar Inforation zur Speichergröße der App. |
size-components | Zeigt ein Inforation zum Speicherverbrauch der Komponenten |
size-files | Zeigt ein Inforation zum Speicherverbrauch der Dateien |
create-project [–path <Zielverzeichnis>] |<Projektname> | Erstellt ein neues Projekt im Zielverzeichnis. Wir nur der Name angeben, legt das Programm einen Ordner mit Projektname im aktuellen Pfad an. Mit path muss ein schon vorhandener leerer Ordner angeben werden. |
Die Befehle können auch kombiniert werden.
idf.py -p COM32 build flash monitor
Beispiel Projektstruktur
Hier die Beispiel-Projektstruktur (Quelle: Espressif )
- myProject/
- CMakeLists.txt
- sdkconfig
- components/ - component1/ - CMakeLists.txt
- Kconfig
- src1.c
- component2/ - CMakeLists.txt
- Kconfig
- src1.c
- include/ - component2.h
- main/ - CMakeLists.txt
- src1.c
- src2.c
- build/
Datei/Ordner | Beschreibung |
---|---|
CMakeLists.txt | Haupt-Konfigurationsdatei für CMake, sie includiert dei /tools/cmake/project.cmake und setzt den Projektnamen |
sdkconfig | Diese Datei wird durch menuconfig erstellt und aktualisiert |
components/ | Optionales Verszeichnis. Komponenten werden dazu verwendet um Projekte zu struktuieren/modularisieren und um andere Bestanteile in ein Projekt einzubinden (zb. Treiber für Sensoren). Die Pfadvariable EXTRA_COMPONENT_DIRS kann im CMakeLists.txt angegeben werden um externe Komponenten mit einzubinden. |
main/ | Beinhaltet den Quellcode des Projektes. |
build/ | Build Ausgabe wird durch CMake generiert |
Mehr hierzu in der Espressif Doku.
Einrichten der Umgebungsvariablen für die Console
Um nicht immer Batch Dateien ausführen zu müssen und um den Weg für eine Programieroberfläche zu ebnen, habe ich bei mir alle Pfade in die Umgebungs Variablen von Windows eingetragen. Dies hat den Vorteil, dass ich einfach nur ein Console zu öffnen brauche und kann das IDF gleich nutzen kann.
Hier nochmal zum rauskopieren, bitte die Pfade entsprechend anpassen.
C:\Users\spam\AppData\Local\Programs\Python\Python39\;C:\Users\spam\esp-idf\tools;C:\Users\spam\.espressif\tools\xtensa-esp32-elf\esp-2020r3-8.4.0\xtensa-esp32-elf\bin;C:\Users\spam\.espressif\tools\xtensa-esp32-elf\esp-2020r3-8.4.0\xtensa-esp32-elf\bin;C:\Users\spam\.espressif\tools\xtensa-esp32s2-elf\esp-2020r3-8.4.0\xtensa-esp32s2-elf\bin;C:\Users\spam\.espressif\tools\xtensa-esp32s3-elf\esp-2020r3-8.4.0\xtensa-esp32s3-elf\bin;C:\Users\spam\.espressif\tools\esp32ulp-elf\2.28.51-esp-20191205\esp32ulp-elf-binutils\bin;C:\Users\spam\.espressif\tools\esp32s2ulp-elf\2.28.51-esp-20191205\esp32s2ulp-elf-binutils\bin;C:\Users\spam\.espressif\tools\cmake\3.16.4\bin;C:\Users\spam\.espressif\tools\openocd-esp32\v0.10.0-esp32-20200709\openocd-esp32\bin;C:\Users\spam\.espressif\tools\ninja\1.10.0\;C:\Users\spam\.espressif\tools\idf-exe\1.0.1\;C:\Users\spam\.espressif\tools\ccache\3.7\;C:\Users\spam\.espressif\tools\dfu-util\0.9\dfu-util-0.9-win64;C:\Users\spam\.espressif\python_env\idf4.3_py3.9_env\Scripts;
Fazit
Ich habe mich gefreut, dass es einen detailliert Installationsanleitung gibt und bin dieser mit wohlwollen gefolgt. Drei Tage später mit schlechter Laune und kurz vor der Resignation hat es geklappt. Dabei wäre es so einfach mit der neusten und „instabielsten“ Version gewesen. Man hätte nur damit anfangen müssen. Ich habe mich hier sicherlich nicht gloreich geschlagen, habe aber auch Stimmen im Internet vernommen, die gar Linux Installiert haben, wo die Installaton kein Problem darstellt. Somit frei nach dem Motto „we did it all wrong, but we did it“ verbuche ich dies unter lessons learned. Was ich mit den alten lessons learned, niemals die aktuelle und unstabile Version zu verwenden machen soll weiss ich noch nicht;) . Gernerell finde ich das Framework interessant und werde noch weiter damit herum experimentieren. Wer nicht so bastelfreudig ist, sollte evtl. noch etwas warten, auch bis vielleicht eine Implementierung für die ArduinoGui vorhanden ist. Zusälich sind einige neuerungen des S2 Controllers noch nicht implementiert, wie Beispielsweise das Time of Flight Protokoll. Hier empfiehlt es sich ebenfalls zu warten oder aktiv bei der Implementierung mit zu wirken.
Verwandte Beiträge
- ESP32-S2 das Spiel mit der Mouse
- Espressif IDF – GPIOs
- Espressif IDF – Tasks
- Espressif IDF – Menuconfig
- Espressif IDF – Timer
- Espressif IDF – Lognachrichten
- Espressif IDF – Fehlerbehandlung
- Espressif IDF – Konsolenausgabe
- Espressif IDF – Projekt erstellen
- LilyGo ESP32-Oled
Quellen
Getting Started with Espressif IDF
Github ESP-IDF Extension für VS-Code