ESP32 und ESP-IDF

img 20221223 211612Auf dieser Webseite geht es überwiegend um das Programmieren des ESP32 mit FreeRTOS und der von Espressif bereitgestellten Entwicklungsumgebung ESP-IDF (IoT Development Framework), die wir in VS Code integrieren werden und der Programmiersprache C.

Die Einrichtung der ESP-IDF-Toolchain und die Integration in VS Code sind komplexer als bei Arduino. Unterschiedliche Versionen, Abhängigkeiten und Betriebssysteme führen dazu, dass Schritte nicht immer 1:1 reproduzierbar sind. Die hier beschriebenen Vorgehensweisen sind bewährte Wege, aber nicht die einzigen. Wer mit ESP-IDF arbeitet, sollte bereit sein, mitzudenken, zu prüfen und bei Bedarf zu improvisieren.

Diese Seite richtet sich an Entwickler, die den ESP32 professionell nutzen möchten – Maker sind selbstverständlich willkommen. Für das Verständnis der hier beschriebenen Inhalte werden grundlegende Kenntnisse in C vorausgesetzt.

Deswegen wird hier bewusst nicht mit reinen Copy-&-Paste-Anleitungen gearbeitet – außer an Stellen, an denen es sinnvoll erscheint. Ziel ist, dass der Leser versteht, was er tut und eigene Entscheidungen treffen kann. Die beschriebenen Schritte sind bewährte Vorgehensweisen – nicht die einzig mögliche Umsetzung.

Die Beschreibung zur Installation des ESP-IDF, sowie die Integration in VS Code (Visual Studio Code) wird in weiteren Artikeln beschrieben.

Alternativ bietet Espressif eine eigene Eclipse-basierte IDE an, die die gleiche Funktionalität in einer vorkonfigurierten Umgebung bereitstellt. Diese hatte ich auch bereits angewendet, was auch eine gute Erfahrung war, da ich mich im Umgang mit Eclipse-basierten IDEs sehr gut auskenne und auch „heimisch“ fühle.

Allerdings hat es mich wegen meiner hauptsächlichen Tätigkeit mit Visual Studio für C# und TwinCAT sowie Visual Studio Code für Web Technolgien, dann doch dazu bewegt, auch die ESP-IDF in VS Code zu integrieren. Auch die Verwendung von Git in VS Code ist sehr komfortabel.

Die Entwicklungsumgebung ESP-IDF ist ein mächtiges Werkzeug, das es ermöglicht, jegliche Funktionalität des ESP32 auszuschöpfen. Als kleinen Vorgeschmack seien einige Vorteile der Verwendung der ESP-IDF genannt.

  • Vollwertiges Hardware Debugging, Breakpoints, Watchpoints, Single Step,
  • Core Dumps & Backtrace-Decoder, Automatische Absturz-Analyse,
  • Heap-Analyse / Speicherverwaltung,
  • Echtzeitfähigkeit,
  • Wi-Fi & BLE Low-Level, Volle Kontrolle über Netzwerke,
  • Partition Tables / OTA Slots,
  • Vollständig steuerbares RTOS,
  • Feinsteuerung der Scheduler-Parameter z. B. Tick Rate, Stack Sizes, Hooks, für deterministisches Echtzeitverhalten,
  • Natives FreeRTOS, kein Wrapper,
  • Menuconfig,
  • Intellisense bei Integration in VSCode,
  • und vieles mehr.

Hier soll es allerdings nicht um „ESP-IDF ist Besser oder Schlechter als Arduino“ gehen, da man das so eh nicht direkt sagen kann. Arduino basiert schließlich auf ESP-IDF und baut darauf auf. Die ESP-IDF und FreeRTOS sind vollständig in der Arduino Entwicklungsumgebung integriert, mit dem kleinen Unterschied, dass die Arduino IDF ein Wrapper um die ESP-IDF ist und vieles abstrahiert und vereinfacht. Das ist nicht gut oder schlecht, es ist einfach so und viele schwören darauf.

Ich persönlich kenne mich mit Arduino nicht wirklich gut aus, da ich mich damit nie wirklich befasst habe. Daher werde ich mich hier nur geringfügig aus dem Fenster lehnen und nur wenige Vergleiche machen, und das auch nur wenn es interessant sein könnte.

Es sei von meiner Seite aus einfach gesagt, dass für mich die ESP-IDF eine sehr gute Entscheidung ist, da ich als Entwickler gerne tief hinter die Kulissen schaue und – so gut wie möglich – versuche zu verstehen was im Hintergrund alles passiert. Das kommt vermutlich auch ein bisschen aus der Zeit der Bare-Metal Programmierung, aus der man sich auch nur schwer lösen kann, wenn man einmal tief in dem Thema war.

Man muss an dieser Stelle aber noch anmerken, dass ein BS (Betriebssystem; engl. OS: Operating System), wie FreeRTOS natürlich auch abstrahiert. Das Augenmerk wird aber auf andere wesentliche Aspekte gelenkt, wodurch die Freude am Programmieren keineswegs getrübt, sondern eher bereichert wird. Auf einmal tauchen vollkommen andere, neue Probleme auf, von denen einige wiederum so einfach und schön zu lösen sind, was vorher nur mit großem Aufwand möglich war.

Hier denkt man nicht mehr ausschließlich in Super-Loops und Funktionen, sondern mehr in Tasks, Queues, Semaphore und Mutual Exclusions (Mutex). Wobei Super-Loops und Funktionen selbstverständlich weiterhin wesentliche Bestandteile in der RTOS-Programmierung bleiben.

 

Weiterführende Links