Erstellen eines ESP32-Projekts mit PlatformIO: Ein Leitfaden für Einsteiger
PlatformIO mit Visual Studio Code stellt eine leistungsstarke, flexible und benutzerfreundliche Entwicklungsumgebung für Mikrocontroller-Firmware dar. Dieser Artikel beschreibt ein Beispiel für die Integration von PlatformIO und VSC, um ein System zum Lesen von Feuchtigkeits- und Temperaturwerten eines digitalen Sensors und einem ESP32-Modul zu erstellen.
PlatformIO
PlatformIO ist eine quelloffene integrierte Entwicklungsumgebung (IDE), die auch und vor allem im professionellen, zunehmend aber auch im Hobbybereich eingesetzt wird. Eine IDE ist eine Software, die Entwicklern ein umfassendes Werkzeug zum Schreiben, Testen und Debuggen von Software bietet. Eine IDE umfasst mehrere wichtige Werkzeuge und Funktionen, um den Prozess der Software-Entwicklung zu vereinfachen, die Produktivität zu steigern und eine einheitliche Umgebung für den gesamten Projektlebenszyklus zu schaffen. Sie umfasst in der Regel:
- Einen hoch entwickelten Texteditor, der die Syntax der verwendeten Programmiersprache unterstützt, mit Funktionen wie Syntaxhervorhebung, Autovervollständigung und Einrückung
- Werkzeuge zum Kompilieren des Quellcodes in ausführbare Maschinensprache
- Einen Debugger, um während der Programmausführung Fehler im Code zu erkennen und zu korrigieren
- Ein System, das das Hinzufügen, Verwalten und Aktualisieren von Bibliotheken und Projektabhängigkeiten erleichtert
- Eine kontrollierte Ausführungsumgebung zum Testen der entwickelten Software
- Systeme für die Integration mit Versionskontroll-Tools wie SVN, Git oder Mercurial, Projektverwaltungsfunktionen und eine einfache und intuitive Benutzeroberfläche.
Eigentlich ist PlatformIO keine echte eigenständige IDE, sondern kommt als Zusatzsoftware (Plugin) daher, die in verschiedene Entwicklungsumgebungen integriert werden kann, darunter die beliebte und weit verbreitete IDE Visual Studio Code (VSC), aber auch Atom und Eclipse. Derzeit ist Visual Studio Code die wihl beliebteste von PlatformIO unterstützte IDE und wahrscheinlich auch die von professionellen Entwicklern am häufigsten gewählte.
Durch die Integration von PlatformIO in Visual Studio Code können Entwickler von mehreren Funktionen profitieren. PlatformIO wurde entwickelt, um die Entwicklung der Mikrocontroller-Firmware zu vereinfachen und zu verbessern. Es unterstützt eine Vielzahl von Mikrocontrollern verschiedenster Art und Hersteller, darunter die diversen Arduino-Versionen, aber auch andere Mikrocontroller und ESP8266/ESP32-basierte Boards.
Eines der herausragenden Merkmale von PlatformIO ist seine Kompatibilität mit verschiedenen Plattformen, darunter Arduino, das Espressif IoT Development Framework (ESP-IDF) und viele andere. Entwickler können so die für ihre Bedürfnisse am besten geeignete Plattform wählen und gleichzeitig immer dieselbe IDE verwenden, was nicht unwichtig ist.
PlatformIO unterstützt mehrere Programmiersprachen wie C, C++ und Python und ist kompatibel mit bereits für Arduino entwickelte Bibliotheken. PlatformIO vereinfacht die Verwaltung der Projektabhängigkeiten und der verschiedenen Versionen von eingebundenen Bibliotheken (sowohl selbst erstellte als auch von Drittanbietern) erheblich und bietet fortschrittliche Kompilierungswerkzeuge. So können Entwickler problemlos externe Bibliotheken in ihre Projekte einbinden, ohne sich um Installationsdetails kümmern zu müssen.
Darüber hinaus unterstützt PlatformIO die Verwaltung von Bibliotheksversionen, was den Entwicklungsprozess robuster (und auch einfacher) macht. Die IDE bietet umfassende Debugging-Unterstützung und stellt fortschrittliche Tools für die Controllerüberwachung und -steuerung während der Firmware-Ausführung bereit. Letztendlich bietet PlatformIO eine einheitliche, flexible, intuitive und relativ leicht zu beherrschende Umgebung, die den Entwicklungsprozess vereinfacht und zu einem effizienteren Projektmanagement beiträgt.
In dieser Anleitung wird gezeigt, wie man mit PlatformIO ein ESP32-Mikrocontrollerprojekt erstellt und verwaltet, das mit einem DHT22-Sensor verbunden ist und das die momentanen Werte der Umgebungstemperatur und Luftfeuchtigkeit erfasst und auf der PlatformIO-Konsole anzeigt.
Das ESP32-Modul
ESP32 ist ein von Espressif Systems entwickelter Mikrocontroller mit geringer Stromaufnahme, der für seine Vielseitigkeit und hohe Rechenleistung bekannt ist. Der ESP32 basiert auf der Xtensa-LX6-Architektur von Tensilica und verfügt über mehrere hoch entwickelte Funktionen, die ihn ideal für eine Vielzahl von Anwendungen im Bereich Internet of Things (IoT) und Embedded Computing machen. Zu den wichtigsten technischen Merkmalen des ESP32 gehören:
- Dual-Core-Architektur: Der ESP32 verfügt über zwei Xtensa-LX6-Kerne, die parallele Operationen ermöglichen und die Gesamtleistung des Systems verbessern.
- Hohe Taktfrequenz: Mit Taktfrequenzen von bis zu 240 MHz bietet der ESP32 eine hohe Rechenleistung, um komplexe Anwendungen zu verarbeiten.
- Drahtlose Kommunikation: Integrierte WLAN- und Bluetooth-Konnektivität ermöglicht die drahtlose Kommunikation mit anderen Geräten und Netzwerken.
- Eingebauter Flash-Speicher: Der ESP32 verfügt über einen Speicher, der genügend Platz für das Laden von Firmware und Daten bietet.
- Zahlreiche und vielfältige I/O-Peripherie wie GPIO, UART, I2C, SPI und PWM-Ports ermöglichen eine einfache Interaktion mit anderen Beusteinen.
- Signalverarbeitungseinheit (DSP): Der DSP des ESP32 verbessert den Umgang mit Audio- und Signalverarbeitungsanwendungen.
- Low-Power Mode: Unterstützt Low-Power-Modi zur Verlängerung der Batterielebensdauer in batteriebetriebenen Geräten.
- Open-Source-Entwicklungsumgebung: Espressif unterstützt eine Open-Source-Entwicklungsumgebung durch den Einsatz von Frameworks wie Arduino und PlatformIO und vereinfacht so den Programmier- und Entwicklungsprozess.
- Sicherheit: ESP32 verfügt über fortschrittliche Sicherheitsfunktionen einschließlich Hardware-Verschlüsselung und eignet sich damit für Projekte, die ein höheres Maß an Schutz erfordern.
Aufgrund dieser Eigenschaften wird ESP32 häufig für die Entwicklung von IoT-Projekten, intelligenten Sensoren, Heimautomatisierungsgeräten und mehr verwendet. ESP32 ist ein Prozessor, der zumindest für unsere Zwecke ein zusätzliches elektronisches Bauteil benötigt, das ihn mit Strom versorgt und mit dem USB-Port eines Computers verbindet. So kann der ESP32 über USB programmiert werden (das heißt, die auf PlatformIO geschriebene und kompilierte Firmware wird in seinen internen Speicher zu übertragen) und Daten über den Seriellen Monitor von PlatformIO senden und empfangen.
Wie aus Bild A ersichtlich, kann der ESP32 nicht sofort in seinem „nackten“ Zustand verwendet werden, aber es gibt es kleine Platinen namens NodeMCU, die neben dem ESP32-Mikroprozessor auch die oben erwähnte Elektronik enthalten. Diese Platinen verfügen über Anschlüsse, über die sie mit der externen Umgebung (Sensoren, Aktoren und verschiedene Geräte) verbunden werden können. Es gibt verschiedene Versionen der NodeMCU-Platinen; dieser Leitfaden basiert auf dem NodeMCU-ESP32. Bild B zeigt den Mikroprozessor, die umgebende Elektronik und die Anschlüsse an die Außenwelt.
Der Sensor DHT22
Da wir ihn in diesem Miniprojekt verwenden werden, wollen wir ein paar Worte über diesen Sensor verlieren, der unter Insidern recht gut bekannt ist. Der DHT22, auch bekannt als AM2302, ist ein digitaler Temperatur- und Feuchtigkeitssensor, der Umgebungsbedingungen zuverlässig und genau überwacht. Der Sensor wird häufig in Heimautomatisierungsprojekten, bei der Umweltüberwachung und bei Wetteranwendungen eingesetzt. Der DHT22 besitzt einen kapazitiven Sensor zur Messung der relativen Luftfeuchtigkeit und einen Thermistor zur Ermittlung der Umgebungstemperatur. Hier sind einige seiner wichtigsten technischen Merkmale:
- Genauigkeit und Zuverlässigkeit: Der DHT22 bietet eine hohe Genauigkeit sowohl bei der Temperatur- als auch bei der Feuchtigkeitsmessung
- Großer Messbereich: Der Sensor kann Temperaturen im Bereich von -40°C bis +80°C und relative Luftfeuchtigkeit im Bereich von 0...100% erfassen
- Digitales Ausgangssignal: Der DHT22 überträgt digitale Signale direkt über einen einzigen Pin, was die Anbindung an Mikrocontroller wie Arduino oder ESP32 vereinfacht, da kein analoges Signal erfasst und digitalisiert werden muss
- Schnelle Reaktionszeit: Der Sensor ist für seine schnelle Reaktionszeit von etwa zwei Sekunden bekannt
- Hohe Auflösung: Der DHT22 liefert Daten mit einer Auflösung von 0,1°C für die Temperatur und 0,1% für die Luftfeuchtigkeit, was eine detaillierte Betrachtung der Messungen ermöglicht
- Hohe Störsicherheit: Aufgrund seiner kapazitiven Messtechnik ist der Sensor relativ unempfindlich gegenüber externen Störungen.
Die Anbindung an den DHT22 ist im Allgemeinen einfach und erfordert nur einen Mikrocontroller und eine spezielle Bibliothek.
Installation von Visual Studio Code und PlatformIO
Wie bereits erwähnt, ist PlatformIO ein Plugin für die IDE Visual Studio Code, so dass der erste Schritt darin besteht, diese IDE zu installieren. Den direkten Link zur Download-Seite finden Sie unter . Wie aus Bild 1 ersichtlich, ist diese Software für die wichtigsten Betriebssysteme (Windows, verschiedene Linux-Distributionen, macOS) verfügbar. Sobald Sie die Ihrem Betriebssystem entsprechende Datei heruntergeladen haben, installieren Sie sie.
Unabhängig von der gewählten Version erscheint beim Starten des Programms eine Willkommensseite. Wenn Sie diese schließen, wird die Hauptseite der IDE angezeigt, auf der in der linken Spalte Schaltflächen (Buttons) erscheinen, einschließlich der in Bild 2 rot markierten. Mit diesen Buttons können Sie die gewünschten Plugins (Extensions) für VSC suchen und installieren. Wenn Sie darauf klicken, öffnet sich das Suchfenster in der linken Spalte.
Um ein Plugin zu finden, geben Sie einfach seinen Namen in das rechteckige Feld oben links ein. Wenn Sie platformio eingeben, erscheint das Plugin in der Liste, und Sie müssen nur noch auf die Schaltfläche Install des Plugins PlatformIO klicken, wie in Bild 3 gezeigt. In wenigen Minuten ist das Plugin installiert, und dass es dann tatsächlich vorhanden ist, zeigt ein kleines neues Symbol in der linken Spalte, wie in Bild 4 zu sehen. Jetzt ist PlatformIO also installiert und kann verwendet werden.
Erstellen des Projekts auf PlatformIO
Sobald VSC gestartet ist, müssen Sie zunächst auf das PlatformIO-Symbol klicken. Es öffnet sich daraufhin die Hauptseite, auf der die Schaltfläche Create New Project ein neues Projekt anlegt (Bild 5). Es öffnet sich eine neue Willkommensseite (Bild 6), auf der man auf die Schaltfläche + New Project klicken muss. Daraufhin startet ein einfacher Projektassistent, in dem man den Namen des Projekts, die Plattform und das verwendete Framework einzugeben hat (siehe Bild 7).
Der Projektname kann beliebig sein (zum Beispiel testESP32), während die Wahl des Boardmodells von dem uns zur Verfügung stehenden abhängt. Wenn Sie ESP32 in das Feld namens Board eingeben, wird eine Liste aller verfügbaren ESP32-basierten Boards angezeigt. Im vorliegenden Fall wurde das Board AZ-Delivery ESP-32 Dev Kit C V4 gewählt. Bei Framework lassen Sie den Eintrag Arduino unverändert. Das Kontrollkästchen Location wird verwendet, um PlatformIO mitzuteilen, ob der Standardordner als Arbeitsordner verwendet werden soll oder ob Sie einen anderen Ordner angeben möchten. Wir belassen es beim Standardordner.
Das Ergebnis dieser Auswahl ist in Bild 8 zu sehen. Wenn Sie auf die Schaltfläche Finish klicken, wird das Projekt erstellt. Nach ein paar Sekunden erscheint das Fenster in Bild 9. PlatformIO zeigt auf der linken Seite die Baumstruktur des Projekts, während im Arbeitsbereich die Datei platformio.ini (ebenfalls Teil des Projekts) angezeigt wird, in der die Projekteinstellungen gesammelt werden. Zurzeit sind die vorhandenen Einstellungen die einzigen, die beim Zusammenstellen des Assistenten bereitgestellt werden.
In der Projektstruktur (der Baum auf der linken Seite) gibt es einige Ordner. Einer davon heißt includes und ist derzeit leer. Seine Funktion besteht darin, alle Dateien zu sammeln, die in das Projekt aufgenommen werden sollen (normalerweise .h-Dateien). Ein weiterer Ordner heißt src und enthält die Hauptdatei des Sketches, main.cpp, in der das Programm untergebracht wird.
Bild 10 zeigt den Inhalt dieser Datei. Beachten Sie die beiden Hauptfunktionen, wie sie in Sketches für Arduino üblich sind: setup und loop. Im Dateisystem wird das Projekt wie in Bild 11 dargestellt.
Hinweis: Das für diese Anleitung verwendete Betriebssystem ist Linux. Es ist möglich, dass unter Windows und macOS die Organisation der Dateien im Dateisystem anders ist. Die Oberfläche von PlatformIO ist jedoch immer gleich, unabhängig vom verwendeten Betriebssystem.
Hinzufügen von Bibliotheken
Das Hinzufügen von Bibliotheken zu einem Projekt ist ein relativ unkomplizierter Vorgang. Nehmen Sie an, zum Lesen der vom DHT22 übertragenen Daten soll die Bibliothek DHT sensor library for ESP hinzugefügt werden. Zuerst gehen Sie zur linken Spalte der IDE und klicken auf das PlatformIO-Symbol. Dadurch wird die Hauptseite von PlatformIO geöffnet, wo der Abschnitt QUICK ACCESS sichtbar wird. Einer der Einträge ist Libraries. Wenn Sie darauf klicken, öffnet sich das Suchfenster für Bibliotheken, das in Bild 12 zu sehen ist.
Wenn Sie DHT22 in das Suchfeld eingeben, werden mehrere Ergebnisse angezeigt. Die Wahl fällt auf die DHT sensor library for ESPx von Bernd Giesecke, wie in Bild 13 zu sehen ist. Wenn Sie darauf klicken, wird die Bibliotheksseite geöffnet (Bild 14). Um die Bibliothek zu installieren, klicken Sie nun einfach auf die Schaltfläche Add to Project, wählen im nächsten Assistenten das gewünschte Projekt (in unserem Fall testESP32), wie in Bild 15 gezeigt, und klicken auf Add. PlatformIO lädt nun die Bibliothek automatisch in den Projektordner herunter. Außerdem wird sie zur Konfigurationsdatei platformio.ini hinzugefügt, wie in Bild 16 gezeigt.
Dies ist das Standardverfahren zum Hinzufügen einer Bibliothek zu einem Projekt. Eine alternative Vorgehensweise besteht darin, die Datei platformio.ini direkt zu bearbeiten, indem der Eintrag lib_deps = gefolgt von der Liste der hinzuzufügenden Bibliotheken hinzugefügt wird. In unserem Fall wäre es ausreichend gewesen, die Zeile
lib_deps=beegee-tokyo/DHT sensor library for ESPx@^1.19
hinzuzufügen. Abschließend können Bibliotheken über die Suchseite oder, wenn Sie den Namen kennen, mit dem Pfad direkt zur Datei platformio.ini hinzugefügt werden. Um die soeben in das Projekt aufgenommene Bibliothek zu verwenden, muss in die Datei main.cpp die Zeile #include "DHTesp.h" unmittelbar nach der Zeile #include "Arduino.h" eingetragen werden. In der Datei platformio.ini fügen Sie außerdem die folgenden Zeilen hinzu:
monitor_speed = 115200
upload_speed = 921600
so dass es wie in Bild 17 aussieht. Mit diesen beiden Befehlen wird die Geschwindigkeit der seriellen Schnittstelle für die Kommunikation mit dem Computer beziehungsweise die Geschwindigkeit, mit der der Sketch in den Speicher des Mikrocontrollers hochgeladen wird, eingestellt.
Testen des Projekts
Um ein funktionierendes Beispiel für das neu erstellte (also leere) Projekt zu erhalten, beschlossen wir, den Mikrocontroller mit einem DHT22-Sensor zu verbinden, die Messwerte der Umgebungstemperatur und der Luftfeuchtigkeit in Echtzeit auszulesen und sie über den Serial Monitor von PlatformIO anzuzeigen. Neben dem Mikrocontroller und dem Sensor benötigten wir einen 4,7-kΩ-Widerstand, einige Drähte und ein Breadboard, um die einfache Schaltung in Bild 18 aufzubauen. Wie auf dem Bild zu sehen ist, ließ es die Größe des ESP32-NodeMCU-Boards leider nicht zu, es auf das Breadboard zu stecken, also wurde es daneben platziert.
Der Sketch
Listing 1 ist in der Datei main.cpp enthalten. Der Sketch beginnt mit der Einbindung der notwendigen Bibliotheken. Als nächstes wird das dht-Objekt vom Typ DHTesp für die Verwaltung des Sensors instanziiert. Dann wird der GPIO-Pin des ESP32 angegeben, der die Daten vom Sensor lesen soll (in unserem Fall GPIO 14).
Es werden Variablen definiert, die die gemessenen Werte enthalten werden, und solche, die das Timing der Messungen verwalten (in diesem Fall werden die Messungen alle 3 s stattfinden). Es wäre gut, diesen Wert nicht zu unterschreiten, da der DHT22 etwa 2 s für eine Messung benötigt.
Als nächstes kommt die Funktion printData(), die die Temperatur- und Luftfeuchtigkeitsvariablen ausliest und sie mit minimaler Formatierung an den seriellen Monitor von PlatformIO ausgibt. Die Funktion setup initialisiert die serielle Schnittstelle (über die die Ausgabe an den seriellen Monitor geleitet werden) und verbindet GPIO 14 mit dem Sensor.
Schließlich ermittelt die Funktion loop alle measureDelay (in Millisekunden) die vom Sensor vorgenommenen Messungen und speichert sie in den beiden Variablen temperature und humidity. Danach ruft sie die Funktion printData() auf, um die Ergebnisse auszugeben. All dies wird zyklisch durchgeführt. Um den Sketch auf das Board zu laden, klicken Sie einfach auf die mit der „1“ markierten Schaltfläche in Bild 19.
Der Sketch wird zunächst kompiliert und dann, wenn dabei keine Fehler auftreten, in den internen Speicher des ESP32-Mikrocontrollers geladen. Um die Ergebnisse zu visualisieren, muss der serielle Monitor aktiviert werden, indem man auf die Schaltfläche mit der „2“ klickt. Bild 20 schließlich zeigt die Ergebnisse im seriellen Monitor.
Bereit zum Programmieren?
Wie man unschwer erkennen kann, ist das Erstellen eines Projekts mit PlatformIO und das Hinzufügen von Bibliotheken alles in allem ein recht einfacher und standardisierter Vorgang. PlatformIO verknüpft Benutzerfreundlichkeit mit einer umfassenden Funktionalität, die hier nicht näher betrachtet werden kann, da dies den Rahmen dieser Anleitung sprengen würde.
Die fortschrittliche Bibliotheksverwaltung und die einfache Installation von Abhängigkeiten vereinfachen den Entwicklungsprozess weiter und ermöglichen es, sich mehr auf die Erstellung des Projekts als auf die Konfiguration der Umgebung zu konzentrieren. Darüber hinaus bietet die native Integration mit Arduino und seiner großen Entwickler-Community zusätzliche Vorteile und ermöglicht den Zugang zu einem umfangreichen Ökosystem gemeinsamer Ressourcen und Lösungen.
Die Verwendung von PlatformIO für ESP32 stellt einen bedeutenden Schritt in Richtung eines effizienteren, organisierten, skalierbaren und professionellen Entwicklungsprozesses dar. PlatformIO bietet die Werkzeuge, die benötigt werden, um innovative Ideen zu erforschen, komplexe Designs zu erstellen und den Entwicklungszyklus zu beschleunigen, was die Programmiererfahrung reibungsloser und somit lohnender macht.
Dieser Artikel (240370-02) erscheint in Elektor November/Dezember 2024.
Anmerkungen der Redaktion: Interessiert an ESP32-Projekten, PlatformIO und mehr? Dieses Projekt erschien ursprünglich in Elettronica IN.