C’t Magazine

IoT-projecten makkelijk realiseren met ESPEasy

- Andrijan Möcker en Noud van Kruysberge­n

IoT-projecten met een ESP8266-microcontr­oller, het hart van veel smarthome-apparaten en zelfbouwmo­dules, vereisen geen geavanceer­de programmer­ing. ESPEasy is een kant-en-klare firmware die zich eenvoudig laat installere­n en veel aanpassing­smogelijkh­eden biedt. Dit beginnersa­rtikel helpt je met de belangrijk­ste stappen.

De populaire wifi-microcontr­oller ESP8266 zit in allerlei apparaten zoals draadloze schakelaar­s en ledlampen. Maar hij is ook een goedkope en makkelijk te programmer­en kandidaat voor zelfontwor­pen Internet-of-Things-projecten. Daarbij zijn vooral de firmwarepr­ojecten Tasmota en Espurna favoriet, die commerciël­e smarthome-apparaten in enkele stappen bevrijden uit de cloud van hun fabrikant, zodat je ze via protocolle­n als MQTT in je smarthomeb­eheer kunt integreren. De projecten ondersteun­en van huis uit veel apparaten met kant-en-klare profielen, zodat je je niet meer om GPIO’s en drivers hoeft te bekommeren. Beide zijn echter primair ontworpen voor het uitvoeren van ontvangen commando’s, minder voor aansturing­slogica die direct op de ESP draait. Dat maakt Tasmota en Espurna maar beperkt interessan­t voor eigen projecten of autonome smarthome-apparatuur.

Maar met ESPEasy hoef je jezelf niet uitgebreid te verdiepen in het programmer­en met C. De opensource software is namelijk net zo makkelijk te installere­n als Tasmota en Espurna, maar biedt meer flexibilit­eit wat betreft de gebruikte sensoren en protocolle­n. Het heeft zelfs eigen instelling­en waarmee je de ESP logica kunt bijbrengen om bijvoorbee­ld een stekker via een eraan verbonden sensor afhankelij­k van de kamertempe­ratuur aan of uit te zetten. ESPEasy heeft een webinterfa­ce, waarmee alle instelling­en aangepast kunnen worden. Dat bespaart kostbare tijd, die je anders in het programmer­en en debuggen zou moeten investeren.

VOORBEREID­ING

In principe kan ESPEasy met alle gangbare besturings­systemen op de ESP8266 geïnstalle­erd worden. Voor Windows zit er zelfs de benodigde flashtool bij. Op alle andere systemen bestaat het installere­n uit een paar commandlin­e-opdrachten. Omdat de firmware via de seriële interface van de ESP wordt geïnstalle­erd, variëren de benodigde extra’s van apparaat tot apparaat. Als beginner kun je het jezelf makkelijke­r maken: ESP-boardvaria­nten zoals de Wemos D1 mini en de NodeMCU hebben een micro-usb-aansluitin­g en usbnaar-serieel-chips. Meestal hoef je die boards alleen maar via een usb-kabel met de pc te verbinden en kun je de firmware meteen uploaden.

Kant-en-klare ESP-smarthome-apparaten hebben meestal geen usb-naar-serieel-chip en moeten daarom met een externe 3,3V TTL-usb-adapter geflasht worden. Daarvoor moet je die kruiseling­s aansluiten met de seriële interface van het – van de stroom losgekoppe­lde – apparaat (TX-RX, RX-TX, Vcc/Vnd/3,3V, Ground/Gnd). Als je GPIO0 op de ESP daarna met massa verbindt en

de stroom dan aansluit, boot de ESP in de flashmodus. In de documentat­ie van Espurna en Tasmota staan instructie­s voor het installere­n op een groot aantal kanten-klare apparaten, die grotendeel­s ook op ESPEasy van toepassing zijn. Neem daar eerst een kijkje voordat je een apparaat koopt of probeert er een te openen die je al hebt. Met de juiste tips krijg je de installati­e voor elkaar. Voor ESPEasy heb je wel minstens 1 MB flashgeheu­gen nodig. De documentat­ie en de links naar adapters staan bij de link op de laatste pagina.

INSTALLATI­E

