Hoofdstuk 2 van 3

Wat je nodig hebt om te beginnen

Verzamel de onderdelen en gegevens voor een ESP32-project met MQTT: sensor, voeding, Arduino IDE, lokaal netwerk, broker en Home Assistant.

In het vorige hoofdstuk heb je kennisgemaakt met de drie hoofdrolspelers in deze gids: de ESP32, MQTT en Home Assistant. Samen zorgen ze ervoor dat een meting van een sensor uiteindelijk als bruikbare waarde in Home Assistant verschijnt.

Voordat we die gegevensroute stap voor stap gaan bekijken, is het verstandig om eerst de werkplek klaar te maken. Je hebt daarvoor geen uitgebreid elektronicalab of zwaar computersysteem nodig. Wel moeten enkele onderdelen goed op elkaar aansluiten.

Het doel van dit hoofdstuk is daarom niet alleen om een boodschappenlijst te geven. Je moet ook begrijpen waarom ieder onderdeel nodig is. Dat maakt het later veel eenvoudiger om een storing te onderzoeken. Als een temperatuurwaarde niet in Home Assistant verschijnt, wil je immers kunnen bepalen of het probleem bij de sensor, de ESP32, wifi, MQTT of Home Assistant zit.

We beginnen klein: één ESP32, één sensor en één meetwaarde.

De onderdelen van het systeem

Voor het project in deze gids heb je vijf bouwstenen nodig:

  1. een ESP32 met een aangesloten sensor;

  2. een computer waarop je de ESP32 kunt programmeren;

  3. een werkend wifi-netwerk;

  4. een MQTT-broker;

  5. een werkende installatie van Home Assistant.

Daarnaast zijn enkele hulpmiddelen handig om te kunnen zien wat er onderweg gebeurt.

Je hoeft niet alles tegelijk te installeren en configureren. Sterker nog: het is meestal beter om steeds één onderdeel toe te voegen en daarna te controleren of het werkt. Zo blijft zichtbaar welke wijziging welk resultaat veroorzaakt.

Een ESP32-ontwikkelbord

De ESP32 vormt het begin van de gegevensroute. Hij leest de sensor uit, maakt verbinding met wifi en verstuurt de meetwaarde via MQTT.

Gebruik bij voorkeur een gewoon ESP32-ontwikkelbord met een USB-aansluiting. Zo’n bord bevat naast de ESP32-chip ook de elektronica die nodig is om het bord via USB te programmeren en van stroom te voorzien.

Er bestaan veel uitvoeringen. De precieze vorm, USB-aansluiting en pinnamen kunnen verschillen. Voor deze gids is vooral belangrijk dat het bord:

  • via wifi kan communiceren;

  • vanuit de Arduino IDE geprogrammeerd kan worden;

  • voldoende aansluitpinnen heeft voor de gekozen sensor;

  • met een geschikte USB-kabel op je computer kan worden aangesloten.

Een standaard ESP32 DevKit is voor dit doel meestal voldoende. Je hebt geen bijzonder krachtige uitvoering nodig.

Controleer welk bord je hebt

Bekijk voordat je begint de opdruk op het bord. Noteer indien mogelijk:

  • het type ESP32;

  • het type ontwikkelbord;

  • het soort USB-aansluiting;

  • de beschikbare pinnamen.

Maak eventueel een foto waarop de opdruk en aansluitpinnen goed zichtbaar zijn. Dat kan later veel zoekwerk besparen.

De volledige, voor het Werkplaats-project geteste onderdelenlijst hoort bij de bouwbeschrijving in De Werkplaats. In deze gids richten we ons vooral op de werking en op de keuzes die voor vrijwel ieder ESP32-sensorproject gelden.

Een geschikte USB-kabel

Een USB-kabel lijkt een onbelangrijk onderdeel, maar veroorzaakt verrassend vaak problemen.

Sommige kabels zijn uitsluitend bedoeld om een apparaat op te laden. Ze kunnen wel voeding leveren, maar geen gegevens overbrengen. De ESP32 gaat dan mogelijk branden, terwijl je computer geen nieuwe seriële poort laat zien.

Gebruik daarom een USB-kabel waarvan je weet dat hij gegevens kan overbrengen.

Controleer dit bij voorkeur meteen:

  1. sluit de ESP32 op de computer aan;

  2. kijk of er een nieuwe seriële poort verschijnt;

  3. koppel de ESP32 weer los;

  4. controleer of die poort verdwijnt.

Wat verwacht je dat er gebeurt? Er verschijnt één extra poort zodra je het bord aansluit.

Wat gebeurt er werkelijk? Als er niets verandert, kan dat wijzen op een verkeerde kabel, een ontbrekend stuurprogramma of een probleem met de USB-aansluiting.

