Enkele jaren geleden kwam de ESP8266 op de markt en hij zorgde voor de nodige opwinding in de ontwikkelaarsscene. Met deze controller kunnen we voor een paar Euro eigen projecten uitrusten met WLAN-mogelijkheden. In het begin werd de ESP8266 meestal ingezet als tweede controller: hij werd via de seriële interface aangestuurd door een andere controller om een netwerkpoort te realiseren. Maar in steeds meer projecten werd de voordelige ESP8266 uiteindelijk ook gebruikt als centrale controller. Dat heeft vast en zeker ook een rol gepeeld bij het besluit van de fabrikant Espressif om een krachtige broer voor de ESP8266 te ontwikkelen. De ESP32 heeft twee 32-bits rekenkernen, een extra energiezuinige coprocessor, 36 I/O-pennen, Bluetooth, 512 KB SRAM en nog veel meer. Dat maakt hem geschikt als centrale processor in projecten in veel gebieden van de elektronica. Hij kan dus veel meer dan het verzorgen van de netwerkcommunicatie.

ESP32-projecten voor Beginners ...

Dogan Ibrahim houdt daar rekening mee in zijn boek “The Complete ESP32 Projects Guide”. In de eerste twee hoofdstukken worden de ESP32 en de geliefde ontwikkelkaart ESP32 DevKit C voorgesteld, wat een indruk geeft van de prestaties van de chip. Maar de auteur houdt zich niet lang bezig met de theorie. In hoofdstuk 3 laat hij zien, hoe de Arduino-IDE voor deze controller moet worden ingericht, wat inmiddels ook voor beginners geen groot probleem meer hoeft te zijn. En dan begint hij meteen aan de projecten. De eerste oefeningen zijn eenvoudige LED-speeltjes; beginners leren daarbij vooral het werken met in- en uitgangen en fundamentele programmastructuren. In hoofdstuk 5 worden sensoren uitgelezen, aanraakvlakjes afgevraagd en een display aangestuurd, ook de afhandeling van pen-change- en timer-interrupts komt aan de orde.
De opbouw van de projectbeschrijvingen beviel me. Na een samenvatting van het project en het leerdoel volgen een blokschema, een schema en een afbeelding van de opbouw op een breadboard. Daarna volgt een beschrijving van de software, met gemakkelijk te begrijpen pseudocode en natuurlijk de listing. Het spreekt vanzelf dat de broncode van de projecten is te downloaden van de Elektor-website. Om het juist voor beginners nog gemakkelijker te maken, is er in de Elektor-shop ook een onderdelenkit met een ESP32-DevKit-C-module, twee breadboardjes (die aan elkaar gestoken kunnen worden), Dupont-kabeltjes en verschillende componenten verkrijgbaar, die bij de projecten worden gebruikt. De kit bevat onder meer sensoren voor licht, vochtigheid en temperatuur, maar ook een display, een toetsenbordmatrix, een servomotor, een buzzer en een microfoon-module.

... en gevorderden

In hoofdstuk 6 van het boek volgen projecten met wat uitgebreidere broncode. Er worden golfvormen gegenereerd en met de toetsenbordmatrix en het display worden een zakrekenmachine en een codeslot gerealiseerd. Het volgende project vond ik interessanter: het aansturen van een SD-kaart om bestanden op te slaan en uit te lezen. Een SD-module zou de kit uit de Elektor-shop nog nuttiger hebben gemaakt. Hetzelfde geldt voor de IR-afstandsbedieningsprojecten die daarna volgen. Misschien kan de Elektor-shop nog eens een bouwkit met SD-kaartmodule, IR-ontvanger en relais toevoegen.

Pas op bladzijde 276 van het boek wordt begonnen met netwerkcommunicatie. Heel terecht volgens mij. Want de ESP32 is, zoals al eerder vermeld, niet „alleen maar“ een WLAN-controller met wat toegevoegde periferie: het is een heel flexibele en krachtige universele controller, die even geschikt is voor beginners als voor professionele projecten. Ook het ElektorLab gebruikt de ESP32 graag als schakelcentrale. Het boek is dan ook een goed begin om de broncode van allerlei Elektor-projecten beter te begrijpen.

In hoofdstuk 7 worden de thema’s WLAN-netwerk, TCP, UDP en HTTP behandeld, voordat in het volgende hoofdstuk het uitlezen van een DHT11-vochtigheids- en temperatuursensor voor het cloudplatform ThingSpeak aan de orde komt.

Mijn eigen IoT-demo

Als oude IoT-fan heb ik dit voorbeeld nagebouwd, hoewel ik het wel een beetje heb aangepast. In plaats van de temperatuur- en vochtigheidssensor gebruik ik de kleine microfoonmodule uit de kit (de broncode van mijn voorbeeld is onderaan deze pagina te vinden) om een geluidsniveau te meten. Om dat te realiseren, bemonster ik snel de analoge uitgangswaarden van de microfoonmodule, bereken het gemiddelde over 256 waarden en tel, hoe vaak de volgende samplewaarden een bepaalde drempel boven of onder die gemiddelde waarde onder- of overschrijden om grote signaalamplitudes te detecteren. Elke paar seconden wordt de tellerwaarde verzonden naar het internet.
 


