Last Updated on 4. October 2026 by SuffocationLink status: OK
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.
Facts
Wir benötigen:
- Git für WindowsLink status: OK
- ESP-IDF Tool InstallerLink status: OK
- Zeit
Areas of application
- Programmierung aller ESP einschließlich 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 herunterzuladen. Die letzte Version kann über die folgende Webseite heruntergeladen werden:
gitforwindows.orgLink status: OK
Ausführen und installieren. Am Ende noch den Pfad zu Git in die Windows Umgebungsvariablen 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 Manufacturer's websiteLink status: OK oder über folgenden Direktlink heruntergeladen werden. Ich verwende die Version 2.3.
ESP-IDF Tool InstallerLink status: OK
Datei ausführen und den Dialogen folgen.

Python Version auswählen. Ich verwende die 3.9er, da ich ein paar Runden gedreht habe, 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“ heruntergeladen (Also landet sie bei Windows auf dem Desktop). Solltet ihr, wie ich, ein anderes Verzeichnis wünschen, gebt das unten an.

Ziel 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 „Waschen, 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 heruntergeladen

Evtl. noch die Management Console bestätigen. Am Ende fragt er, ob die Konsole starten soll, dies habe ich bestätigt.

Nun sollte die IDF in dieser Konsole funktionieren. Nur in dieser, weil hier ein Batch Skript ausgeführt wurde. Würde man die cmd.exe so öffnen, funktioniert die Umgebung nicht, weil die Umgebungsvariablen nicht gesetzt sind. Es gibt jedoch einen Link im Startmenü, um die „ESP Konsole“ erneut starten zu können. Wie es auch anders geht, beschreibe ich unter Sonstiges, erstmal testen wir die Umgebung.

Programming
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 heißt 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 entsprechende Verzeichnis wechseln.

Nun mal die Zielplattform festlegen. Der Befehl set-target ohne Parameter dahinter listet alle möglichen Zielplattformen auf:
idf.py set-target

Da ich einen Esp32-S2 vorliegen habe, 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 Flashgröße bei mir auf 4MB gesetzt, das war es. Die Navigation erfolgt über die Pfeiltasten, mit Enter kann in ein Untermenü gesprungen werden und mit der Escape Taste wieder heraus. Gespeichert 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 anschließen. Den seriellen Port könnt ihr über den Gerätemanager von Windows herausfinden.

Da es bei 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.
Problems
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 folgendem Link heruntergeladen werden.
https://www.python.org/downloads/Link status: OK
Installation auf Console schlägt fehl mit „.. für Virtuelle Umgebung …“
Pfade mal überprüfen, evtl. andere Python oder Espressif IDF Version wählen.
***.py nicht gefunden
Pfade überprüfen, ggf. aktualisieren.
Benötigte 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 Versionen können mit pip angezeigt und auch aktualisiert werden. Wird eine ältere Version benötigt, kann diese mit == angegeben 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 Flashen. Ab Version > 4.0 ist das funktionierende Ziel vorhanden.
Somit sollte, wenn nur die beta Version verfügbar ist, das IDF Framework mindestens auf Version 4.1 aktualisiert werden.
Miscellaneous
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 Platzhalter für Werte, [-p <PORT] sind optionale Bestandteile, | oder)
| Order | Description |
|---|---|
| –help | Listet 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 erstellte Projektkonfiguration wird beibehalten |
| [-p <PORT>] [-b <BOUD>] [-C <Projekt Verzeichnis>] fash | Schreibt das Programm auf den ESP |
| [-p <PORT>] monitor | Gibt den seriellen Output des Boards aus. (Ctrl-] schließt den Monitor) |
| app / bootloader / partiation_table | Sorgt dafür, dass nur der angegebene 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 angegebene Teil auf das Board geschrieben wird. |
| [-p <PORT>] erase_flash | Löscht den Speicher des ESP |
| reconfigure | Zwingt CMAKE dazu, erneut zu konfigurieren und zu bauen |
| python-clean | Löscht Python-Ausgaben aus dem Projektverzeichnis, sollte immer dann gestartet werden, wenn die Python Version gewechselt wird. |
| size | Zeigt ein paar Informationen zur Speichergröße der App. |
| size-components | Zeigt Informationen zum Speicherverbrauch der Komponenten |
| size-files | Zeigt Informationen zum Speicherverbrauch der Dateien |
| create-project [–path <Zielverzeichnis>] |<Projektname> | Erstellt ein neues Projekt im Zielverzeichnis. Wird nur der Name angegeben, legt das Programm einen Ordner mit Projektname im aktuellen Pfad an. Mit path muss ein schon vorhandener leerer Ordner angegeben werden. |
Die Befehle können auch kombiniert werden.
idf.py -p COM32 build flash monitor
Beispiel Projektstruktur
Hier die Beispiel-Projektstruktur (Quelle: EspressifLink status: OK )
- 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 | Description |
|---|---|
| CMakeLists.txt | Haupt-Konfigurationsdatei für CMake, sie includiert die /tools/cmake/project.cmakeLink status: OK und setzt den Projektnamen |
| sdkconfig | Diese Datei wird durch menuconfig erstellt und aktualisiert |
| components/ | Optionales Verzeichnis. Komponenten werden dazu verwendet, um Projekte zu strukturieren/modularisieren und um andere Bestandteile 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.Link status: OK
Einrichten der Umgebungsvariablen für die Console
Um nicht immer Batch Dateien ausführen zu müssen und um den Weg für eine Programmieroberfläche zu ebnen, habe ich bei mir alle Pfade in die Umgebungsvariablen von Windows eingetragen. Dies hat den Vorteil, dass ich einfach nur eine Console zu öffnen brauche und 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;
Conclusion
Ich habe mich gefreut, dass es eine detaillierte 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 „instabilsten“ Version gewesen. Man hätte nur damit anfangen müssen. Ich habe mich hier sicherlich nicht glorreich geschlagen, habe aber auch Stimmen im Internet vernommen, die gar Linux installiert haben, wo die Installation 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 instabile Version zu verwenden, machen soll, weiß ich noch nicht 😉 . Generell 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ätzlich 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 mitzuwirken.
Related Posts
- ESP32-S2 playing with the mouseLink status: Unknown
- Espressif IDF – GPIOsLink status: Unknown
- Espressif IDF – TasksLink status: Unknown
- Espressif IDF – MenuconfigLink status: Unknown
- Espressif IDF – TimerLink status: Unknown
- Espressif IDF – LognachrichtenLink status: Unknown
- Espressif IDF – FehlerbehandlungLink status: Unknown
- Espressif IDF – KonsolenausgabeLink status: Unknown
- Espressif IDF – Projekt erstellenLink status: Unknown
- LilyGo ESP32-OledLink status: Unknown
Sources
Getting Started with Espressif IDFLink status: OK
Github ESP-IDF Extension für VS-CodeLink status: OK
Github Espressif IDF FehlerlisteLink status: OK
Python WebseiteLink status: OK
Espressif Build SystemLink status: OK
| Date | Change | Author |
|---|---|---|
| 04.10.2026 | Rechtschreibung korrigiert: Tippfehler, Kommas, Groß-/Kleinschreibung, Grammatik | Suffocation |
| 03.10.2026 | Log-Liste eingefügt | Suffocation |
| 30.11.2020 | Post created | Suffocation |