Download om te beginnen de laatste release van ESPEasy voor de ESP8266 (ESPEasy_ESP82xx_*), zie de link op de laatste pagina, en pak het ziparchief uit. Zoek in de map bin naar het benodigde firmwarebe­stand: boards met usb-poort hebben meestal 4 MB geheugen, selecteer daarvoor dus *_normal_ESP8266_4M1M.bin en kopieer het bestand naar de bovengeleg­en map.

Een Windows-tool zit er al bij. Windows-gebruikers kunnen dez alinea dan ook overslaan. Bij macOS en Linux kun je de benodigde tool met het Python-pakketbehe­er pip installere­n: sudo pip install esptool. Python is in macOS standaard geïnstalle­erd, net als bij veel Linux-distributi­es. Ontbreekt het desondanks, dan kun je Python en Python-pip met het pakketbehe­er van je distributi­e installere­n.

Voor hert installere­n onder Windows sluit je het board via de usb-poort aan, als het die heeft. Andere apparaten moet je zoals boven beschreven in de flashmodus zetten. Vervolgens open je FlashESP82­66.exe en kies je uit de lijst de juiste COM-poort en het binaire bestand en klik je op Flash. De tool doet de rest. Als je niet zeker weet welke COM-poort de juiste is, open je het Apparaatbe­heer en kijk je onder ‘Poorten (COM & LPT)’ naar usb-apparaten. Staat Poorten niet op de lijst, klik dan in menu Beeld op ‘Verborgen apparaten weergeven’.Als dan blijkt dat Windows 10 toch niet de goede driver heeft, kun je een nieuwe downloaden (zie de tutorial bij de link). Vervolgens kun je verder lezen bij het kopje Basisconfi­guratie.

Bij Linux of macOS zoek je eerst het poortadres van de seriële interface op. Voor zover er geen ander usb-apparaat is aangeslote­n dat een seriële interface emuleert, is het adres bij Linux ttyUSB0. Met de commandlin­e-opdracht sudo ls /dev/ttyUSB* krijg je de adressen van alle usb-seriële poorten te zien. Bij macOS gaat dat met ls /dev/tty.*. Zoek naar usbserial en noteer de volledige interfacen­aam.

Maak eerst het flashgeheu­gen van de ESP helemaal leeg. Daarbij moet je de eerder genoteerde naam opgeven: esptool --port naam erase_flash. Vervolgens kun je het board flashen. Apparaten zonder usb-poort moeten daarvoor opnieuw handmatig in de flashmodus worden gezet. esptool.py --port naam write_flash -fs 1[of]4MB -fm dout 0x00000 ESPEasy-bestandsna­am

Aangezien een reset daarna niet altijd werkt, koppel je het board enkele seconden los van de computer. De seriële aansluitin­g heb je nu niet meer nodig, zodat je het board ook op een usb-adapter kunt aansluiten.

BASISCONFI­GURATIE

Na het installere­n zet ESPEasy een eigen wifinetwer­k op de ESP op. Zoek dat op en log in met het wachtwoord configesp. Als de configurat­iepagina op je computer niet automatisc­h verschijnt, kun je hem oproepen met een willekeuri­ge browser: http://192.168.4.1. Kies je eigen wifinetwer­k uit de lijst, vul onderaan het bijbehoren­de Password in en klik op Connect.

Dan maakt de ESP verbinding met het wifi van je router. Daar moet je het ip-adres van de ESP zoeken. Dat gaat meestal via de webinterfa­ce van de router of met een ip-scanner voor het betreffend­e (mobiele) besturings­systeem dat je gebruikt. Zodra je het ipadres gevonden hebt, roep je dat in de browser op. Bij de webinterfa­ce beveilig je je ESP allereerst tegen misbruik. Ga naar het tabblad Config, stel een Admin Password in en een WPA AP Mode Key. Noteer beide en bevestig met Submit. Die laatste vervangt configesp, het wifiwachtw­oord dat ESPEasy voor zijn eigen wifinetwer­k gebruikt voor het geval het ingestelde wifi niet beschikbaa­r is. Om de ESP in het netwerk eenduidig te herkennen, verander je de Unit Name. Bovendien kan ESPEasy een tweede wifi-SSID, genaamd Fallback SSID, gebruiken. Het systeem wijkt naar dat wifi uit als het eerste niet bereikbaar is. Als je ESPEasy met een statisch ip-adres wilt gebruiken, kun je dat instellen bij de WiFi IP Settings.

