Espressif IDF für ESP32-S2 Installieren

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:

gitforwindows.org

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)

Windows Umgebungsvariablen – Git Verzeichnis einstragen

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.

ESP-IDF Tool Installer

Datei ausführen und den Dialogen folgen.

ESP-IDF Tool Installer – Lizenzvereinbarungen bestätigen

Python Version auswählen. Ich verwende die 3.9er, da ich ein paar Runden gedreht haben war diese bei mir schon installiert.

ESP-IDF Tool Installer – Wah der Python Version

Wahl der installierten Git Version, diese sollte vom Installationsprogramm erkannt werden. (Es ist an dieser Stelle auch möglich Git neu zu installieren) .

ESP-IDF Tool Installer – Git auswählen oder 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.

ESP-IDF Tool Installer – Automatischer oder manueller Download.

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.

Setzen der Umgebungsvariablen

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.

Windows 10 Startemenü – Link zur Konsole

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.

Hello World Beispiel Projekt

In der noch offenen Konsole in das ensprechende Verzeichnis wechseln.

Konsole – Wechsel ins Projektverzeichnis

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

idf.py set-target
Konsole – Ausgabe der möglichen Zielplattformen

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
Konsole – Ausgabe nach der Zielwahl

Nun kann die Konfiguration gestartet werden.

idf.py menuconfig
Konsole – Menükonfiguration

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.

Windows Gerätemanager – Ermitteln der seriellen Schnittstelle

Da es beim mir COM30 ist sieht der Befehl wie folgt aus.

idf.py -p COM30 flash
Konsole – Ausgabe nach dem Flashen

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)

BefehltBeschreibung
–helpListed 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
buildKonfiguriert und kompiliert die Sourcen
cleanLöscht das Kompilat aber nicht die Konfiguration die durch build erstellt wurde
fullcleanLöscht alles, die mit menuconfig erstellet Prjektkonfiguration wird beibehalten
[-p <PORT>] [-b <BOUD>] [-C <Projekt Verzeichnis>] fashSchreibt das Programm auf den ESP
[-p <PORT>] monitor Gibt den seriellen ouptut des Boards aus. (Ctrl-] schliesst den Monitor)
app / bootloader / partiation_tableSorgt dafür dass nur der angebene Teil gebaut wird. Z.B mit bootloader wird nur dieser gebaut.
app-falsh / bootloader / partition_tableAnalog 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
reconfigureZwing CMAKE dazu erneut zu Konfigurieren und zu Bauen
python-cleanLöscht Python-Ausgaben aus dem Prjektverzeichnis, sollte immer dann gestartet weden wenn die Python Version gewechselt wird.
sizeZeigt ein paar Inforation zur Speichergröße der App.
size-componentsZeigt ein Inforation zum Speicherverbrauch der Komponenten
size-filesZeigt 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.
Espressif IDF idf.py – Befehle (Quelle: Espressif)

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/OrdnerBeschreibung
CMakeLists.txtHaupt-Konfigurationsdatei für CMake, sie includiert dei /tools/cmake/project.cmake und setzt den Projektnamen
sdkconfigDiese 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
Espressif IDF – Projekt-Verzeichnis Bestandteile

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.

Windows Umgebungsvariablen für das IDF.

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

Quellen

Getting Started with Espressif IDF

Github ESP-IDF Extension für VS-Code

Github Esressif ID Fehlerliste

Python Webseite

Espressif Build System

Schreibe einen Kommentar

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