IoT-projecten met ESPEasy

Noud van Kruysbergen
0

Inhoudsopgave

    Inleiding

    IoT-projecten met een ESP8266-microcontroller, het hart van veel smarthome-apparaten en zelfbouwmodules, vereisen geen geavanceerde programmering. ESPEasy is een kant-en-klare firmware die zich eenvoudig laat installeren en veel aanpassingsmogelijkheden biedt. Dit beginnersartikel helpt je met de belangrijkste stappen.

    ESPeasy opening

    De populaire wifi-microcontroller ESP8266 zit in allerlei apparaten zoals draadloze schakelaars en ledlampen. Maar hij is ook een goedkope en makkelijk te programmeren kandidaat voor zelfontworpen Internet-of-Things-projecten. Daarbij zijn vooral de firmwareprojecten Tasmota en Espurna favoriet, die commerciële smarthome-apparaten in enkele stappen bevrijden uit de cloud van hun fabrikant, zodat je ze via protocollen als MQTT in je smarthomebeheer kunt integreren.

    De projecten ondersteunen 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 aansturingslogica die direct op de ESP draait. Dat maakt Tasmota en Espurna maar beperkt interessant voor eigen projecten of autonome smarthome-apparatuur.

    Maar met ESPEasy hoef je jezelf niet uitgebreid te verdiepen in het programmeren met C. De opensource software is namelijk net zo makkelijk te installeren als Tasmota en Espurna, maar biedt meer flexibiliteit wat betreft de gebruikte sensoren en protocollen. Het heeft zelfs eigen instellingen waarmee je de ESP logica kunt bijbrengen om bijvoorbeeld een stekker via een eraan verbonden sensor afhankelijk van de kamertemperatuur aan of uit te zetten. ESPEasy heeft een webinterface, waarmee alle instellingen aangepast kunnen worden. Dat bespaart kostbare tijd, die je anders in het programmeren en debuggen zou moeten investeren.

    Voorbereiding

    In principe kan ESPEasy met alle gangbare besturingssystemen op de ESP8266 geïnstalleerd worden. Voor Windows zit er zelfs de benodigde flashtool bij. Op alle andere systemen bestaat het installeren uit een paar commandline-opdrachten. Omdat de firmware via de seriële interface van de ESP wordt geïnstalleerd, variëren de benodigde extra’s van apparaat tot apparaat. Als beginner kun je het jezelf makkelijker maken: ESP-boardvarianten zoals de Wemos D1 mini en de NodeMCU hebben een micro-usb-aansluiting en usb-naar- 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 kruiselings aansluiten met de seriële interface van het – van de stroom losgekoppelde – 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 documentatie van Espurna en Tasmota staan instructies voor het installeren op een groot aantal kanten- klare apparaten, die grotendeels 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 installatie voor elkaar. Voor ESPEasy heb je wel minstens 1 MB flashgeheugen nodig.


    Ontvang gratis meer informatie over microcontrollers en IoT, schrijf je in voor de nieuwsbrief:

    Ontvang elke week het laatste IT-nieuws, de handigste tips en speciale aanbiedingen.

     

    Installatie

    Download om te beginnen de laatste release van ESPEasy voor de ESP8266 (ESPEasy_ESP82xx_*) en pak het zip-archief uit. Zoek in de map bin naar het benodigde firmwarebestand: boards met usb-poort hebben meestal 4 MB geheugen, selecteer daarvoor dus *_normal_ESP8266_4M1M.bin en kopieer het bestand naar de bovengelegen map.

    Een Windows-tool zit er al bij. Windows-gebruikers kunnen deze alinea dan ook overslaan. Bij macOS en Linux kun je de benodigde tool met het Python-pakketbeheer pip installeren: sudo pip install esptool. Python is in macOS standaard geïnstalleerd, net als bij veel Linux-distributies. Ontbreekt het desondanks, dan kun je Python en Python-pip met het pakketbeheer van je distributie installeren.

    Voor hert installeren 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 FlashESP8266.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 Apparaatbeheer 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. Deze tutorial voor Windows beschrijft hoe je dit doet. Vervolgens kun je verder lezen bij het kopje Basisconfiguratie.

    Bij Linux of macOS zoek je eerst het poortadres van de seriële interface op. Voor zover er geen ander usb-apparaat is aangesloten dat een seriële interface emuleert, is het adres bij Linux ttyUSB0. Met de commandline- 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 interfacenaam.

    Maak eerst het flashgeheugen 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-bestandsnaam

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

    Basisconfiguratie

    Na het installeren zet ESPEasy een eigen wifinetwerk op de ESP op. Zoek dat op en log in met het wachtwoord configesp. Als de configuratiepagina op je computer niet automatisch verschijnt, kun je hem oproepen met een willekeurige browser: http://192.168.4.1. Kies je eigen wifinetwerk uit de lijst, vul onderaan het bijbehorende 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 webinterface van de router of met een ip-scanner voor het betreffende (mobiele) besturingssysteem dat je gebruikt. Zodra je het ip-adres gevonden hebt, roep je dat in de browser op. Bij de webinterface 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 wifiwachtwoord dat ESPEasy voor zijn eigen wifinetwerk gebruikt voor het geval het ingestelde wifi niet beschikbaar 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 de ntppool-website kun je servers in eigen land vinden.

    Sensors

    ESPEasy ondersteunt van huis uit een groot aantal sensors die populair zijn in de hobbywereld 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. Afhankelijk van het type verschillen de aansluitwijze en de gebruikte pinnen. De betreffende documentatie geeft aanwijzingen hoe je de sensor met de ESP moet verbinden en of er bijvoorbeeld voorschakelweerstanden nodig zijn.

    We laten de instelling zien aan de hand van de temperatuursensor DS18B20. Die is erg geschikt voor beginners omdat hij heel makkelijk aan te sluiten en te configureren is. Aangezien hij het busprotocol 1-wire-bus gebruikt, kunnen meerdere sensors op één GPIO gebruikt worden. Ze worden automatisch 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-installatie toe te voegen, klik je voor een van de twaalf regels op het tabblad Devices op Add. In het drop-down-menu dat vervolgens verschijnt, kies je de in te stellen sensor uit – in ons geval Environment 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 meetwaarden kun je eventueel in het veld Formula zetten. Bijvoorbeeld %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 intervallen de cpu zwaar belasten, zodat bijvoorbeeld de webinterface traag wordt. Wijzigingen bevestig je weer met Submit. Klik daarna op Close om terug te gaan naar de lijst waar de actuele meetwaarde wordt weergegeven.

    Doorlezen is gratis, maar eerst even dit:

    Dit artikel is met grote zorg samengesteld door de redactie van c’t magazine – het meest toonaangevende computertijdschrift van Nederland en België. Met zeer uitgebreide tests en praktische workshops biedt c’t de diepgang die je nergens online vindt.

    Bekijk de abonnementen   Lees eerst verder

    E-mails

    E-mails zijn de simpelste manier om berichten van de ESP te ontvangen. ESPEasy heeft wel een SMTP-client, maar de beperkte geheugencapaciteit van de ESP8266 staat geen transportversleuteling (TLS) toe. Omdat veel maildiensten onversleutelde SMTP-verbindingen weigeren, moet je een kleine omweg maken. Daarbij moet je erop letten de berichten zo te houden dat ze geen privacy-probleem of veiligheidsrisico opleveren. Je kunt je eigen e-mailserver hosten of je gebruikt bijvoorbeeld SMTP2GO, een SMTP-dienst die nog zonder versleuteling te gebruiken is. Met de gratis versie kun je maximaal 1000 e-mails per maand versturen. Het registreren op de website is zo gebeurd en op het dashboard kun je onder ‘Settings / SMTP USers’ nieuwe inloggegevens opgeven.

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

    Na het afsluiten van de configuratie kun je in het veld Body eerst een testbericht zetten en dan op Test klikken om een bericht te sturen.

    ESPeasy; SMTP-client

    ESPEasy heeft een SMTP-client, zodat ESP makkelijk e-mails kan versturen, bijvoorbeeld wanneer de meetwaarde van een sensor boven of onder een drempelwaarde komt.

    Rules

    De rules van ESPEasy zijn een soort scripttaal en hét unieke aspect van de firmware. Daarmee kun je ESPEasy eigen schakellogica bijbrengen zonder de programmacode van de firmware te hoeven veranderen. We laten je de basis zien, om bijvoorbeeld bij het rebooten het actuele ip-adres en andere statusgegevens zoals e-mail, MQTT-publish of HTTP-request te versturen. De rules zijn echter veel krachtiger dan we in dit artikel kunnen bespreken, maar in de documentatie van ESPEasy vind je een tutorial die verdere informatie biedt.

    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 webinterface met F5 opnieuw in. Dan verschijnt het tabblad Rules in de interface. De eenvoudigste rule bestaat uit een trigger en een actie, bijvoorbeeld:

    on Time#Initialized do
    notify 1, ESP verbonden!
    endon

    Daarmee stuurt de ESP na iedere reboot en succesvolle NTP-tijdsynchronisatie een mail naar het bij de e-mailinstellingen opgegeven adres. De trigger System# Boot zou te vroeg in werking treden, namelijk voordat de ESP zich met zijn wifiverbinding en het DHCP-request bezighoudt, zodat het verzenden van de mail mislukt. Met het grote aantal systeemvariabelen kun je statusberichten dynamisch vormgeven: %ssid%, %bssid%, %ip% en %wi_ch% verraden bijvoorbeeld belangrijke netwerkgegevens. Bijvoorbeeld: notify 1, ESP verbonden: SSID: %ssid%, BSSID: %bssid%, Kanaal: %wi_ch%, IP: %ip%. Als je de komma-gescheiden opmaak niet fijn vindt, kun met %CR% nieuwe regels maken. Alle systeemvariabelen vind je onder ‘Tools / System Variables’ inclusief hun huidige waarden.

    ESPeasy; sensors

    Alle sensorinstellingen kunnen bij ESPEasy via de webinterface worden geconfigureerd.

    Wil je na iedere reboot hetzelfde bericht krijgen, dan kun je dat bij de systeemvariabelen van de e-mailinstellingen als Body aanmaken. Die mail wordt dan door het commando notify 1 geactiveerd, 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 aangehangen tekst blijven gebruiken om berichten vanuit de rules te versturen.

    GPIO’s en temperatuursensors zijn net zo makkelijk als triggers voor berichten te gebruiken:

    on Sensor1#Temperature<20 do
    notify 1, De temperatuur bedraagt [Sensor1#Temperature]
    endon

    Sensor1 geeft de sensor en Temperature geeft de betreffende meetwaarde aan. Die laatste worden bij de instellingen van de sensor weergegeven en zijn vrij aan te passen. Een combisensor kan bijvoorbeeld Temperature en Humidity als meetwaarden hebben. Let er daarbij op dat iedere nieuwe waarde onder 20 °C een mailtje activeert. Anders kun je eventueel het leesinterval bij de sensorinstellingen verhogen naar enkele minuten.

    Voeg je bijvoorbeeld 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 voorwaarden koppelen, bijvoorbeeld:

    on Sensor1#Temperature<15 do
    if [Switch1#State]=0
    notify 1, Temperatuur 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 bijvoorbeeld meer waarden of schakeltoestanden op te vragen.

    Tijdgestuurde 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

    Vooropgesteld dat de ESP een tijdsynchronisatie 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ördinaten van de beoogde locatie bij de Advanced Settings invoert, kun je ook %sunrise% en %sunset% gebruiken in plaats van een vaste tijd. Net als de rules, zijn ook de commando’s uitgebreid gedocumenteerd.

    MQTT

    Het telemetrieprotocol MQTT (Message Queuing Telemetry Transport) is erg populair in de cloudloze smarthome- wereld. Het is eenvoudig op te zetten en bevat ook ESPEasy. De basisbeginselen van MQTT hebben we in c’t 5/2018, p.118 besproken, en je kunt het ook hier op onze website lezen.

    Om een nieuwe MQTT-client in te stellen, klik je op het tabblad Controllers op Add. Wanneer je een ondersteund smarthome-systeem gebruikt, kies je het bijbehorende MQTT-profiel daarvoor. Je kunt ook ‘Home Assistant (openHAB) MQTT’ selecteren en het adres en de toegangsgegevens van je MQTT-broker invoeren. Pas de topics bij Controller Subscribe en Controller Publish aan, maar zorg ervoor bij Publish de subtopic-variabelen %tskname% en %valname% te laten staan. Die zorgen er later voor dat de waarden van de devices in verschillende topics worden verzonden en zo duidelijk te onderscheiden zijn.

    Om ervoor te zorgen dat ESPEasy de gegevens van een sensor verstuurt, moet de betreffende controller geactiveerd worden. Ga daarvoor op het tabblad Devices naar het apparaat en zet bij zijn instellingen 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#Initialized do
    Publish,Sensor1/status, Just booted!
    endon

     

    Machtige firmware

    ESPEasy biedt een grote flexibiliteit in vergelijking met veel andere ESP-firmwares, waardoor het de ideale keuze is voor iedereen die meer wil dan alleen tijdgestuurde schakelfuncties en smarthome-integraties. De firmware kan veel meer dan in dit artikel past. Wanneer je je in de documentatie verdiept, kun je ook bijzondere gevallen aan – en dat zonder gebruik te maken van een in verhouding grote hobbycomputer als een Raspberry Pi.

    (Dit artikel is verschenen in c’t 3/2021, p.126, met medewerking van Andrijan Möcker, bewerkt door Daniel Dupré)

    Meer handige workshops lees je in c't 05/2024

    Deel dit artikel

    Noud van Kruysbergen
    Noud van KruysbergenNoud heeft de 'American Dream' doorlopen van jongste bediende tot hoofdredacteur van c't, waar hij zo veel mogelijk de diepgang, betrouwbaarheid en diversiteit wil bewaken.

    Lees ook

    De optimale pc 2024

    Pc doe-het-zelvers kunnen momenteel kiezen uit een enorm aanbod aan snelle processors, ssd’s en grafische kaarten. Onze tips helpen je de juiste onder...

    Spotify streamen naar versterker? Zo doe je het met een Raspberry Pi!

    Om Spotify te kunnen streamen naar een niet-smart AV-receiver of analoge versterker die geen muziek-streaming­mogelijkheden heeft, heb je met een Rasp...

    0 Praat mee
    avatar
      Abonneer  
    Laat het mij weten wanneer er