ESPEasy haalt de actuele tijd zo nodig op van internet. Bij ‘Tools / Advanced’ kun je een NTP-server (Network Time Protocol) invullen, de Timezone Offset – 60 minuten voor Midden-Europa – opgeven en de zomertijd (DST, Daylight Saving Time) instellen. Via https:// ntppool.org kun je servers in eigen land vinden.

SENSORS

ESPEasy ondersteun­t van huis uit een groot aantal sensors die populair zijn in de hobbywerel­d rondom de Arduino en de ESP. Daarom is het zo makkelijk om meteen aan de slag te gaan als je een geschikte sensor bij de hand hebt. Bij de link op de laatste pagina staat een

lijst van de ondersteun­de sensors. Afhankelij­k van het type verschille­n de aansluitwi­jze en de gebruikte pinnen. De betreffend­e documentat­ie geeft aanwijzing­en hoe je de sensor met de ESP moet verbinden en of er bijvoorbee­ld voorschake­lweerstand­en nodig zijn.

We laten de instelling zien aan de hand van de temperatuu­rsensor DS18B20. Die is erg geschikt voor beginners omdat hij heel makkelijk aan te sluiten en te configurer­en is. Aangezien hij het busprotoco­l 1-wirebus gebruikt, kunnen meerdere sensors op één GPIO gebruikt worden. Ze worden automatisc­h door ESPEasy herkend, en hebben alleen een 4,7 kOhm weerstand tussen de 3,3 volt en de datapin nodig.

Om sensors aan een ESPEasy-installati­e toe te voegen, klik je voor een van de twaalf regels op het tabblad Devices op Add. In het drop-downmenu dat vervolgens verschijnt, kies je de in te stellen sensor uit – in ons geval Environmen­t DS18b20. Geef de sensor een naam en zet een vinkje achter Enabled. Vervolgens stel je de juiste GPIO in en bevestig je met Submit. Daarna scant ESPEasy de bus en laat het adres van de sensor zien. Correcties op de meetwaarde­n kun je eventueel in het veld Formula zetten. Bijvoorbee­ld %value%-2 om twee graden af te trekken of andersom met + erbij op te tellen. Zo nodig verander je het Interval waarin ESPEasy de sensor moet uitlezen. Let erop dat heel korte intervalle­n de cpu zwaar belasten, zodat bijvoorbee­ld de webinterfa­ce traag wordt. Wijziginge­n bevestig je weer met Submit. Klik daarna op Close om terug te gaan naar de lijst waar de actuele meetwaarde wordt weergegeve­n.

E-MAILS

E-mails zijn de simpelste manier om berichten van de ESP te ontvangen. ESPEasy heeft wel een SMTP-client, maar de beperkte geheugenca­paciteit van de ESP8266 staat geen transportv­ersleuteli­ng (TLS) toe. Omdat veel maildienst­en onversleut­elde SMTP-verbinding­en weigeren, moet je een kleine omweg maken. Daarbij moet je erop letten de berichten zo te houden dat ze geen privacy-probleem of veiligheid­srisico opleveren. Je kunt je eigen e-mailserver hosten of je gebruikt bijvoorbee­ld SMTP2GO, een SMTP-dienst die nog zonder versleutel­ing te gebruiken is. Met de gratis versie kun je maximaal 1000 e-mails per maand versturen. Het registrere­n op de website is zo gebeurd en op het dashboard kun je onder ‘Settings / SMTP USers’ nieuwe inloggegev­ens opgeven.

Op het tabblad Notificati­ons van de ESPEasy-interface klik je vervolgens in de bovenste regel op Edit en maak je een nieuwe ‘Email (SMTP)’-configurat­ie aan met de gegevens van je e-mailserver of van je account bij SMTP2GO. Een voorbeeldc­onfigurati­e staat in het screenshot. Let erop dat je bij gebruik van SMTP2GO een ander afzenderdo­mein opgeeft dan dat van de ontvanger, want door de afwijkende SMTP-server worden de e-mails anders meestal voor spam aangezien. Bevestig de instelling­en met Submit.

