Vor wenigen Jahren kam der ESP8266 auf den Markt – und sorgte in der Entwicklerszene für Aufsehen. Der Controller ermöglicht es, für ein paar Euro eigene Projekte mit WLAN-Fähigkeiten auszustatten. Anfangs kam der ESP8266 hauptsächlich als Zweitcontroller zum Einsatz; er wurde von einem anderen Controller über die serielle Schnittstelle angesteuert, um einen Netzwerkzugang zu erhalten. Doch immer mehr Projekte nutzten den günstigen ESP8266 schließlich auch als eigentliche Steuerzentrale. Sicher hat auch das den Hersteller Espressif dazu bewogen, dem ESP8266 einen leistungsstärkeren Bruder an die Seite zu stellen. Der ESP32 kann mit zwei 32-Bit-Rechenkernen, einem zusätzlichen stromsparenden Coprozessor, 36 GPIO-Pins, Bluetooth, 512 KB SRAM und vielem mehr aufwarten und eignet sich als Projektzentrale in vielen Bereichen der Elektronik – ausdrücklich nicht nur für die Netzwerkprogrammierung.

ESP32-Projekte für Anfänger ...

Diesem Umstand trägt Dogan Ibrahim in seinem Buch „The Complete ESP32 Projects Guide“ Rechnung. In den ersten zwei Kapiteln werden der ESP32 und das beliebte Entwicklerboard ESP32 DevKit C vorgestellt, was einen Eindruck von der Leistungsfähigkeit des Chips vermittelt. Doch mit der Theorie hält sich der Autor nicht lange auf. In Kapitel 3 zeigt er, wie die Arduino-IDE für den Controller vorbereitet wird, was inzwischen auch Einsteigern keine Probleme mehr machen dürfte. Gleich danach geht es mit den Projekten los. Das Ganze beginnt mit einfachen LED-Spielereien; Anfänger lernen hier vor allem die Arbeit mit Ein- und Ausgängen und grundlegende Programmierstrukturen kennen. In Kapitel 5 werden Sensoren ausgelesen, Touchflächen abgefragt und ein Display angesteuert, auch die Arduino-Programmierung von Pin-Change- und Timer-Interrupts wird gezeigt.
Der Aufbau der Projektbeschreibungen hat mir gut gefallen. Nach einer Zusammenfassung des Projektes und dem Lernziel folgen ein Blockdiagramm, ein Schaltplan und ein Bild vom Aufbau auf einem Steckbrett. Danach kommt eine Beschreibung der Software, zu der auch einfach verständlicher Pseudocode und natürlich das Listing gehören. Dass man den Quellcode der Projekte von der Elektor-Website herunterladen kann, versteht sich von selbst. Um es gerade Einsteigern noch einfacher zu machen, ist im Elektor-Shop auch ein Bauteile-Kit mit einem ESP32-DevKit-C-Modul, zwei Steckbrettchen (sollten nebeneinander liegend zusammengesteckt werden), Steckbrücken und verschiedenen Bauteilen erhältlich, die bei den Projekten benutzt werden. Dazu gehören Sensoren für Licht, Feuchte und Temperatur, aber auch ein Display, eine Tastenmatrix, ein Servo-Motor, ein Summer, ein Mikrofon-Modul und mehr.

... und Fortgeschrittene

In Kapitel 6 des Buchs folgen Projekte mit etwas umfangreicherem Quellcode. Unter anderem werden Wellenformen generiert und mit Tastenmatrix und Display ein Taschenrechner sowie ein Codeschloss verwirklicht. Interessanter fand ich das nächste Projekt, die Ansteuerung einer SD-Karte, um Dateien abzuspeichern und auszulesen. Ein entsprechendes Sockel-Modul hätte das Kit aus dem Shop noch aufgewertet. Das gleiche gilt für die danach folgenden IR-Fernsteuerungsprojekte – vielleicht kann der Elektor-Shop noch einen Bausatz mit SD-Kartenmodul, IR-Empfänger und Relais nachschieben.

Erst auf Seite 276 des Buches geht es schließlich mit der Netzwerkprogrammierung los – für mich völlig zu Recht. Denn der ESP32 ist wie schon oben angesprochen eben nicht „nur“ ein WLAN-Controller mit etwas Zusatzperipherie, sondern ein sehr flexibler und leistungsfähiger Allzweck-Controller, der sich für Einsteiger- und Profi-Projekte gleichermaßen eignet. Auch das Elektor-Labor nutzt den ESP32 ja sehr gern als Schaltzentrale – insofern ist das Buch auch ein guter Einstieg, um den Quellcode von allerlei Elektor-Projekten besser zu verstehen.

In Kapitel 7 werden die Themen WLAN-Netzwerk, TCP, UDP und HTTP behandelt, bevor im nächsten Kapitel die Werte eines DHT11-Feuchte- und Temperatursensors zur Cloud-Plattform ThingSpeak geschickt werden.

Meine eigene IoT-Demo

Als alter IoT-Fan habe ich dieses Beispiel nachvollzogen, allerdings etwas abgewandelt. Statt des Temperatur- und Feuchtesensors nutze ich das kleine Mikrofonmodul aus dem Kit (den Quellcode meines Beispiels finden Sie unten), um einen Lärmpegel zu messen. Hierzu sampele ich schnell die analogen Ausgangs-Werte des Mikrofonmoduls, mittele über 256 Werte und zähle, wie oft die folgenden Samplewerte eine bestimmte Schwelle über oder unter diesem Mittelwert über- bzw. unterschreiten, um große Signalamplituden zu detektieren. Alle paar Sekunden wird der Zählerwert ins Internet übermittelt.
  


