Der "definitive Guide" in die ESP32-Welt
Im Artikel "Symbiose von Informatik und Handwerk" habe ich beschrieben, wie IT und Handwerk immer mehr zusammenwachsen und das "Internet der Dinge" (IoT) einen wesentlichen Beitrag dazu liefert. Nun wollen wir aber etwas konkreter werden und uns einmal anschauen, welche Möglichkeiten uns denn heute geboten sind, IoT-Projekte umzusetzen.
Um ein IoT-Projekt umzusetzen, ist als erstes ein "Computer" notwendig, der unser physikalisches "Ding" mindestens in unserem lokalen Netzwerk oder optional über das Internet programmierbar oder digital auslesbar (smart) macht. In der Regel möchte man entweder eine programmierbare Schnittstelle (API) vor sein physikalisches Gerät setzen oder eine grafische Oberfläche (GUI) zur Verfügung stellen, mit der das Gerät konfiguriert werden kann.
Naheliegende Szenarien sind zum Beispiel:
API
Ein Wasserzähler soll über eine kleine Mikrokamera eingelesen werden und über ein Smarthome-System wie Homeassistant, ioBroker oder KNX ausgelesen werden können.
GUI
Die LEDs eines programmierbaren LED-Streifens sollen über eine Weboberfläche individuell konfigurierbar gemacht werden.
Natürlich macht es keinen Sinn, einen Windows-PC vor jeden LED-Streifen zu hängen und selbst ein maximal abgespeckter PC mit Linux würde immer noch viel zu aufwändig und teuer in der Anschaffung, Wartung und im Stromverbrauch sein. Hier kommen unsere Mikrocontroller ins Spiel. Die bekanntesten (aber bei weitem nicht alle) Kandidaten auf dem Markt sind wohl der Raspberry PI, der Arduino und die ESP32-Systeme. Besonders, wenn man anfängt, sich ernsthaft mit dem Thema zu beschäftigen, ist die Thematik aber oft unüberschaubar. Dieser Artikel gibt Dir einen Überblick über die Unterschiede der Boards und Chips und geht im Anschluss speziell auf die ESP32-Welt ein. Ziel ist es, Dir einen einfachen Einstieg mit allen wichtigen Best Practices an die Hand zu geben, so dass Du schnell und ohne lange Internetrecherchen loslegen kannst. Also der "definitive Guide zum ESP32" im deutschsprachigen Raum. In diesem Teil widmen wir uns den theoretischen Grundlagen, bevor wir im nächsten Teil die Funktionen des ESP32 mit praktischen Beispielen untersuchen und im Anschluss auf diverse konkrete Projekte eingehen.
Raspberry, Arduino und ESP
Raspberry Pi, Arduino und ESP32-Boards sind beliebte Plattformen für DIY-Elektronikprojekte, aber sie haben unterschiedliche Stärken und Einsatzgebiete. Gemein haben sie alle, dass es sich um kleine Chips/Boards handelt, die über diverse Anschlüsse verfügen, über die externe Sensoren (z. B. Temperaturfühler) und Aktoren (z. B. Schalter) an sogenannte GPIO(General Purpose Input/Output)-PINs angeschlossen werden können. Raspberry PIs sind im Wesentlichen Mini-Computer mit einem Betriebssystem (meist Raspberry-OS, ein angepasstes Debian Linux), die komplexe Aufgaben wie das Ausführen von Anwendungen oder das Betreiben eines Servers übernehmen können. Als Arduinos werden normalerweise Mikrocontroller-Boards bezeichnet. Arduino bezeichnet aber nicht nur ein Board bzw. einen Chip, sondern es handelt sich um eine quelloffene komplette Plattform, bestehend aus Hardware, Software und einer IDE. Die Boards werden dabei in der Regel von einem "Microchip AVR"-Mikrocontroller angetrieben.
ESP32 von der Firma Espressif Systems sind ebenfalls Mikrocontroller, die sich durch ihre integrierte WLAN- und Bluetooth-Funktionalität und geringen Energiebedarf auszeichnen und daher ideal für IoT-Projekte sind, bei denen eine drahtlose Verbindung erforderlich ist. Viele weitere Funktionalitäten ergänzen den ESP32-Chip zu einem echten Allrounder. Zudem bietet der ESP32 noch einen energieeffizienten Coprozessor, der im Standby-Betrieb weiterlaufen kann, um Sensordaten abzufragen. Weiterhin enthält der Coprozessor auch noch eine Echtzeituhr und unterstützt hardwarebeschleunigte Verschlüsselungsverfahren wie den Advanced Encryption Standard (AES).
Der ESP32, den man als Kunde am Ende in der Hand hält, ist aber meist ein Board (DevKit), auf dem, neben dem ESP32, noch ein serieller Flash-Speicher für die Firmware, USB-Anschluss, Spannungsregler, GPIO-Pins und eine WLAN-Antenne untergebracht sind. Die Kompatibilität zwischen Arduino und ESP32-Boards ist recht hoch, aber nicht vollständig. Das liegt daran, dass beide Plattformen zwar ähnliche Konzepte und eine große Community teilen, aber dennoch einige grundlegende Unterschiede aufweisen.
Fangen wir mit den Fakten an, die die beiden Plattformen gemeinsam haben.
- Arduino IDE: Die Arduino IDE unterstützt sowohl Arduino als auch ESP32 Boards. Dies ermöglicht es Entwicklern, dieselbe Entwicklungsumgebung für beide Plattformen zu nutzen.
- Gemeinsame Bibliotheken: Viele Bibliotheken, die für Arduino entwickelt wurden, können auch auf dem ESP32 verwendet werden. Dies gilt insbesondere für Bibliotheken, die grundlegende Funktionen wie I/O-Operationen, Sensoren und Aktoren ansteuern.
- Pin-Layout: Einige ESP32-Boards haben ein ähnliches Pin-Layout wie Arduino-Boards, was die Migration von Projekten erleichtert.
Nichtsdestotrotz gibt es einige Unterschiede, die zu beachten sind:
- Architektur: Arduino und ESP32 basieren auf unterschiedlichen Mikrocontrollern. Der ESP32 ist leistungsstärker und bietet mehr Peripheriegeräte.
- Spannungspegel: Der ESP32 arbeitet normalerweise mit 3,3 V (einige Module mit 5 V, die auf 3,3 V heruntergeregelt werden). Arduino Boards können mit 5 V über die USB Buchse oder über einen Stromanschluss mit 7-12 V versorgt werden.
- Spezifische Komponenten: Es gibt einige Geräte und Bibliotheken, die nur auf Arduino-Boards funktionieren.
Einsatzmöglichkeiten
Der ESP32 wird in verschiedenen Branchen und Sektoren eingesetzt, die das Internet der Dinge nutzen.
- Intelligente Industriegeräte: Nutzung für industrielle Automatisierungssysteme sowie Überwachungs- und Kontrollsysteme
- Intelligente medizinische Geräte: Anwendung in Gesundheitsüberwachungssystemen, telemedizinischen Geräten und medizinischen Wearables
- Intelligente Energiegeräte: Ideal für HLK-Systeme (Heizung, Lüftung, Klimatisierung) und Thermostate
- Intelligente Sicherheitsgeräte: Überwachungskameras, Zugangskontroll- und Einbruchserkennungssysteme
- Intelligente Haushaltsgeräte: Beleuchtungssysteme und Haushaltsgeräte wie Kühlschränke, Öfen und Waschmaschinen
- Robotik-Geräte: Der ESP32 eignet sich für Robotik-Anwendungen wie autonome Fahrzeuge, Drohnen und die Steuerung von Robotergliedmaßen.
ESP32 und ESP8266
Der ESP8266 ist der Vorgänger des ESP32, verfügt über eine Single-Core CPU, keine integrierte Bluetooth-Funktionalität, weniger PINs und weniger Schnittstellen. Aber dafür kostet dieser (je nach Board) ein paar Euro weniger.
Sind diese Mikrocontroller nur etwas für private Basteleien?
Diese Frage lässt sich klar mit "nein" beantworten. Die Wahrscheinlichkeit, dass bei Dir zu Hause irgendwo ein Chip aus dem Hause Espressif werkelt, ist sogar hoch. Viele Smarthome-Hersteller wie Shelly, Simplisafe, Sonoff, Evapolar nutzen in ihren Geräten diese Mikrocontroller. Und auch wenn es nicht so leicht ist herauszufinden, welche Hersteller noch auf diese Chips zugreifen, ist wohl relativ wahrscheinlich, dass es diverse smarte Geräte wie Waschmaschinen, Trockner, Kaffeemaschinen und viele andere auf dem Markt gibt, die über ESPx-Chips angesprochen und programmiert werden. Und im Grund muss es auch nicht immer nur smart sein. Denken wir nur mal an die Zahlautomaten im Schwimmbad, die Automaten an den Toiletten deutscher Rasthöfe oder Parkautomaten, die immer mehr Anforderungen gerecht werden müssen. Auch spricht vieles dafür, dass ESP8266- und ESP32-basierte Systeme in der Industrie zur Anwendung kommen, sind doch diverse, fertig konfektionierte ESP32-Systeme zur Hutschienenmontage verfügbar.
SoC, Modules, DevKit – Wer blickt da noch durch?
Da es noch nicht anstrengend genug ist, sich mit den verschiedenen Plattformen, Chip-Typen und Boards der verschiedenen Hersteller herumzuschlagen, gibt es allein im ESP32-Ökosystem eine Vielzahl von unterschiedlichen Anbietern und Systemen. Also beleuchten wir erst einmal die verschiedenen Ausführungen und Begrifflichkeiten.
Es gibt nicht nur den einen ESP32-Chip, sondern es handelt sich um eine ganze Chip-Familie, die sich in ihren Details unterscheidet. Im Prinzip sind diese Unterschiede aber zu vernachlässigen, die wesentlichen Funktionalitäten wie WiFi, Bluetooth, PIN-Layout sind über die meisten Chips nahezu identisch. (Die Betonung liegt auf "die meisten" und "nahezu", mehr dazu aber später.) Wer sich hier tiefer einlesen möchte, kann das ESP32-Datasheet-Dokument nutzen, das sehr übersichtlich und klar die Features und Unterschiede erläutert [1].
ESP32-Chips – SoCs
Ein ESP32-Chip ist ein kompakter integrierter Schaltkreis, der den Mikrocontroller, die drahtlose Konnektivität und andere notwendige Komponenten für den Betrieb des Geräts enthält. Der Chip ist nicht abgeschirmt. Der SoC-Chip eignet sich besonders gut für spezifische Designs, bei denen der Platz begrenzt ist, wie zum Beispiel bei Smartwatches. Auch wenn der ESP in großen Stückzahlen in Geräten verbaut werden soll, kann es sich aus Sicht der Kosten schnell lohnen, ein eigenes Platinenlayout zu entwerfen.
ESP32-Modul
Ein ESP32-Modul ist eine vorgefertigte, in sich geschlossene Einheit, die den abgeschirmten ESP32-Chip zusammen mit anderen Komponenten wie einem Spannungsregler, einem Quarzoszillator, einem Flash-Speicher und einer Antenne enthält. Es kann einfach in ein Board integriert werden und bietet eine unkomplizierte Methode, um IoT-Geräte mit drahtloser Konnektivität auszustatten. Da ESP32-Module FCC-zugelassen sind, müssen sich Hersteller keine Sorgen um die Einhaltung der Wi-Fi-Abschirmung machen, was bei der Gestaltung eigener Platinenlayouts in mittlerer Stückzahl interessant sein kann.
Oft begegnet einem dabei auch der Begriff "WROOM", der eine Bezeichnung/ ein Markenname für eine Reihe von Modulen ist, die von Espressif entwickelt wurden und auf den ESP32-Chips basieren. Neben WROOM-Modulen sind auch noch WROVER-Module verfügbar, die einen zusätzlichen PSRAM (Pseudo-Static RAM) beinhalten und für größere Anwendungen geeignet sind.
ESP32-DevKit (Development Board)
Ein typisches ESP32-Entwicklungsboard ist eine vollständige Hardwareplattform, die den ESP32-Chip sowie andere Elemente wie USB-Schnittstellen, Spannungsregler, Antennen, und weitere optionale Komponenten, beispielsweise integrierte Sensoren, Display oder Kameras enthält. Praktischerweise sind die GPIO-Pins zum Anschluss der Sensoren/Aktoren/etc. nach außen geführt und können so komfortabel angeschlossen werden. Zwei Tasten lassen den Einfluss auf den Bootprozess und das Auslösen eines Resets zu. Eine LED signalisiert, dass das Gerät in Betrieb ist, eine weitere ist direkt mit einem der GPIO-PINs verbunden (hier GPIO-2), um Dinge zu testen oder einfache Ausgaben zu realisieren, ohne entsprechende Peripherie anschließen zu müssen. Es ist eine ideale Möglichkeit, IoT-Geräte zu entwickeln und schnell zu testen oder um eigene Projekte umzusetzen.
Übersicht ESP32
Die folgende Tabelle gibt noch einmal eine Übersicht über die möglichen Anwendungsszenarien.
Feature | ESP32 SoC | ESP32-Module | ESP32 DevKit |
Hardware | üblicherweise 520 KB SRAM und 448 KB ROM, externe Antenne notwendig | (üblicherweise) bis zu 4 MB external Flash-Speicher, Antenne i.d.R. im Design enthalten | |
Integration | nur der Chip, ohne Shield | vormontiert mit Basis- Komponenten | vormontiert inklusive aller Peripherie |
Anpassungsmöglichkeiten | sehr hoch | mittel | niedrig |
Mögliche Use Cases | Systeme mit geringem Platzbedarf | IoT-Projekte, die nahezu nur Wireless-Konnektivität benötigen | Prototyping, Tests, Ausbildung, IoT-Projekte, wo der Platz eine untergeordnete Rolle spielt |
Einfachheit | schwer, Löten notwendig, Platinenlayout muss gestaltet werden | mittel, Löten notwendig, Platinenlayout muss gestaltet werden | sehr einfach, kann direkt verwendet werden |
Zertifizierung | FCC, CE, IC Zertifizierung für das finale Produkt muss durchgeführt werden | Zertifizierung enthalten | Zertifizierung enthalten |
Neben den genannten Kriterien gibt es noch eine ganze Menge anderer Punkte, die zu beachten sind und den Grund darstellen, warum es so viele verschiedene ESP32-Implementierungen auf dem Markt gibt.
- Stromversorgung: Der ESP32 benötigt zumindest Strom. Es gibt DevKits, die verschiedene USB-Anschlüsse mitbringen, welche mit Lithium-Ionen-Akku, andere mit Batterieadaptern und verschiedenen Spannungsquellen (5 V, 12 V, 24 V…) und entsprechenden Reglern.
- Schnittstellen: Es ist entscheidend, die verfügbaren Schnittstellen des Moduls zu bewerten, wie USB, PWM, UART, I2C, RMII und SPI [2]. Je nach Projektanforderungen sollten die entsprechenden Schnittstellen vorhanden sein. Keine Sorgen, die Schnittstellen besprechen wir noch später in einem Folgeartikel.
- Pin-Konfiguration: Die Anzahl und Anordnung der Pins auf dem ESP32-Entwicklungsmodul können variieren. Hier muss sichergestellt sein, dass die Pin-Konfiguration mit dem Projekt kompatibel ist.
- Antennen: Grundsätzlich gibt es Dev-Kits mit PCB- und IPX-Antennen. Die PCB-Antennen sind direkt auf der Leiterplatte integriert, während IPX-Antennen an einen Miniatur-Hochfrequenz-Steckverbinder angeschlossen sind. Externe Antennen bieten oft eine höhere Reichweite und lassen andere Bauformen der DevKits zu.
- Formfaktor: Die Größe und Form des Moduls sind entscheidend für das Projekt. Neben der eigentlichen Größe kann auch die Form der Platine ausschlaggebend sein.
- Zusätzliche Funktionen: Einige ESP32-Entwicklungsmodule verfügen über zusätzliche Funktionen wie integrierte Sensoren, externen Flash-Speicher, aufgelötete OLED-Displays oder RJ-45-Anschlüsse.
- Kosten: Entwicklungsmodule unterscheiden sich im Preis und ab einer gewissen Stückzahl kann der Preis deutlichen Einfluss auf die Gesamtkosten des Projektes haben.
Die verschiedenen Modellvarianten
In den letzten Jahren hat Espressif eine Vielzahl von anwendungsspezifischen ESP32-SoCs auf den Markt gebracht. Gab es vor einigen Jahren nur den ESP32, hat Espressif mittlerweile gefühlt für jede spezielle Anforderung eines jeden größeren Manufacturers einen eigenen Chip konstruiert. Dies hat dazu geführt, dass die Auswahl des richtigen Espressif-SoCs für eine bestimmte Anwendung zunehmend verwirrend geworden ist. Auf ihrer Website stellt Espressif den ESP Product Selector zur Verfügung, der es ermöglicht, den richtigen Chip, das richtige Modul oder DevKit aufgrund verschiedener Anforderungen zu identifizieren.
Viele Seiten listen diverse ESP32-SoC/s und -Module mit ihren spezifischen Eigenschaften. Auf keinen Fall sollte man sich blind auf eine dieser Seiten verlassen, sondern den ESP Product Selector verwenden. Die Autoren haben da sicher mit bestem Wissen und Gewissen ihre Inhalte zusammengestellt, aber zum einen unterscheiden sich die Modelle teilweise nur marginal, zum anderen bringt Espressif und ihre Partner in atemberaubender Geschwindigkeit neue Versionen heraus. Im Laufe der Recherchen zu diesem Artikel habe ich diverse Seiten gefunden, deren Inhalte veraltet oder schlicht falsch waren.
Auch ist Vorsicht geboten, einfach irgendein ESP32-DevKit zu suchen und zu bestellen. Sehr oft werden veraltete Chips verkauft oder nicht die genaue Spezifikation angegeben, was im Worst Case dazu führen kann, das korrekte Modul in der IDE nicht finden zu können. Auch hier hilft der ESP32 Product Selector [3]. Auf der linken Seite werden die Anforderungen spezifiziert, auf der rechten Seite kann dann auf "Development Board" umgeschaltet werden und über den Namen dann im Portal seiner Wahl das entsprechende Board bestellt werden. Zuletzt sollte man bei der Kaufentscheidung auf eine gute Dokumentation achten. Es sind nicht immer alle GPIO-PINs aufgeführt, die auch für das jeweilige Projekt notwendig sind.
ESP-IDF
Das ESP-IDF (Espressif IoT Development Framework) ist wie ein gut ausgestatteter Werkzeugkasten für Entwickler, der mit ESP32-Chips arbeitet. Der ESP hat wahnsinnig viele Funktionen, aber um diese zu nutzen, brauchst Du ein paar Werkzeuge und Anleitungen. Genau das bietet Dir ESP-IDF. Es enthält alle wichtigen Bibliotheken, Beispielcodes und Tools, um Funktionen wie WiFi-Scans, Bluetooth-Verbindungen und das Lesen von Sensoren zu implementieren. Es macht das Programmieren und Entwickeln von Anwendungen für den ESP32 einfacher und effizienter. Mit ESP-IDF kannst Du verschiedene Komponenten wie Bausteine kombinieren und in Dein Projekt integrieren. Es ist, als hättest Du ein umfassendes Rezeptbuch für das perfekte IoT-Gericht, und ESP-IDF zeigt Dir Schritt für Schritt, wie Du alle Zutaten richtig zusammenmischst [4].
ESP GPIO-PINs
Im Folgenden werde ich auf ein generisches ESP32-DevKit-Board mit USB-C-Anschluss, Reset- und Boot-Taster sowie 2 LEDs und 30 GPIO-PINs setzen, konkret ein ESP-32S, die Entwicklungsplatine mit ESP-WROOM-32 Chip CH340 Typ-C. Fast alle GPIO-PINs der ESP32-Chips haben eine zugewiesene Nummer, über die der PIN angesprochen werden kann. Die GPIOs des ESP32 können für verschiedene Funktionen wie UART, I2C, SPI etc. konfiguriert werden. Dank dieses "Multiplexing"-Features des ESP32 können dieselben PINs also mehrere Funktionen erfüllen. Es muss nur zuvor im Code festgelegt werden, welche Funktion der PIN erfüllen soll. Ob der PIN als INPUT oder als OUTPUT verwendet wird, wird als Parameter bei der entsprechenden Funktion angegeben:
pinMode(testPin, OUTPUT);
pinMode(testPin, INPUT);
Im Falle eines INPUT-PINs kann der Wert wie folgt gelesen werden:
analogRead(testPin);
analogRead gibt einen ganzzahligen Wert zwischen 0 und einer bestimmten Maximalzahl (z. B. 1023 bei 10-Bit-ADC) zurück, der proportional zur Spannung am PIN ist.
digitalRead(testPin);
digitalRead gibt entweder HIGH (logisch 1) oder LOW (logisch 0) zurück, je nachdem, ob am PIN eine Spannung anliegt oder nicht. Eine Übersicht über alle PINs findest du folgend:
Wichtig: Hier wird exemplarisch ein DevKit-Board mit 30 GPIO-PINs gezeigt. In diesem Beispiel sind also nicht alle Anschlüsse des ESP32-Chips nach außen geführt. Viele DevKits haben 36 PINs statt der im Folgenden gezeigten 30 PINs. Die Ursache ist, dass PIN 6-11 zum internen Flash-Speicher des ESP32 verbunden sind, deren Nutzung eher nicht empfohlen ist und somit bei manchen Boards nicht ausgeführt werden. Zum Einsatz kommen diese PINs nur, um Firmware-Updates einzuspielen, den Flash-Speicher zu erweitern oder im Fall eines Fehlers den Flash-Speicher debuggen zu können.
Die Platzierung der GPIOs kann sich je nach Platinen-Modell unterscheiden. In der Regel funktioniert jedoch jeder spezifische GPIO auf dieselbe Weise, unabhängig davon, welche Entwicklungsplatine verwendet wird (Mit Sicherheit gibt es hier auch einige Ausnahmen). Zum Beispiel ist GPIO5 normalerweise immer der VSPI CS0-PIN, GPIO23 entspricht normalerweise immer VSPI MOSI für die SPI-Kommunikation, unabhängig von der Platine.
Fazit
Am Ende ist es gar nicht so schwer, sondern einfach nur unübersichtlich und es ist nur mit dem Lesen vieler Artikel und der Unterstützung diverser KI möglich, ein umfassendes Bild zu erhalten. Ziel dieses Artikels war es, die wichtigsten Informationen zusammenzufassen und Dir einen schnellen Start in die Materie zu ermöglichen. Natürlich wirst Du damit nun nicht allein gelassen, dies ist der erste Teil einer mehrteiligen Reihe rund um den ESP32-Kosmos. Im nächsten Artikel werden wir alle PINs mit konkreten Beispielen ansprechen, die Funktionen des ESP32-Chips im Detail kennenlernen und verstehen, wie der ESP32 mit Hilfe eines Simulators programmiert werden kann.