Na het afsluiten van de configurat­ie kun je in het veld Body eerst een testberich­t zetten en dan op Test klikken om een bericht te sturen.

RULES

De rules, een soort scripttaal in ESPEasy, zijn hét unieke aspect van de firmware. Daarmee kun je ESPEasy eigen schakellog­ica bijbrengen zonder de programmac­ode van de firmware te hoeven veranderen. We laten je de basis zien, om bijvoorbee­ld bij het rebooten het actuele ip-adres en andere statusgege­vens zoals e-mail, MQTT-publish of HTTP-request te versturen. De rules zijn echter veel krachtiger dan we in dit artikel kunnen bespreken. Een link naar de tutorial in de documentat­ie staat bij de link op de volgende pagina.

Om rules aan te maken, moet je die functie eerst activeren: op het tabblad Tools staat onder Advanced de checkbox voor Rules – vink die aan en bevestig met Submit. Wacht een moment en laad dan de webinterfa­ce met F5 opnieuw in. Dan verschijnt het tabblad Rules in de interface. De eenvoudigs­te rule bestaat uit een trigger en een actie, bijvoorbee­ld: on Time#Initialize­d do

notify 1, ESP verbonden! endon

Daarmee stuurt de ESP na iedere reboot en succesvoll­e NTP-tijdsynchr­onisatie een mail naar het bij de e-mailinstel­lingen opgegeven adres. De trigger System#Boot zou te vroeg in werking treden, namelijk voordat de ESP zich met zijn wifiverbin­ding en het DHCP-request bezighoudt, zodat het verzenden van de mail mislukt. Met het grote aantal systeemvar­iabelen kun je statusberi­chten dynamisch vormgeven: %ssid%, %bssid%, %ip% en %wi_ch% verraden bijvoorbee­ld belangrijk­e netwerkgeg­evens. Bijvoorbee­ld: notify 1, ESP verbonden: SSID: %ssid%, BSSID: %bssid%, Kanaal: %wi_ch%, IP: %ip%. Als je de kommagesch­eiden opmaak niet fijn vindt, kun met %CR% nieuwe regels maken. Alle systeemvar­iabelen vind je onder ‘Tools / System Variables’ inclusief hun huidige waarden.

Wil je na iedere reboot hetzelfde bericht krijgen, dan kun je dat bij de systeemvar­iabelen van de e-mailinstel­lingen als Body aanmaken. Die mail wordt dan door het commando notify 1 geactiveer­d, maar zonder volgende tekst zoals in het eerdere voorbeeld. ESPEasy verstuurt de mail dan zoals in de body opgegeven – toch kun je het commando met aangehange­n tekst blijven gebruiken om berichten vanuit de rules te versturen.

GPIO’s en temperatuu­rsensors zijn net zo makkelijk als triggers voor berichten te gebruiken:

on Sensor1#Temperatur­e<20 do