Deze eenvoudige controle vertelt je meer dan alleen kijken of een ledje brandt.

Een sensor

De ESP32 heeft gegevens nodig om te kunnen versturen. In deze gids gebruiken we een sensor als bron van die gegevens.

Bij het binnenthermometerproject uit De Werkplaats is dat bijvoorbeeld een SHT41. Deze sensor meet temperatuur en relatieve luchtvochtigheid. De sensor communiceert via I²C met de ESP32.

I²C is een veelgebruikte verbinding waarbij meestal vier aansluitingen nodig zijn:

  • voeding;

  • massa;

  • SDA voor de gegevens;

  • SCL voor het kloksignaal.

Je hoeft I²C nog niet volledig te begrijpen. Voor nu is het voldoende om te weten dat de sensor via deze verbinding meetwaarden aan de ESP32 doorgeeft.

Andere sensoren zijn eveneens bruikbaar. Denk aan een lichtsensor, luchtdruksensor of bewegingssensor. De code en aansluitingen kunnen dan verschillen, maar de gegevensroute blijft grotendeels hetzelfde:

sensor → ESP32 → wifi → MQTT → Home Assistant

Begin bij voorkeur met één sensor waarvan een goede Arduino-bibliotheek beschikbaar is. Voeg pas een tweede sensor toe wanneer de eerste betrouwbaar werkt.

Een breadboard en verbindingsdraden

Voor een eerste test hoef je de onderdelen nog niet te solderen. Een breadboard en enkele verbindingsdraden maken het mogelijk om snel een proefopstelling te bouwen.

Welke verbindingsdraden je nodig hebt, hangt af van de aansluitingen op de ESP32 en de sensor. Vaak worden male-to-male- of male-to-female-draden gebruikt.

Een proefopstelling is niet bedoeld als permanente installatie. Losse draden kunnen verschuiven en breadboardcontacten zijn minder betrouwbaar dan gesoldeerde verbindingen. Tijdens het leren heeft zo’n tijdelijke opstelling echter een belangrijk voordeel: je kunt eenvoudig meten, veranderen en opnieuw testen.

Verander daarbij steeds maar één ding tegelijk. Als je zowel de bedrading als de software wijzigt, weet je bij een ander resultaat niet welke wijziging de oorzaak was.

Een computer om de ESP32 te programmeren

Je hebt een computer nodig om de programmacode naar de ESP32 te sturen en om berichten van het bord te bekijken.

Dat kan een Windows-, macOS- of Linux-computer zijn. De computer hoeft niet dezelfde machine te zijn waarop Home Assistant draait. Hij moet wel toegang hebben tot hetzelfde lokale netwerk als de ESP32 en Home Assistant.

Op deze computer gebruik je de Arduino IDE. Daarin schrijf of open je het programma, kies je het juiste bord en stuur je de code via USB naar de ESP32.

De seriële monitor van de Arduino IDE is minstens zo belangrijk. Daarmee kun je onder andere controleren:

  • of de ESP32 is opgestart;

  • of de sensor wordt gevonden;

  • welke meetwaarde wordt gelezen;

  • of de wifi-verbinding lukt;

  • welk IP-adres de ESP32 krijgt;

  • of de verbinding met de MQTT-broker tot stand komt;

  • of een MQTT-bericht werkelijk wordt verstuurd.

Zonder deze meldingen zie je alleen het eindresultaat. Met de seriële monitor kun je de tussenstappen waarnemen.

De Arduino IDE en benodigde bibliotheken

Om de ESP32 te programmeren, moet de Arduino IDE zijn geïnstalleerd en ondersteuning voor de ESP32 bevatten.

Daarnaast gebruikt het programma meestal enkele bibliotheken. Een bibliotheek is een verzameling bestaande programmacode voor een bepaalde taak. Daardoor hoef je bijvoorbeeld de communicatie met een sensor of MQTT-broker niet helemaal zelf te programmeren.

Voor dit soort projecten heb je doorgaans bibliotheken nodig voor:

  • de gebruikte sensor;

  • wifi;

  • MQTT.

Wifi-ondersteuning maakt meestal deel uit van het ESP32-pakket. Voor de sensor en MQTT installeer je vaak afzonderlijke bibliotheken.

Gebruik waar mogelijk dezelfde bibliotheken en versies als in de geteste projectbeschrijving. Twee bibliotheken met een vergelijkbare naam kunnen toch een andere opbouw of andere functies hebben.

Installeer ook hier niet willekeurig meerdere alternatieven tegelijk. Kies één bibliotheek, voer een eenvoudig voorbeeld uit en controleer eerst of dat werkt.

Een werkend lokaal wifi-netwerk

De ESP32 verstuurt zijn berichten via wifi. Hij moet daarom verbinding kunnen maken met een draadloos netwerk dat de MQTT-broker kan bereiken.