Wie bei den anderen bisher von mit benutzten Cloud-Plattformen openSenseMap und AllThingsTalk muss man sich bei ThingSpeak registrieren, ein Gerät anlegen (entspricht einem Board, das Messwerte aufnimmt) und dann eingeben, welche Art von Sensoren zum Einsatz kommen (ein Gerät kann mehrere Sensoren enthalten). Bei ThinkSpeak wird ein Gerät durch einen Channel repräsentiert. Ich habe also einen neuen Channel angelegt und dann ein Field für einen Sensor registriert, der Lärm-Messwerte übermittelt (siehe Screenshot).
 


In meiner Serie „Mein Weg in das IoT“ habe ich immer mit MQTT gearbeitet, um Sensorwerte in die Cloud zu schicken. Bei ThingSpeak funktioniert das anders, Messwerte werden einfach per HTTP-GET verschickt. Man muss sich mit dem ThingSpeak-Server per TCP verbinden und dann über TCP Folgendes übermitteln:
 
GET /update?api_key=AAAAAAAAAAAAAAAA&field1=XXX HTTP/1.0
Host: https://api.thingspeak.com

AAAAAAAAAAAAAAAA ist der API-Key, der von ThingSpeak beim Anlegen eines Channels vergeben wird. XXX ist der Messwert für das erste Field.
Es gelang mir (mit der Anleitung aus dem Buch, dem Kit und den Beispielprogrammen) die Anwendung sehr schnell zu realisieren. Allerdings tat sich erstmal nix auf ThingSpeak – ich merkte aber schnell weswegen. Zwar hatte der Autor zu Anfang des Beispielcodes einen String APIKEY angelegt, hier hatte ich auch brav den API-Key meiner eigenen ThingSpeak-Seite eingetragen. Allerdings wurde der APIKEY-String weiter unten im Code gar nicht benutzt; dort war ein für mich nutzloser API-Key des Autors hardcodiert eingetragen, den ich beim Kopieren übernommen hatte. Nichts Gravierendes, aber es bleibt ein wenig das Gefühl zurück, dass der Code für das Projekt ein bisschen unter Zeitdruck geschneidert werden musste.
Im Screenshot sehen Sie den von mir aufgenommenen Lärmpegel auf meiner ThingSpeak-Seite.
 

 
Wenn Sie das Beispiel nachvollziehen möchten, müssen Sie auf ThingSpeak einen eigenen Channel anlegen und den dort erhaltenen den API-Key noch in den Sketch SoundToThingSpeak (Download unten) eintragen – genauso wie die SSID und das Passwort Ihres Router-Netzwerks.
Die Anwendung ist noch ausbaufähig: Zusammen mit den Licht-, Temperatur- und Feuchtesensoren aus dem Kit könnte man zum Beispiel aus der Ferne überwachen, ob in einem Raum gerade eine ausgelassene Party stattfindet (ob das für Sie ein realistisches Anwendungsszenario darstellt, müssen Sie selbst entscheiden ;-) ).

Ich konnte es natürlich nicht lassen und habe den Sketch aus meinem letzten Review noch an ThingSpeak angepasst. Statt des Displays kam diesmal wieder eine RGB-LED zum Einsatz, um den Verbindungs-Status anzuzeigen. Anstelle eines Foto-Widerstands habe ich den DHT11-Sensor aus dem Kit benutzt. Den Code finden Sie ebenfalls im Download-Zip. Wenn Sie den Sketch mit demjenigen aus meinem letzten Review vergleichen, dann sehen Sie die Anpassungen in den GUI-Funktionen (RGB-LED statt Display). Statt MQTT kommt jetzt HTTP zum Einsatz, was die Hauptschleife vereinfacht. Die SSID, das Passwort und den API-Key muss man in meinem zweiten Beispiel nicht mehr hardcodiert eintragen, sondern kann die bekannte Web-Oberfläche aus meiner Serie benutzen. Tragen Sie den ThingSpeak-API-Key dort unter SENSOR ID/TOKEN ein. Unter BROKER ADDRESS ist „api.thingspeak.com“ einzutragen. Die Files im Download-Ordner libraries müssen in Ihren Arduino-Libraries-Ordner wandern, genauso wie die Bibliotheken zum Ansprechen des DHT-Sensors (von Adafruit, siehe Buch).

ESP32 für Profis

In den weiteren Kapiteln des Buches folgen einige Webserver-Projekte und in Kapitel 13 schließlich Bluetooth – ebenfalls sehr interessant für mich, aber das möchte ich mir für ein weiteres Review vorbehalten.
In den drei letzten Kapiteln verlässt Dogan Ibrahim die Arduino-IDE und stellt die Programmierung mit MicroPython und die Entwicklung mit der ESP-IDF vor. Letztere ist eine speziell für den ESP32 gemachte IDE, die auf FreeRTOS basiert und unter anderem die Programmierung von Tasks ermöglicht. Auf wenigen Seiten kann dieses spannende Thema natürlich nur angerissen werden. Das ruft geradezu nach einem weiteren ESP32-Buch, das es meines Wissens noch nicht auf dem Markt gibt.

Fazit

Mein Fazit: Ein reichhaltiger Leitfaden, der (zusammen mit dem Bauteile-Kit) vor allem Einsteigern zu empfehlen ist, die Interesse an Mess- und Steuerprojekten haben. Auch ist das Buch ein guter Startpunkt für Umsteiger, die von Arduino-Boards wie zum Beispiel dem Uno kommen und den leistungsfähigen ESP32 kennenlernen wollen. Wer sich intensiv vor allem mit der Netzwerkprogrammierung und Cloud-Projekten beschäftigen möchte, für den gibt es andere Bücher.