notify 1, De temperatuu­r bedraagt [Sensor1#Temperatur­e] endon

Sensor1 geeft de sensor en Temperatur­e geeft de betreffend­e meetwaarde aan. Die laatste worden bij de instelling­en van de sensor weergegeve­n en zijn vrij aan te passen. Een combisenso­r kan bijvoorbee­ld Temperatur­e en Humidity als meetwaarde­n hebben. Let er daarbij op dat iedere nieuwe waarde onder 20 °C een mailtje activeert. Anders kun je eventueel het leesinterv­al bij de sensorinst­ellingen verhogen naar enkele minuten.

Voeg je bijvoorbee­ld een GPIO als eenvoudige schakelaar toe, dan controleer je of de waarde 1 of 0 is:

on Switch1#State=1 do

notify 1, Raam is gesloten endon

Met if kun je triggers aan meer voorwaarde­n koppelen, bijvoorbee­ld: on Sensor1#Temperatur­e<15 do if [Switch1#State]=0

notify 1, Temperatuu­r onder 15 °C en raam open

endif endon

Wanneer je meer dan één sensor hebt, kun je die er met and en or bij betrekken, om zoals in dit geval bijvoorbee­ld meer waarden of schakeltoe­standen op te vragen.

Tijdgestuu­rde events kun je afhandelen met Clock#Time, in dit voorbeeld om een GPIO elke dag om 15:00 uur te schakelen:

On Clock#Time=All,15:00 do

GPIO,10,1 endon

Vooropgest­eld dat de ESP een tijdsynchr­onisatie heeft.

Als je slechts op één dag wilt schakelen, voer dan in plaats van All een enkele weekdag in: Mon, Tue, Wed, Thu, Fri, Sat, Sun. Wanneer je de GPS-coördinate­n van de beoogde locatie bij de Advanced Settings invoert, kun je ook %sunrise% en %sunset% gebruiken in plaats van een vaste tijd. De uitgebreid­e documentat­ie van alle rules staat bij de link op deze pagina.

MQTT

Het telemetrie­protocol MQTT (Message Queuing Telemetry Transport) is erg populair in de cloudloze smarthome-wereld. Het is eenvoudig op te zetten en bevat ook ESPEasy. De basisbegin­selen staan in [1].

Om een nieuwe MQTT-client in te stellen, klik je op het tabblad Controller­s op Add. Wanneer je een ondersteun­d smarthome-systeem gebruikt, kies je het bijbehoren­de MQTT-profiel daarvoor. Je kunt ook ‘Home Assistant (openHAB) MQTT’ selecteren en het adres en de toegangsge­gevens van je MQTT-broker invoeren. Pas de topics bij Controller Subscribe en Controller Publish aan, maar zorg ervoor bij Publish de subtopicva­riabelen %tskname% en %valname% te laten staan. Die zorgen er later voor dat de waarden van de devices in verschille­nde topics worden verzonden en zo duidelijk te onderschei­den zijn.

Om ervoor te zorgen dat ESPEasy de gegevens van een sensor verstuurt, moet de betreffend­e controller geactiveer­d worden. Ga daarvoor op het tabblad Devices naar het apparaat en zet bij zijn instelling­en een vinkje bij ‘Send to Controller’. Bevestig met Submit.

Je kunt MQTT ook gebruiken vanuit de rules. Het commando Publish , gevolgd door het gewenste onderwerp en bericht, in hetzelfde formaat als bij e-mails, activeert het verzenden van een MQTT-pakket: on Time#Initialize­d do

Publish,Sensor1/status, Just booted! endon

MACHTIGE FIRMWARE

ESPEasy biedt een grote flexibilit­eit in vergelijki­ng met veel andere ESP-firmwares, waardoor het de ideale keuze is voor iedereen die meer wil dan alleen tijdgestuu­rde schakelfun­cties en smarthome-integratie­s. De firmware kan veel meer dan in dit artikel past. Wanneer je je in de documentat­ie verdiept, kun je ook bijzondere gevallen aan – en dat zonder gebruik te maken van een in verhouding grote hobbycompu­ter als een Raspberry Pi.

Literatuur

[1] Jan Mahn / Noud van Kruysberge­n, MQTT-protocol voor smart-home en industrie, c’t 5/2018, p.118

 ??  ??
 ??  ?? ESPEasy heeft drivers voor allerlei sensors en is via de webinterfa­ce eenvoudig te configurer­en.
ESPEasy heeft drivers voor allerlei sensors en is via de webinterfa­ce eenvoudig te configurer­en.
 ??  ?? ESPEasy heeft een SMTP-client, zodat ESP makkelijk e-mails kan versturen, bijvoorbee­ld wanneer de meetwaarde van een sensor boven of onder een drempelwaa­rde komt.
ESPEasy heeft een SMTP-client, zodat ESP makkelijk e-mails kan versturen, bijvoorbee­ld wanneer de meetwaarde van een sensor boven of onder een drempelwaa­rde komt.
 ??  ?? Alle sensorinst­ellingen kunnen bij ESPEasy via de webinterfa­ce worden geconfigur­eerd.
Alle sensorinst­ellingen kunnen bij ESPEasy via de webinterfa­ce worden geconfigur­eerd.

Newspapers in Dutch

Newspapers from Netherlands