Veel ESP32-borden gebruiken wifi op 2,4 GHz. Een netwerk dat uitsluitend op 5 GHz werkt, is dan niet geschikt. Moderne routers bieden vaak beide frequenties aan, soms onder dezelfde netwerknaam.

Je hebt nodig:

  • de naam van het wifi-netwerk, de SSID;

  • het wifiwachtwoord;

  • voldoende bereik op de plaats waar de ESP32 wordt gebruikt;

  • lokale netwerktoegang tot de MQTT-broker.

Controleer het bereik niet alleen naast de router. Test de ESP32 ook op de plaats waar de sensor uiteindelijk komt te staan. Een apparaat kan op de werktafel probleemloos werken en in een kelder, schuur of meterkast regelmatig de verbinding verliezen.

Houd netwerkgegevens buiten gedeelde code

Een programma voor de ESP32 bevat vaak het wifiwachtwoord en de aanmeldgegevens voor MQTT. Deel zo’n bestand daarom niet zonder deze gegevens eerst te verwijderen.

Voor grotere projecten kun je de geheime gegevens in een afzonderlijk bestand bewaren. Dat maakt het eenvoudiger om de eigenlijke programmacode te delen zonder wachtwoorden prijs te geven.

Gebruik voor MQTT bij voorkeur een afzonderlijke gebruikersnaam en een sterk, uniek wachtwoord. Stel de broker niet rechtstreeks open naar internet. Voor de projecten in deze gids is lokale communicatie binnen je eigen netwerk voldoende.

Een MQTT-broker

De MQTT-broker vormt het doorgeefpunt tussen de ESP32 en Home Assistant.

De ESP32 stuurt een bericht naar de broker. Home Assistant abonneert zich bij diezelfde broker op het juiste onderwerp en ontvangt vervolgens het bericht.

De broker kan op verschillende systemen draaien. In een Home Assistant-omgeving wordt vaak de Mosquitto broker gebruikt. Belangrijk is niet zozeer waar de broker draait, maar dat zowel de ESP32 als Home Assistant hem via het lokale netwerk kunnen bereiken.

Je hebt voor de ESP32 meestal de volgende gegevens nodig:

  • het lokale IP-adres of de hostnaam van de broker;

  • de MQTT-poort;

  • een gebruikersnaam;

  • een wachtwoord;

  • het onderwerp waarop de ESP32 publiceert.

De standaardpoort voor een gewone MQTT-verbinding is vaak 1883. Neem dit niet blind over: controleer welke poort jouw broker daadwerkelijk gebruikt.

Gebruik in de code bij voorkeur geen extern internetadres wanneer de broker in je eigen netwerk draait. Een lokaal adres houdt de verbinding eenvoudig en voorkomt dat meetgegevens onnodig via internet reizen.

Een werkende Home Assistant-installatie

Home Assistant vormt het eindpunt van de gegevensroute. Daar wordt de ontvangen waarde zichtbaar als entiteit en kun je haar later gebruiken in een dashboard, geschiedenisgrafiek of automatisering.

Voor dit hoofdstuk is het voldoende dat:

  • Home Assistant draait;

  • je de webinterface kunt openen;

  • Home Assistant toegang heeft tot het lokale netwerk;

  • je beheerdersrechten hebt om een integratie toe te voegen;

  • de datum, tijd en tijdzone correct zijn ingesteld.

Home Assistant en de MQTT-broker hoeven niet per se op hetzelfde apparaat te draaien. Ze moeten elkaar wel via het netwerk kunnen bereiken.

Als je Home Assistant nog niet hebt geïnstalleerd, doe dat dan eerst volgens de installatiegids die past bij jouw systeem. Probeer in deze fase niet tegelijk Home Assistant, MQTT, de ESP32-code en de sensorbedrading op te lossen. Hoe minder onbekende onderdelen je tegelijk introduceert, hoe eenvoudiger het testen wordt.

Een hulpmiddel om MQTT-berichten te bekijken

Een MQTT-bericht is niet zichtbaar zoals een pagina in een webbrowser. Daarom is een hulpmiddel waarmee je berichten kunt bekijken bijzonder nuttig.

Dat kan bijvoorbeeld:

  • de MQTT-luisterfunctie in Home Assistant zijn;

  • een MQTT-programma op je computer;

  • een opdrachtregelprogramma van Mosquitto.

Zo’n hulpmiddel is niet strikt noodzakelijk voor het eindresultaat, maar wel belangrijk om te begrijpen wat er gebeurt.

Stel dat de ESP32 in de seriële monitor meldt dat hij 21.6 heeft verstuurd, maar Home Assistant toont geen waarde. Dan wil je weten of het bericht bij de broker is aangekomen.

