Domotica is nog leuker als je het zelf bouwt! Dat kan laagdrempelig en voordelig met de ESP8266. Hier gebruiken we de microcontroller voor temperatuurmetingen via het netwerkprotocol mqtt.

Gertjan Groen

 

Misschien heb je al ervaring met Arduino-microcontrollers en bijbehorende Arduino (IDE)-software, waarmee je uiteenlopende elektronische schakelingen kunt maken. Kijk maar eens op https://create.arduino.cc/projecthub om wat inspiratie op te doen. De ESP8266 en zijn opvolger ESP32 kun je op vergelijkbare wijze gebruiken (als microcontroller dus), maar ze zijn ook nog eens voorzien van wifi en de ESP32 voegt hier nog bluetooth aan toe. Ideaal voor allerlei Domotica-projecten! Voor het programmeren gebruik je ook weer Arduino en enkele bibliotheken, die je het meeste werk uit handen nemen. 

 

esp8266 3 Bij deze workshop 
gebruiken we een 
ontwikkelbordje
met de ESP8266

Hier nemen we een klein ontwikkelaarsbordje (ongeveer 6 bij 3 cm) rond de ESP8266 als basis en maken we een temperatuursensor die metingen doorgeeft via mqtt (zie kader ‘Het mqtt-protocol’). Het ontwikkelaarsbordje heeft goed toegankelijke gpio-pinnen voor het aansluiten van bijvoorbeeld een sensor of schakelaar en is eenvoudig te programmeren via een usb-aansluiting. Je koopt ze voor minder dan 5 euro.

schets
Schema met de temperatuursensor

TEMPERATUURSENSOR AANSLUITEN 
Je kunt naar keuze een analoge of digitale temperatuursensor aansluiten. Hier kiezen we de digitale DS18B20, met een temperatuurbereik van -55 tot +125 °C en een nauwkeurigheid van circa 0,5 °C binnen een belangrijk deel van dat bereik. Er is één data-pin op de ESP8266 nodig, die met wat aanpassingen zelfs door meerdere sensoren kan worden gedeeld. Er is eventueel een water dichte variant van de sensor voor metingen buitenshuis of voor vloeistoftemperaturen zoals het badwater. In de schets zie je hoe alles wordt aangesloten. Data-pin D2 correspondeert met gpio 4. De zogenoemde pull-up weerstand heeft een waarde van 4,7 kOhm. Heb je alles aangesloten, dan kun je proberen de temperatuur uit te lezen. Dat doen we straks als eerste. 

voorkeuren
Ontwikkelingsborden met de ESP8266 moet jehandmatig aan Arduino toevoegen

ARDUINO INSTALLEREN 
We gebruiken de Arduino-software voor het programmeren van de ESP8266. Je vindt deze op https://www.arduino.cc/en/software. Installeer Arduino en start het daarna. We gaan als eerste ontwikkelingsborden met de ESP8266 toevoegen. Kies daarvoor Bestand, ga naar Voorkeuren en voer achter More Board Managers URL’s de link naar http://arduino.esp8266.com/stable/package_esp8266com_index.json in. Ga onder Hulpmiddelen naar Board en kies Board Beheer. Zoek op trefwoord naar ‘esp8266’ en kies bij het resultaat ESP8266 by ESP8266 Community de optie Installeren. Verder hebben we extra bibliotheken nodig voor het uitlezen van de temperatuursensor. Hiervoor ga je onder Schets naar Bibliotheek gebruiken en kies je Bibliotheken beheren. Zoek naar OneWire en installeer de gelijknamige bibliotheek. Zoek dan naar DallasTemperature en installeer ook deze bibliotheek. Herstart daarna Arduino. 

       
   

Het mqtt-protocol

             
               

Werk je met Domotica, dan kom je tegenwoordig al snel met mqtt (Message Queuing Telemetry Transport) in aanraking: een protocol voor het uitwisselen van gegevens met een mqtt-server (ook wel mqtt-broker genoemd) via je netwerk. Gegevensuitwisseling vindt plaats via zogenaamde topics die je zelf kunt bedenken. Voor een buitensensor voor temperatuur en luchtvochtigheid zijn bijvoorbeeld ‘sensoren/buiten/ temperatuur’ en ‘sensoren/buiten/luchtvochtigheid’ logische keuzes. Omdat het zo’n licht protocol is, kan ook een microcontroller als de ESP8266 deze topics lezen of waardes daarin publiceren, zoals we in de workshop laten zien.