Net als bij de andere tot nu toe gebruikte cloudplatforms openSenseMap en AllThingsTalk moeten we ons eerst registreren bij ThingSpeak, een apparaat aanmaken (dat correspondeert met een kaart die meetwaarden opneemt) en dan invoeren, welk type sensoren worden gebruikt (een apparaat kan meerdere sensoren bevatten). Bij ThinkSpeak wordt een apparaat gerepresenteerd door een Channel. Ik heb dus een nieuw Channel aangemaakt en daarna een Field geregistreerd voor een sensor, die gemeten geluidsniveaus doorgeeft (zie screenshot).
 


In mijn serie „Mijn pad naar het IoT“ heb ik steeds met MQTT gewerkt om sensorwaarden naar de cloud te sturen. Bij ThingSpeak werkt het anders: de meetwaarden worden gewoon verzonden via HTTP-GET . We moeten via TCP verbinding maken met ThingSpeak en dan via TCP het volgende overdragen:
 
GET /update?api_key=AAAAAAAAAAAAAAAA&field1=XXX HTTP/1.0
Host: https://api.thingspeak.com

AAAAAAAAAAAAAAAA is de API-key, die ThingSpeak toewijst bij het aanmaken van een kanaal. XXX is de meetwaarde voor het eerste Field.
Het lukte mij, met behulp van het boek, de kit en de voorbeeldprogramma’s, heel snel om de toepassing te realiseren. Natuurlijk werkte de communicatie met ThingSpeak niet meteen, maar ik merkte al snel wat er aan de hand was: de auteur had bij het begin van de voorbeeldcode wel een string APIKEY aangemaakt, en daar had ik braaf de API-key van mijn eigen ThingSpeak-site ingevoerd, maar de string APIKEY werd verder in de code helemaal niet gebruikt: daar was een voor mij nutteloze API-key van de auteur hard ingecodeerd, en die had ik bij het kopiëren overgenomen. Dat is geen ramp, maar het geeft toch een beetje de indruk, dat de code voor het project onder grote tijdsdruk was gemaakt.
In het screenshot ziet u de door mij geregisteerde geluidsniveaus op mijn ThingSpeak-site.
 

 
Als u het voorbeeld wilt reproduceren, moet u op ThingSpeak een eigen Channel aanmaken en de daar verkregen de API-key invoeren in de sketch SoundToThingSpeak (download onderaan), net zo als de SSID en het wachtwoord van uw WiFi-netwerk.
De toepassing biedt nog ruimte voor uitbreiding: naast met de licht-, temperatuur- en vochtigheidssensoren uit de kit een ruimte te bewaken, zouden we bijvoorbeeld ook op afstand kunnen bewaken, of er een lawaaiig feest plaatsvindt (of dat voor u een realistisch toepassingsscenario is, moet u zelf uitmaken). ;-)

Ik kon het natuurlijk niet laten en heb de sketch uit mijn laatste review nog aangepast aan ThingSpeak. In plaats van het display heb ik ditmaal weer een RGB-LED gebruikt voor het weergeven van de verbindingsstatus. In plaats van een lichtgevoelige weerstand heb ik de DHT11-sensor uit de kit gebruikt. Ook deze code is te vinden in het zip-bestand in de download. Als u de sketch vergelijkt met die uit mijn laatste review, dan ziet u de aanpassingen in de GUI-functies (RGB-LED in plaats van display). In plaats van MQTT gebruik ik nu HTTP, wat de hoofdlus eenvoudiger maakt. De SSID, het wachtwoord en de API-Key hoeven we in mijn tweede voorbeeld niet meer hard te coderen, maar ze kunnen worden ingevoerd met de bekende webpagina uit mijn serie. Voer uw ThingSpeak-API-key in onder SENSOR ID/TOKEN. Bij BROKER ADDRESS moet u „api.thingspeak.com“ invoeren. De bestanden in de map libraries in de download moet u naar uw Arduino-libraries-map slepen, net als de bibliotheken voor het aanspreken van de DHT-sensor (van Adafruit, zie boek).
 

ESP32 voor professionals

In de verdere hoofdstukken van het boek volgen verschillende webserver-projecten en in hoofdstuk 13 uiteindelijk Bluetooth, ook erg interessant voor mij, maar dat wil ik bewaren voor een toekomstige review.
In de drie laatste hoofdstukken verlaat Dogan Ibrahim de Arduino-IDE en presenteert hij het programmeren met MicroPython en het ontwikkelen met ESP-IDF. Dat laatste is een speciaal voor de ESP32 ontwikkelde IDE, die gebaseerd is op FreeRTOS en onder meer het programmeren van tasks mogelijk maakt. Op een beperk aantal pagina’s kan dit interessante thema natuurlijk niet uitputtend worden behandeld. Dat vraagt volgens mij om een volgend ESP32-boek, dat voor zover ik weet nog niet op de markt is.

Conclusie

Mijn conclusie: een rijke handleiding die (samen met de onderdelenkit) vooral is aan te bevelen voor beginners, die belangstelling hebben voor meet- en besturingsprojecten. Het boek is ook een goed startpunt voor overstappers, die van de Arduino Uno komen en de krachtige ESP32 willen leren kennen. Voor wie zich intensief met netwerkcommunicatie en cloudprojecten wil bezighouden, zijn er andere boeken.