Je onderzoek bestaat dan uit drie vragen:

  1. Wat verwacht je te ontvangen?

  2. Welk bericht verschijnt er werkelijk?

  3. Op welk MQTT-onderwerp verschijnt dat bericht?

Als het bericht bij de broker zichtbaar is, weet je dat de sensor, ESP32, wifi en publicatiestap waarschijnlijk werken. Je kunt het onderzoek dan richten op Home Assistant. Verschijnt het bericht niet, dan ligt het probleem eerder in de gegevensroute.

Een foutmelding of ontbrekend bericht is daarmee geen mislukking, maar informatie over de plaats waar je verder moet zoeken.

De gegevens die je vooraf verzamelt

Voordat je met de programmacode begint, is het handig om enkele gegevens op één plaats te noteren.

Maak voor jezelf een overzicht met:

  • type ESP32-bord;

  • type sensor;

  • gebruikte SDA- en SCL-pinnen;

  • naam van het wifi-netwerk;

  • lokaal adres van de MQTT-broker;

  • MQTT-poort;

  • MQTT-gebruikersnaam;

  • gekozen MQTT-onderwerp;

  • lokaal adres van Home Assistant.

Noteer wachtwoorden niet in een openbaar document of in een schermafbeelding die je deelt.

Kies voor het MQTT-onderwerp alvast een duidelijke, voorspelbare naam. Bijvoorbeeld:

werkplaats/binnenthermometer/temperatuur

Zo’n onderwerp vertelt waar de meting vandaan komt en wat de waarde voorstelt. Een onderwerp als sensor1/data werkt technisch ook, maar wordt snel onduidelijk wanneer je later meer sensoren toevoegt.

We gaan in het volgende hoofdstuk uitgebreider bekijken wat zo’n onderwerp precies doet en hoe de verschillende onderdelen de gegevens doorgeven.

Wat je nog niet nodig hebt

Bij een verbonden project ontstaat al snel de neiging om vooruit te lopen. Je denkt misschien al aan dashboards, automatiseringen, een fraaie behuizing of meerdere sensoren.

Voor de eerste werkende gegevensroute heb je dat allemaal nog niet nodig.

Laat voorlopig achterwege:

  • meerdere sensoren tegelijk;

  • uitgebreide automatiseringen;

  • bediening via internet;

  • een definitieve gesoldeerde print;

  • een 3D-geprinte behuizing;

  • ingewikkelde versleuteling of certificaten;

  • uitgebreide optimalisatie van de programmacode.

Die onderdelen kunnen later waardevol zijn. Eerst willen we één meetwaarde betrouwbaar van de sensor naar Home Assistant krijgen.

Een eenvoudige proefopstelling die je begrijpt, is een beter begin dan een uitgebreid systeem waarvan je niet kunt zien waar het misgaat.

Controlelijst voor je begint

Controleer of het volgende beschikbaar is:

  • een ESP32-ontwikkelbord;

  • een USB-datakabel;

  • een geschikte sensor;

  • een breadboard en passende verbindingsdraden;

  • een computer met de Arduino IDE;

  • ESP32-ondersteuning in de Arduino IDE;

  • de benodigde sensor- en MQTT-bibliotheken;

  • een werkend 2,4GHz-wifinetwerk;

  • een lokaal bereikbare MQTT-broker;

  • MQTT-aanmeldgegevens;

  • een werkende Home Assistant-installatie;

  • een manier om seriële meldingen te bekijken;

  • een manier om MQTT-berichten te controleren.

Je hoeft nog niet te bewijzen dat de complete route werkt. Het doel van deze controle is alleen om te voorkomen dat tijdens het bouwen ineens een essentieel onderdeel ontbreekt.

Wat je uit dit hoofdstuk kunt meenemen

Voor een eerste verbinding tussen een ESP32-sensor en Home Assistant heb je geen ingewikkelde installatie nodig. De kern bestaat uit een ESP32, een sensor, een computer, wifi, een MQTT-broker en Home Assistant.

Belangrijker dan de hoeveelheid apparatuur is dat je ieder onderdeel afzonderlijk kunt controleren. De seriële monitor laat zien wat de ESP32 doet. Een MQTT-hulpmiddel laat zien welke berichten de broker ontvangt. Home Assistant laat uiteindelijk zien hoe die berichten als entiteit worden verwerkt.

Door klein te beginnen en steeds één wijziging tegelijk uit te voeren, blijft de werking begrijpelijk. Een fout wordt dan geen raadsel, maar een aanwijzing.

In het volgende hoofdstuk, De gegevensroute begrijpen, volgen we één meetwaarde vanaf de sensor. We bekijken hoe de ESP32 die waarde leest, hoe MQTT haar doorgeeft en hoe Home Assistant weet waar het bericht thuishoort.