ONTWIKKELINGSBORD INSTELLEN 
We gaan het ontwikkelingsbordje nu via usb aansluiten op de computer, instellen en testen. Zoek in het menu Hulpmiddelen onder Board jouw ontwikkelaarsbordje op en selecteer het. Via het menu kun je daarnaast ook instellingen opgeven. Selecteer in ieder geval onder Poort de compoort die het ontwikkelingsbord heeft ge kregen. Die kun je eventueel via Apparaatbeheer in Windows opzoeken, maar meestal is het een van de hogere com-poorten. Met de optie Haal Board Info onder Hulpmiddelen kun je eventueel controleren of communicatie correct tot stand komt. 

UITLEZEN TEMPERATUUR 
Met het volgende programma kun je de temperatuur uitlezen en de waarde printen naar de seriële poort, zodat je de meting kunt controleren binnen Arduino zelf. Verderop in deze workshop gaan we dit programma verder uitbreiden om de waarde te publiceren bij een mqtt-broker.  

#include <OneWire.h> 
#include <DallasTemperature.h> 

const int oneWireBusPin = 4; 
OneWire oneWire(oneWireBusPin); 
DallasTemperature sensors(&oneWire); 

void setup() { 
Serial.begin(115200); 
sensors.begin(); 

void loop() { 
sensors.requestTemperatures(); 
float tempC = sensors.getTempCByIndex(0); 
Serial.print(“Meetwaarde: “); 
Serial.print(tempC); 
Serial.println(“ºC”); 
delay(5000); 

De opzet zal vertrouwd zijn als je vaker met Arduino hebt gewerkt. In de eerste twee regels voegen we de vereiste bibliotheken toe voor de temperatuurmeting. Daarna volgen declaraties van variabelen. Binnen ‘setup()’ initialiseren we vervolgens de seriële poort en de temperatuursensor. Vervolgens wordt herhaaldelijk alle code binnen ‘loop()’ uitgevoerd, waarbij telkens eerst de temperatuur wordt opgevraagd via functies uit de betreffende bibliotheken en dan geprint naar de seriële poort. Heb je dit ingevoerd en wil je het op de ESP8266 zetten, dan kies je onder Schets voor Upload. Pas als het uploaden is voltooid, kun je onder Hulpmiddelen de optie Seriële monitor kiezen en krijg je als het goed is de temperatuurwaarden te zien. Via het venster van de seriële monitor moet je de overdracht mogelijk wel eerst op 115200 baud instellen. De optie Show timestamp in het venster is ook praktisch: hiermee worden datum en tijd aan het begin van elke regel geprint. Zie je de temperatuur iets oplopen als je de sensor aanraakt?

upload
Na het schrijven van het programma kunnen we dit uploaden naar de ESP8266

           addons 2
  De bekende mqtt-broker Mosquitto is als officiële add-on
voor Home Assistant beschikbaar

MQTT-BROKER INSTALLEREN 
We willen de waardes bij een mqtt-broker gaan publiceren, dus die hebben we eerst nodig. Je kunt zo’n mqtt-broker ergens in je netwerk installeren. Hier gebruiken we Home Assistant en de officiële add-on Mosquitto. Om deze te installeren, ga je in Home Assistant naar Supervisor en dan Add-on Store. Kies Mosquitto broker, klik op Install en daarna Start. Eventuele bijzonderheden vind je onder Log. Mosquitto werkt standaard voor alle Home Assistant-gebruikers. We gaan een extra gebruikersaccount voor de ESP8266 aan Home Assistant toevoegen. Via dat account kunnen we vervolgens berichten gaan publiceren. 

       
   

Tasmota-firmware voor de ESP8266

             
               

Wil je met de ESP8266 en mqtt aan de slag zonder te programmeren? Dan kun je de populaire opensource-firmware Tasmota overwegen (https://tasmota.github.io/docs/). Die is oorspronkelijk ontwikkeld voor Sonoff-producten zoals de Sonoff Basic. Feitelijk is dit een ESP8266 met relais om een apparaat draadloos te schakelen. De firmware ondersteunt ook talloze andere producten met de ESP8266. Het flashen van de firmware is vaak de grootste uitdaging. Via Tasmota kun je apparaten eenvoudig en op uiteenlopende manieren bedienen, onder meer via een ingebouwde webpagina en met mqtt.

GEBRUIKER TOEVOEGEN 
Het toevoegen van een gebruiker kan alleen in de geavanceerde modus. Open daarom je profiel door linksonder op je naam te klikken. Zet dan de optie Geavanceerde modus aan. Er zijn nu diverse extra menuopties beschikbaar, waaronder de mogelijkheid een gebruiker toe te voegen onder Instellingen en dan Gebruikers. Kies hier Gebruiker toevoegen. Vul een weergave naam, gebruikersnaam (we kiezen mqttuser) en wachtwoord in en kies Maken. Onthoud het wachtwoord. Als laatste gaan we naar Instellingen en dan Integraties. Je ziet dat MQTT automatisch als integratie is ontdekt. Klik op Configureer, zorg dat het vinkje bij Detectie inschakelen actief is en kies Opslaan. De configuratie in Home Assistant is hiermee klaar.  

gebruikermaken 2
Een Home Assistant-gebruiker die je aanmaakt, zal ook toegang tot de mqtt-broker krijgen  

BERICHT PUBLICEREN 
Om eenvoudig met mqtt te werken, gaan we de bibliotheek PubSubClient toevoegen. Deze kun je downloaden via https://github.com/knolleary/ pubsubclient/archive/master.zip Pak dit bestand master.zip uit en hernoem de map van ‘pubsubclient-master’ naar ‘pubsubclient’. Die map kopieer je vervolgens in zijn geheel naar de map ‘libraries’ van Arduino. Die vind je veelal onder C:\Program Files (x86)\Arduino\libraries. Herstart daarna Arduino. Als je naar het menu Bestand gaat, vind je onder Voorbeelden en dan PubSubClient enkele praktische voorbeeldprogramma’s om inspiratie op te doen. 

BESTAND MET INSTELLINGEN
 Voor alle instellingen maken we een apart bestand aan, genaamd ‘Settings.h’ en bewaren dit in dezelfde map als ons programma. Zet hierin alle instellingen voor wifi en de mqtt-broker. Daar kun je dan in je programma naar verwijzen.  

#define wifi_ssid “ssid” 
#define wifi_password “wachtwoord” 
#define mqtt_server “192.168.1.50” 
#define mqtt_poort 1883 
#define mqtt_user “mqttuser” 
#define mqtt_password “mqtt_password” 
#define mqtt_clientid “ESP8266Gebruiker”
#define mqtt_topic “sensoren/buiten/temperatuur” 

HOOFDPROGRAMMA
In het hoofdprogramma hebben we de extra bibliotheken ESP8266WiFi.h en PubSubClient.h nodig én het instellingenbestand ‘Settings.h’. Het hele programma met beknopte uitleg vind je hieronder.  

defprogramma
Het uiteindelijke programma voor de ESP8266 


UITLEZEN IN HOME ASSISTANT 
Heb je het programma gestart, dan is de waarde beschikbaar bij de mqtt-broker en kun je die in Home Assistant uitlezen. Om het te proberen, ga je in Home Assistant via Instellingen naar Integraties en kies je bij Mosquitto broker voor Configureer. Bij Luisteren naar onderwerp voer je de topicnaam in, zoals sensoren/buiten/ temperatuur. Klik dan op Begin te luisteren. Je ziet dan de temperatuurmeldingen vanzelf binnenkomen.

luisteren
In Home Assistant kun je berichten in een topic bij de mqtt-broker volgen

SENSOR TOEVOEGEN 
Wil je de temperatuursensor toevoegen, dan kan dit via het configuratiebestand ‘configuration.yaml’. Voor het bewerken daarvan is de add-on File editor handig. Installeer deze, zet de optie Show in sidebar aan en start de add-on. Via het menu kun je deze dan direct openen én het bestand ‘configuration.yaml’ openen. Voeg daarin de onderstaande regels toe: 

sensor:
 - platform: mqtt 
   state_topic: “sensoren/buiten/temperatuur” 
   name: “Buitentemperatuur” 

Ga vervolgens naar Instellingen en Serverbeheer en kies onder het kopje Serverbeheer voor Herstarten. Na het herstarten zie je de temperatuurmeting terug onder Overzicht

UITBREIDINGEN
Je kunt het project op allerlei manieren uitbreiden. Zo kun je meerdere DS18B20-temperatuursensoren aansluiten, een pieper als vorstwaarschuwing toevoegen of een klein ePaper-scherm waarop de temperatuur (ook) wordt getoond. En je kunt natuurlijk talloze andere sensoren inzetten voor het meten van bijvoorbeeld licht, vlammen, vibratie, druk of vochtigheid. Alles werkt lange tijd op een batterij als je de slaapfuncties benut. Zoek je iets universeels, dan is de Tasmota-firmware ook een goede optie (zie kader hierboven). 

Hieronder vind je de broncode voor het programmerenvan de temperatuursensor. Voor de volledigheid: deze is ook te vinden en te downloaden via https://github.com/gjgroen/pca-tempsensor-mqtt

   
 

MQTT temperatuursensor 
uitlezen en publiceren: broncode

             
    

Te downladen broncode-bestand: pca-tempsensor-mqtt-main.zip

Het zip-bestand bevat 3 bestanden:

  • Readme.txt

  • empsensor.ino: hierin 3 Extra bibliotheken
    De bibliotheken OneWire en DallasTemperature zijn nodig voor het uitlezen van de waardes van de temperatuursensor.
    De bibliotheek PubSubClient gebruiken we om de metingen aan de mqtt-broker door te geven.

  • Settings.h: hierin de Instellingen voor je wifi-netwerk en de mqtt-broker.