Was ist der ESP32?
Der ESP32 kam scheinbar aus dem Nichts – doch heute ist er in aller Munde! Er ermöglicht das einfache Verbinden von WiFi-Netzwerken und Bluetooth-Geräten und wurde nicht zuletzt dadurch auch zu einem Grundwerkzeug der Maker-Community. Hier werfen wir einen Blick auf seine kurze Geschichte und zeigen, wie man als Anfänger in diese Welt einsteigt und welche Entwicklungsunterstützungen verfügbar sind.
Der ESP32 ist zu einem Grundbegriff für eine Vielzahl von Maker-freundlichen und WiFi-fähigen Entwicklungsboards und Chips geworden. Sie alle basieren auf der Technologie von Espressif, einer chinesischen „fabless“ Firma (also ohne eigene Chipproduktion), die im Jahr 2008 gegründet wurde. Ihr erstes Produkt – ein 2.4 GHz WiFi SoC (System-on-Chip) – kam 2013 auf den Markt: Der ESP8089, welcher für Tablets und Set-Top-Boxen gedacht war. Aber es war der 2014 veröffentlichte ESP8266, der für die eigentliche Bekanntheit dieser Produktfamilie in der Maker-Community sorgte.
Die erste große Bekanntheit erlangten diese Module im Jahr 2014 als Hackaday ein neues 5$ WiFi-Modul ankündigte, das über Seed Studio vertrieben wurde. Dieses als ESP-01 bekannte Modul wurde vom ebenfalls in China ansässigen Dritthersteller Ai-Thinker entwickelt. Mit nur acht Pins (zwei davon sind UART-Signale, die die Steuerung des Moduls über AT-Kommandos ermöglichen) war das Modul einfach in Arduino-Plattformen zu integrieren und konnte somit auch simplere Boards, wie etwa den Arduino Uno, mit einem Internetzugang ausstatten. Der einzige Haken an der Sache war allerdings, dass alle Datenblätter nur auf Chinesisch verfügbar waren. Letztendlich war das aber kein wirkliches Hindernis für die Maker-Community, da sich schnell Freiwillige fanden, die die Dokumente mit Google Translate übersetzten und dann auch Softwarebibliotheken zur Verfügung stellten.
Natürlich war es offensichtlich, dass es sich bei den Modulen auch um vollwertige Mikrocontrollersysteme handelt. Der Prozessor verfügte über GPIOs („General-Purpose Inputs/Outputs“, freiverwendbare digitale Ein- und Ausgänge), Ausgänge für pulsweiten-modulierte Signale (PWM), einen analog-zu-digital-Wandler (ADC) und natürlich all die bekannten seriellen Standardinterfaces. Warum also Code für einen Arduino oder einen anderen zusätzlichen Prozessor schreiben, wenn man den ESP8266 auch direkt programmieren kann?
Ende 2014 veröffentlichte Espressif ein SDK („Software Development Kit“), womit man eigenen Code erstellen konnte, der dann zusammen mit der WiFi-Software auf den Modulen lief. Damit konnten IoT-Anwendungen komplett eigenständig auf Modulen, wie dem ESP-01, ausgeführt werden. Das SDK gab es in zwei verschiedenen Versionen: Die eine Version basierte auf dem Echtzeitbetriebssystem FreeRTOS während die andere Callbacks und Timer nutzte, damit sich Anwendercode und WiFi-Stack den Prozessor teilen konnten. Nach Angaben des Datenblattes blieben dem Anwender etwa 50 kB Speicher für eigenen Programmcode .
Die zurzeit verfügbaren Produkte der ESP32-Serie verfügen über einen Dual-Core Tensilica Xtensa LX6 32-Bit Prozessor. Mit ihren 48 Pins bieten sie 520 kB SRAM und – je nach Modell – zwischen 4 und 8 MB Flash. Auf der Wireless-Seite stehen 2,4 GHz WiFi und Bluetooth/Bluetooth LE Version 4.2 zur Verfügung. Ein Ultra-Low-Power (ULP) Coprozessor, der im Endeffekt einen programmierbaren Zustandsautomat darstellt („Finite State Machine (FSM)“), ist ebenfalls integriert. Dieser kann zum Beispiel bestimmte Peripherieeinheiten überwachen, während der Hauptprozessor im Tiefschlaf (Low-Power-Modus) ist. Werden entsprechende Ereignisse erkannt, kann er den Hauptprozessor wieder aufwecken, was besonders für batteriebetrieben Anwendungen interessant ist.
Mit dem ESP32-S2 (Single-Core) und dem ESP-S3 (Dual-Core) – jeweils im 56-Pin-Gehäuse – stehen dem Anwender der neuere Xtensa LX7 32-Bit Prozessor zur Verfügung. Diese 240 MHz-Kerne verfügen über Vektorinstruktionen, die die Verarbeitung von Algorithmen aus der digitalen Signalverarbeitung (wie zum Beispiel neuronale Netzwerke) stark beschleunigen. WiFi und Bluetooth sind ebenfalls wieder integriert, wobei das Bluetooth-Interface auf die neuere Version 5.0 aktualisiert wurde. Die Peripherie blieb weitestgehend unverändert. Als wichtigste Neuerungen kamen hier USB On-the-Go (OTG) und TWAI™, was ein zweiadriges Automotive-Interface ist, hinzu. TWAI ist kompatibel zur ISO 11898-1, welche auch als CAN bekannt ist. In Sachen Security haben die Module ebenfalls aufgeholt und bieten neben einem RSA-basierten, abgesicherten Bootvorgangs auch eine Verschlüsselung des Flashs sowie einen dedizierten Beschleuniger für Hash-basierte Authentifikation („Hash-based Message Authentication Code (HMAC)“).
Vor kurzem wurden RISC-V-basierte Prozessoren in das Produktportfolio aufgenommen. Der ESP32-C3 verfügt nur über eine einzelne CPU, welche auch nur mit zu 160 Mhz getaktet werden kann (Abbildung 2), allerdings verfügt er mit bis zu 2,55 CoreMark/MHz im Endeffekt über die gleiche Leistung wie die Xtensa LX7 Prozessoren der ESP32-S Serie. Was Speicher und Peripherie angeht ähnelt er grob dem ESP32-S – allerding mit einer begrenzten Pinanzahl von nur 32 Pins.
Eine der frustrierenden Tatsachen bei der Entwicklung von Programmen für Mikrocontroller ist wohl, dass man das Programm erst kompilieren und downloaden muss, bevor man sieht, ob auch alles so funktioniert wie geplant. Das kann schnell sehr viel Zeit beanspruchen – auch wenn man nur eine einzige Zeile in seinem Programm geändert hat. Für eine etwas „interaktivere“ Programmiererfahrung ist die BASIC-Option von Annex WiFi RDS einen Blick wert. Die Entwicklungsumgebung läuft in einem normalen Webbrowser. Ist der ESP erst einmal mit dem eigenen WiFi verbunden, kann man den eigentlichen Code direkt im Webbrowser seiner Wahl schreiben (Code 1). Zuvor muss allerdings eine entsprechende Firmware auf den ESP32 aufgespielt werden, welche von Annex WiFi RDS zur Verfügung gestellt wird. Da der BASIC-Code interpretiert und nicht kompiliert wird, kann er direkt ausgeführt werden, sobald man fertig getippt hat.
Es gibt eine unglaubliche große Anzahl an Drittanbietern, die die Entwicklung von IoT-Lösungen mit ihren Produkten unterstützen. Zusammen mit Amazon AWS bietet Espressif eine komplettes KI-basiertes Framework zur Bilderkennung und Audioverarbeitung für ihre ESP-EYE Entwicklungsboards an. Für die Integration von Amazon Alexa stehen die auf der ESP32-WROVER-E Serie basierenden ESP32-Vaquita Boards zur Verfügung.
Wir reden hier aber nicht nur über das Blinken einzelner LEDs oder das Einlesen von ADC-Werten – einige dieser komplexeren Anwendungen und Projekte wären selbst für professionelle Teams von Ingenieuren eine wirkliche Herausforderung. Für Maker ist besonders die große Breite an verfügbaren Entwicklungsplattformen (Hardware und Software) interessant – gepaart mit einer großartigen Community, die hinter diesen leistungsstarken Chips steht. Was auch immer Sie also entwickeln möchten – wenn es über eine Wireless-Verbindung verfügen soll, werden Sie mit dem ESP32 bestimmt nichts falsch machen.
Die Wireless- und Low-Power-Produkte von Espressif zielen darauf ab, Anwendungen aus dem brandaktuellen Bereich „Artificial Intelligence of Things (AIoT)“ auf den Markt zu bringen. Der ESP8266 verbindet eben genau diese Aspekte, indem er einen einfach zu verwendenden einzelnen Chip darstellt, der bereits über die nötige Software verfügt, um ihn in WiFi-Netzwerke zu integrieren.
Was steckt unter der Haube des ESP32?
Im Kern basiert der ESP8266 auf einem Tensilica Xtensa L106 32-bit RISC-Prozessor. Dieser vielleicht exotisch klingende Prozessor wird als lizensierbares IP-Modul („Intellectual Property“) von der Firma Cadence zur Verfügung gestellt. Zufolge einer Pressemeldung von Cadence aus dem Jahr 2007 , bietet dieser Prozessor eine bessere Dhrystone-MIPS-Leistung als ein Arm Cortex-M3. Weiterhin vermerkt Cadence, dass der Kern mit einer geringen Verlustleistung (im mW-Bereich) pro MHz betrieben werden kann, was gerade für batteriebetriebene IoT-Anwendungen („Internet of Things“) interessant ist.Die erste große Bekanntheit erlangten diese Module im Jahr 2014 als Hackaday ein neues 5$ WiFi-Modul ankündigte, das über Seed Studio vertrieben wurde. Dieses als ESP-01 bekannte Modul wurde vom ebenfalls in China ansässigen Dritthersteller Ai-Thinker entwickelt. Mit nur acht Pins (zwei davon sind UART-Signale, die die Steuerung des Moduls über AT-Kommandos ermöglichen) war das Modul einfach in Arduino-Plattformen zu integrieren und konnte somit auch simplere Boards, wie etwa den Arduino Uno, mit einem Internetzugang ausstatten. Der einzige Haken an der Sache war allerdings, dass alle Datenblätter nur auf Chinesisch verfügbar waren. Letztendlich war das aber kein wirkliches Hindernis für die Maker-Community, da sich schnell Freiwillige fanden, die die Dokumente mit Google Translate übersetzten und dann auch Softwarebibliotheken zur Verfügung stellten.
Wie kann der ESP32 so günstig sein?
Das Großartige an den ESP8266-basierten Modulen (Figure 1) war die geringe Anzahl an zusätzlich notwendigen Bauteilen, um ein funktionsfähiges WiFi-System zu bauen. Hat man eine 3,3 V-Versorgung zu Verfügung, so braucht man nur noch ein paar Widerstände und Kondensatoren, eine PCB-Antenne, ein externes QSPI-Flash und einen Quarz mit einer Frequenz zwischen 24 und 52 MHz. Während des Bootvorgangs lädt sich der ESP8266 seine Firmware aus dem Flash und kopiert sie in das interne SRAM, von wo aus sie dann auch ausgeführt wird.Natürlich war es offensichtlich, dass es sich bei den Modulen auch um vollwertige Mikrocontrollersysteme handelt. Der Prozessor verfügte über GPIOs („General-Purpose Inputs/Outputs“, freiverwendbare digitale Ein- und Ausgänge), Ausgänge für pulsweiten-modulierte Signale (PWM), einen analog-zu-digital-Wandler (ADC) und natürlich all die bekannten seriellen Standardinterfaces. Warum also Code für einen Arduino oder einen anderen zusätzlichen Prozessor schreiben, wenn man den ESP8266 auch direkt programmieren kann?
Ende 2014 veröffentlichte Espressif ein SDK („Software Development Kit“), womit man eigenen Code erstellen konnte, der dann zusammen mit der WiFi-Software auf den Modulen lief. Damit konnten IoT-Anwendungen komplett eigenständig auf Modulen, wie dem ESP-01, ausgeführt werden. Das SDK gab es in zwei verschiedenen Versionen: Die eine Version basierte auf dem Echtzeitbetriebssystem FreeRTOS während die andere Callbacks und Timer nutzte, damit sich Anwendercode und WiFi-Stack den Prozessor teilen konnten. Nach Angaben des Datenblattes blieben dem Anwender etwa 50 kB Speicher für eigenen Programmcode .
Neue ESP32-Produkte kommen auf den Markt
Seit dieser Zeit hat Espressif den Erfolg seiner Wireless-SoCs stets weiter ausgebaut. Sie bieten dabei nicht nur die eigentlichen Chips an, sondern auch ein breites Spektrum an einsatzbereiten Hardwaremodulen, die Maker und Entwicklern den schnellen Aufbau von Prototypen ermöglichen.Die zurzeit verfügbaren Produkte der ESP32-Serie verfügen über einen Dual-Core Tensilica Xtensa LX6 32-Bit Prozessor. Mit ihren 48 Pins bieten sie 520 kB SRAM und – je nach Modell – zwischen 4 und 8 MB Flash. Auf der Wireless-Seite stehen 2,4 GHz WiFi und Bluetooth/Bluetooth LE Version 4.2 zur Verfügung. Ein Ultra-Low-Power (ULP) Coprozessor, der im Endeffekt einen programmierbaren Zustandsautomat darstellt („Finite State Machine (FSM)“), ist ebenfalls integriert. Dieser kann zum Beispiel bestimmte Peripherieeinheiten überwachen, während der Hauptprozessor im Tiefschlaf (Low-Power-Modus) ist. Werden entsprechende Ereignisse erkannt, kann er den Hauptprozessor wieder aufwecken, was besonders für batteriebetrieben Anwendungen interessant ist.
Mit dem ESP32-S2 (Single-Core) und dem ESP-S3 (Dual-Core) – jeweils im 56-Pin-Gehäuse – stehen dem Anwender der neuere Xtensa LX7 32-Bit Prozessor zur Verfügung. Diese 240 MHz-Kerne verfügen über Vektorinstruktionen, die die Verarbeitung von Algorithmen aus der digitalen Signalverarbeitung (wie zum Beispiel neuronale Netzwerke) stark beschleunigen. WiFi und Bluetooth sind ebenfalls wieder integriert, wobei das Bluetooth-Interface auf die neuere Version 5.0 aktualisiert wurde. Die Peripherie blieb weitestgehend unverändert. Als wichtigste Neuerungen kamen hier USB On-the-Go (OTG) und TWAI™, was ein zweiadriges Automotive-Interface ist, hinzu. TWAI ist kompatibel zur ISO 11898-1, welche auch als CAN bekannt ist. In Sachen Security haben die Module ebenfalls aufgeholt und bieten neben einem RSA-basierten, abgesicherten Bootvorgangs auch eine Verschlüsselung des Flashs sowie einen dedizierten Beschleuniger für Hash-basierte Authentifikation („Hash-based Message Authentication Code (HMAC)“).
Vor kurzem wurden RISC-V-basierte Prozessoren in das Produktportfolio aufgenommen. Der ESP32-C3 verfügt nur über eine einzelne CPU, welche auch nur mit zu 160 Mhz getaktet werden kann (Abbildung 2), allerdings verfügt er mit bis zu 2,55 CoreMark/MHz im Endeffekt über die gleiche Leistung wie die Xtensa LX7 Prozessoren der ESP32-S Serie. Was Speicher und Peripherie angeht ähnelt er grob dem ESP32-S – allerding mit einer begrenzten Pinanzahl von nur 32 Pins.
ESP32-Anwendungen erstellen
Für den Entwickler steht eine breite Auswahl an Möglichkeiten zur Verfügung, um eigne Anwendungen zu erstellen. Den einfachsten Einstieg für Maker, die bereits Erfahrung mit Arduino haben, stellt die wohl-vertraute Arduino DIE dar: Über File -> Preferences wählt man ESP32 in Tools -> Board -> Boards Manager (Abbildung 3) aus, um die Arduino-ESP32 Packages einzubinden. Ist das erst einmal erledigt, stehen einem eine breite Auswahl an Beispielen unter File -> Examples zur Verfügung – genauso wie man es von jeder anderen Arduino-Plattform kennt. Der Quellcode wird mit der typischen ‘.ino’-Endung gespeichert und das eigentliche Programm wird mittels der bekannten setup() und loop() Funktionen erstellt.led = 2 ’ GPIO02. Change with the pin where your led is connected
pin.mode led, output
for z = 0 to 1000
pin(led) = 1 - pin(led)
pause 500
next z
Code 1: Einfacher BASIC-Code zum Blinken einer LED mit der Annex WiFi RDS Entwicklungsumgebung.pin.mode led, output
for z = 0 to 1000
pin(led) = 1 - pin(led)
pause 500
next z
Es gibt eine unglaubliche große Anzahl an Drittanbietern, die die Entwicklung von IoT-Lösungen mit ihren Produkten unterstützen. Zusammen mit Amazon AWS bietet Espressif eine komplettes KI-basiertes Framework zur Bilderkennung und Audioverarbeitung für ihre ESP-EYE Entwicklungsboards an. Für die Integration von Amazon Alexa stehen die auf der ESP32-WROVER-E Serie basierenden ESP32-Vaquita Boards zur Verfügung.
Was werden Sie mit dem ESP32 bauen?
Der Erfolg, den Espressif mit den ESP32 Chips und Modulen in so kurzer Zeit bereits verbuchen kann, ist mehr als nur beachtlich. Vergleicht man Espressif mit einigen der etablierten europäischen und auch amerikanischen MCU-Hersteller, dann fällt auf, wie viel Arbeit sie in die gute Dokumentation und den weiten Software-Support investiert haben – alles, um so die Inbetriebnahme von verschiedenster Peripherie zu vereinfachen. Weiterhin bieten sie eine beachtliche Anzahl an Beispielanwendungen und -programmen.Wir reden hier aber nicht nur über das Blinken einzelner LEDs oder das Einlesen von ADC-Werten – einige dieser komplexeren Anwendungen und Projekte wären selbst für professionelle Teams von Ingenieuren eine wirkliche Herausforderung. Für Maker ist besonders die große Breite an verfügbaren Entwicklungsplattformen (Hardware und Software) interessant – gepaart mit einer großartigen Community, die hinter diesen leistungsstarken Chips steht. Was auch immer Sie also entwickeln möchten – wenn es über eine Wireless-Verbindung verfügen soll, werden Sie mit dem ESP32 bestimmt nichts falsch machen.
Fragen oder Kommentare?
Haben Sie technische Fragen oder Anmerkungen zu diesem Artikel? Schreiben Sie eine E-Mail an den Autor über stuart.cording@elektor.com oder direkt and das Elektor-Team über editor@elektor.com.
Übersetzung: Stephan Nolting