ID.nl logo
Zo maak je je eigen domotica-gateway
© PXimport
Zekerheid & gemak

Zo maak je je eigen domotica-gateway

Mogelijk heb je enkele draadloze apparaten in huis zoals temperatuursensoren, deurcontactsensoren, stopcontacten of een slimme weegschaal. Door OpenMQTTGateway op een microcontrollerbordje met de juiste hardware te installeren, koppel je al deze apparaten aan je domoticasysteem. Dat kan zowel met bluetooth low-energy en 433MHz-radio als infrarood licht, LoRa of gsm/gprs.

OpenMQTTGateway installeer je op een ESP32, ESP8266 of Arduino. Je sluit dan op je microcontrollerbordje transceivers aan voor 433,92MHz-golven, bluetooth low-energy, infrarood, LoRa of gms/gprs. De software ontvangt data van sensoren die deze protocollen gebruiken en stuurt ze in de vorm van MQTT-boodschappen naar je MQTT-broker. Je domoticasysteem zoals Home Assistant kan die boodschappen dan zo ook oppikken en de sensordata visualiseren.

De mogelijkheden zijn vrij divers omdat je zelf je eigen gateway kunt bouwen. In dit artikel zetten we drie gateways op: een voor bluetooth low-energy en twee voor 433,92MHz-golven. We gaan ervan uit dat je al een MQTT-broker hebt draaien, bijvoorbeeld op een Raspberry Pi. Een populaire broker is Mosquitto, die je rechtstreeks op Raspberry Pi OS kunt installeren, in Docker of als add-on in Home Assistant.

©PXimport

PlatformIO

De betrouwbaarste manier om OpenMQTTGateway te configureren en installeren is met PlatformIO. Hiervoor moet je eerst Visual Studio Code installeren. Open daarna links Extensions (de vier blokjes), zoek naar platformio, klik op PlatformIO IDE / Install.

Daarna komt er in de linkerbalk onderaan een icoontje bij, van PlatformIO. Klik erop en dan op PIO Home / Platforms. Zoek naar espressif en installeer Espressif 32. PlatformIO is nu klaar voor ESP32-projecten.

BLE-gateway

Om een gateway voor bluetooth low-energy (BLE) te maken, heb je maar één component nodig: een ESP32-ontwikkelbordje. De ESP32-microcontroller heeft immers BLE ingebouwd. Je kunt het ook doen met een ESP8266 waarop je een HM10-module voor BLE aansluit, maar een ESP32 werkt beter. Wij gebruikten een Olimex ESP32-Gateway met externe antenne, ethernetpoort en bijbehorende behuizing. Een goedkoper bordje werkt ook, maar dat zal sensoren op een grotere afstand dan niet meer zien.

Open via www.bit.ly/omqttrelease de GitHub-pagina met releases voor OpenMQTTGateway en download daar de nieuwste versie van het bestand Source code (zip). Pak het uit en open de uitgepakte map in PlatformIO (File / Open Folder). Het bestand platformio.ino wordt automatisch geopend.

©PXimport

Configuratie

Het belangrijkste stel je in onder ENVIRONMENT CHOICE: het bordje waarvoor je de code wilt compileren. Dat doe je door de puntkomma (;) voor de juiste regel weg te halen. Voor de Olimex ESP32-Gateway waarbij je ethernet gebruikt, is dat:

default_envs = esp32-olimex-gtw-ble-eth

Sla je wijziging op. Verdere configuratie gebeurt in het bestand User_config.h in de map main. Vul zeker de gegevens in voor de regels MQTT_USER, MQTT_PASS en MQTT_SERVER in. Scrol dan naar de sectie met als titel DEFINE THE MODULES YOU WANT BELOW. Wil je dat de MQTT-boodschappen het formaat gebruiken dat Home Assistant automatisch herkent, haal dan de twee commentaartekens (//) weg in het begin van onderstaande regel en sla je wijzigingen op:

//#define ZmqttDiscovery "HADiscovery"

Installatie

Nu je configuratie in orde is, kun je je ESP32-bordje via usb aansluiten. Klik dan onderaan in de blauwe statusbalk van PlatformIO op het witte pijltje naar rechts. Een andere optie is een terminalvenster te openen in het menu Terminal / New Terminal en dan deze opdracht uitvoeren:

pio run --target upload

Als alles goed gaat, krijg je op het einde in het groen de status SUCCESS te zien en staat OpenMQTTGateway op je ESP32. Als je een foutmelding krijgt dat PlatformIO de poort van je apparaat niet vindt, kijk dan na of je de usb-kabel wel correct hebt aangesloten. Indien dat het geval is, zoek dan op welke UART-chip voor seriële communicatie er in je ESP32-bordje zit. Voor de Olimex ESP32-Gateway is dat bijvoorbeeld de CH341. Die wordt normaal gezien standaard al herkend op Windows, macOS en Linux, maar indien nodig moet je nog een driver installeren.

©PXimport

MQTT-boodschappen

Als je nu je bordje via ethernet op je netwerk aansluit en dan stroom geeft, duurt het niet lang voor het de BLE-pakketten uit de lucht haalt en omzet naar MQTT-boodschappen. Die kun je bekijken in een programma zoals MQTT Explorer. Maak daarin een nieuwe verbinding aan met je MQTT-broker. Vul de juiste hostname en het poortnummer in, en indien nodig een gebruikersnaam en wachtwoord.

Kijk nu onder het MQTT-onderwerp home/OpenMQTTGateway_ESP32_OLM_GTWE/BTtoMQTT. Hier vind je per ontdekt BLE-apparaat een bericht waarvan het onderwerp het MAC-adres van het apparaat is en de boodschap een JSON-string met data zoals:

{"id":"E7:2E:00:B1:38:96","name":"LYWSD02","rssi":-74,"distance":5.270232,"model":"LYWSD02","hum":48}

Ons voorbeeld is een bericht van de Xiaomi Mijia LYWSD02-temperatuursensor, met de huidige waarde voor de luchtvochtigheid ("hum": 48).

Home Assistant

Als je in Home Assistant via Instellingen / Integraties je MQTT-broker hebt toegevoegd en in OpenMQTTGateway de Home Assistant MQTT Discovery hebt ingeschakeld, zal Home Assistant de door je ESP32 ontdekte apparaten automatisch herkennen. Je kunt ze aan je Lovelace-dashboard toevoegen door rechtsboven op het menu-pictogram te klikken (pictogram met de drie streepjes), dan Configureer UI, nog eens op het menu-pictogram en dan Ongebruikte entiteiten.

Home Assistant maakt ook enkele sensoren en schakelaars aan voor speciale MQTT-berichten die OpenMQTTGateway heeft gedefinieerd. Zo is er een binaire sensor gedefinieerd die aangeeft of je gateway verbonden is, en met de schakelaar switch.restart_omg herstart je OpenMQTTGateway op afstand. 

Je kunt nog meer opdrachten via MQTT versturen met MQTT Explorer of een andere MQTT-client. In de documentatie van OpenMQTTGateway’s BLE-gateway vind je hoe je MAC-adressen opneemt op een blacklist of whitelist, de tijd tussen BLE-scans instelt en apparaten met een lage signaalsterkte eruit filtert.

©PXimport

Veilige verbinding met MQTT

OpenMQTTGateway ondersteunt ook TLS voor versleutelde verbindingen met je MQTT-broker. Verwijder daarvoor de twee commentaartekens in het begin van deze regel in het bestand User_config.h: #define SECURE_CONNECTION Zorg dat bij MQTT_SERVER de Common Name van het certificaat van je MQTT-broker staat. Vul bij deze regel het TLS-certificaat in PEM ASCII-formaat in: const char* certificate CERT_ATTRIBUTE En haal daarna de twee commentaarregels (//) weg voor: //#define NTP_SERVER "pool.ntp.org" Bouw en upload de code opnieuw.

Sonoff RF Bridge 433 MHz

Als je nog klassieke draadloze temperatuursensoren in huis hebt of producten van KAKU (KlikAanKlikUit), dan kun je die ook met OpenMQTTGateway moderniseren en aan je MQTT-broker en/of Home Assistant koppelen. Een leuk kant-en-klaar apparaatje hiervoor is de Sonoff RF Bridge 433 MHz. Dit is een bordje met ESP8285-microcontroller (een ESP8266 met 1 MB flashgeheugen ingebouwd) en een extra EFM8BB1-controller die RF-signalen decodeert.

Voor de Sonoff RF Bridge dien je weer de configuratiestappen te doorlopen. Haal in het bestand platformio.ini het commentaarteken (;) weg voor deze regel:

;default_envs = rfbridge

Als je eerder onze stappen voor de Olimex ESP32-Gateway hebt gevolgd, zet je het commentaarteken terug bij de regel voor dat apparaat.

De Sonoff RF Bridge heeft geen ethernet, dus daar dien je wifi in te schakelen. Standaard zet OpenMQTTGateway een hotspot op waarmee je verbindt om de wifi-instellingen in te voeren, maar als je de twee commentaartekens (//) aan het begin van onderstaande regel weglaat, kun je in de regels eronder het SSID en wachtwoord van je wifi-accesspoint instellen:

//# define ESPWifiManualSetup true

De instellingen voor MQTT en Home Assistant Discovery blijven hetzelfde als bij de ESP32-Gateway. Sla je wijzigingen op.

©PXimport

Sonoff RF Bridge flashen

De Sonoff RF Bridge flash je niet zomaar via usb. Daarvoor heb je een seriële usb-naar-TTL-adapter nodig. Open de behuizing van de RF Bridge door onderaan de vier rubberen voetjes te verwijderen: eronder zitten schroeven. Heb je die eruit geschroefd, dan gaat de behuizing open. Haal het printplaatje eruit. Aan de componentenkant zijn de centrale chips bedekt met iets wat een glasplaatje lijkt. Dat is een grote groene led die het logo van Sonoff in de behuizing belicht. Trek het voorzichtig naar boven, waarna de lijm loskomt en de componenten eronder toegankelijk worden.

Je ziet nu een schuifschakelaar. Zet die alvast op OFF. Ernaast zie je een rij pin-gaatjes met de aanduiding SDA, GND, TX, RX, 3V3. Het vierkante gat is 3V3 en de SDA heb je niet nodig. Neem nu een seriële usb-naar-TTL-adapter en zorg dat die op 3,3 V staat. Bij ons model kun je daarvoor een jumper over twee pinnetjes zetten. Sluit vier male/female-jumperwires op de pinnen VCC, GND, RX en TX van de adapter aan. Steek de andere, mannelijke kant van de jumperwires in de gaatjes van de RF Bridge, maar wissel RX en TX om: RX van de adapter gaat naar TX van de RF Bridge en andersom.

Houd nu de pinnen in de RF Bridge goed vast, zodat het contact niet verbreekt, en houd de resetknop naast de micro-usb-poort ingedrukt. Sluit de seriële adapter via usb op je computer aan en laat dan de resetknop lost. Druk daarna in Visual Studio Code onderaan op het pijltje om OpenMQTTGateway naar de RF Bridge te flashen. Als het niet onmiddellijk lukt, controleer dan of alle verbindingen correct zijn aangesloten. Nadat het flashen is gebeurd, verwijder je de jumperwires en zet je de schakelaar weer op ON.

©PXimport

Van radiosignaal naar MQTT

Als je nu de RF Bridge met een usb-kabel voedt, verbindt OpenMQTTGateway met je wifi-netwerk en zo met je MQTT-broker. Als je bijvoorbeeld op een ondersteunde RF-knop drukt of een RF-deurcontactsensor opent, krijg je een overeenkomende MQTT-boodschap. In MQTT Explorer zou je die dan moeten zien in het onderwerp home/OpenMQTTGateway_SRFB/SRFBtoMQTT. De MQTT-boodschap is JSON-code en ziet er als volgt uit:

{"raw":"2B660186042E00E7E5","value":"59365","delay":"1111","val_Thigh":"390","val_Tlow":"1070"}

Dat werkt ook in de andere richting: als je in MQTT Explorer rechts onder het kopje Publish bij Topic de regel home/OpenMQTTGateway_SRFB/commands/MQTTtoSRFB invult en in het tekstveld eronder de boodschap {“value”:1315156} (met json als type), en daarna op Publish klikt, zet de RF Bridge dat om in het overeenkomstige radiosignaal en zendt dat uit.

Home Assistant

Als je in Home Assistant MQTT Discovery hebt ingeschakeld, zullen ook de RF-signalen door Home Assistant worden herkend. De sensor sensor.gatewaysrfb bevat dan de code van het laatst ontvangen signaal, het getal in value dus in de JSON-code van hierboven. In je automatiseringen kun je dan reageren op nieuwe waardes van deze sensor.

Ook hier kun je weer speciale opdrachten via MQTT versturen voor extra flexibiliteit. Bekijk de documentatie van OpenMQTTGateway’s RF-gateways.

Zelfbouw voor 433,92 MHz

De Sonoff RF Bridge ondersteunt standaard maar een beperkt aantal apparaten. Wil je meer flexibiliteit, dan kun je een hardwarehack uitvoeren (zie het kader ‘Hack je Sonoff RF Bridge’). Maar een eenvoudiger manier is een zelfbouwoplossing met de SRX882-ontvanger en de STX882-zender. Beide componenten zijn kleine printplaatjes waarop je alleen nog enkele pinnen en een meegeleverde antenne hoeft te solderen. Het zijn goedkope componenten die je voor enkele euro’s vindt.

We tonen hier hoe je met de SRX822, STX822 en een ESP8266-bordje een 433,92MHz-gateway maakt. Prik de drie bordjes op een breadboard en sluit VCC en GND van de 433,92 MHz-bordjes op 3V3 respectievelijk GND van de ESP8266 aan. Sluit dan DATA van de STX822 (het kleinste bordje, de zender) aan op RX van de ESP8266, en DATA van de SRX822 (het grotere bordje, de ontvanger) aan op D3 van de ESP8266.

©PXimport

Hack je Sonoff RF Bridge

De Sonoff RF Bridge bevat een afzonderlijke chip om de draadloze signalen te decoderen, de EFM8BB1. Die chip is geprogrammeerd voor een vaste reeks protocollen en dus ben je met de Sonoff RF Bridge daartoe beperkt. Maar er bestaat een hack, waarbij je de chip omzeilt en het decoderen op de ESP8285 uitvoert, waardoor je veel meer protocollen kunt ontvangen.  Dat vereist wel wat werk. Op een GitHub-pagina van het project ESPurna vind je de uitleg. Je dient op de printplaat enkele sporen door te snijden en nieuwe verbindingen te maken door extra weerstanden te solderen.

©PXimport

Configuratie voor 433,92 MHz

Voor de configuratie heb je nu meerdere mogelijkheden: RF (RCSwitch), RF2 of pilight. De ontwikkelaars zijn ook met een extra mogelijkheid bezig, rtl_433. Bekijk in de documentatie welke configuratie welke apparaten ondersteunt. Zo werkt RF2 voor KAKU (KlikAanKlikUit) en pilight ondersteunt allerlei draadloze temperatuursensoren.

Voor pilight verloopt dit als volgt. Schakel in platformio.ini deze regel in:

default_envs = nodemcuv2-pilight

In User_config.h kun je dezelfde wifi-configuratie als hiervoor voor de Sonoff RF Bridge gebruiken. Het flashen is eenvoudig: sluit het ESP8266-bordje via de micro-usb-kabel aan op je pc en upload dan de code naar het bordje.

Ontvang draadloze sensoren

Als je nu bijvoorbeeld een ondersteunde deurcontactsensor opent, ontvangt de SRX822 dit radiosignaal en stuurt het dat door via MQTT. Het resultaat vind je in een MQTT-boodschap met als onderwerp home/OpenMQTTGateway_ESP8266_Pilight/PilighttoMQTT. De inhoud daarvan is een JSON-tekst zoals het volgende:

{"message":{"id":861780,"unit":9,"state":"opened"},"protocol":"arctech_contact","length":"861780","value":"861780","repeats":2,"status":2}

Aan het id en de unit onderscheid je verschillende deurcontactsensoren van elkaar. Voor andere apparaten ziet de JSON-code er anders uit. Zo zal een temperatuursensor geen onderdeel state hebben, maar temperature en humidity.

Zend radiosignalen

Ook in de andere richting werkt dit: je kunt een MQTT-boodschap uitsturen, waarna OpenMQTTGateway die oppikt en omzet in een radiosignaal. Test dat uit in MQTT Explorer door te publiceren op het onderwerp home/OpenMQTTGateway_ESP8266_Pilight/commands/MQTTtoPilight. De boodschap die je daar invult, is een MQTT-code van de volgende vorm:

{"message":{"systemcode":12,"unitcode":22,"off":1},"protocol":"elro_400_switch"

Als alles goed gaat, kun je zo op afstand draadloze schakelaars controleren. Let op: deze radiosignalen zijn niet versleuteld, dus iedereen in de buurt met een eigen OpenMQTTGateway-gateway of een andere installatie met 433,92MHz-zender kan dezelfde opdrachten geven!

OTA-updates

OpenMQTTGateway heeft standaard al de mogelijkheid voor over-the-air-updates (OTA) ingebouwd. Zodra de firmware op je bordje staat, kun je zo vanuit PlatformIO updates via het netwerk naar je bordje uploaden. Het best kopieer je de sectie met de omgeving van je bordje uit platformio.ini en plaats je deze in een bestand met de naam production_env.ini. Daaraan voeg je dan enkele opties toe voor de OTA-functionaliteit. Voor de Olimex ESP32-Gateway ziet dat er als volgt uit:

[platformio]

default_envs =

esp32-olimex-gtw-ble-eth-ota

[env:esp32-olimex-gtw-ble-eth-ota]

platform = ${com.esp32_platform}

board = esp32-gateway

board_build.partitions = min_spiffs.csv

lib_deps =

${com-esp.lib_deps}

${libraries.ble}

build_flags =

${com-esp.build_flags}

'-DZgatewayBT="BT"'

'-DLED_INFO=33'

'-DLED_INFO_ON=1'

'-DESP32_ETHERNET=true'

'-DGateway_Name="OpenMQTTGateway_ESP32_OLM_GTWE"'

upload_protocol = espota

upload_port = 192.168.0.243

upload_flags =

--auth=OTAPASSWORD

--port=8266

upload_speed = 512000

monitor_speed = 115200

Hierin duid je eerst de standaardomgeving aan. Daarna heb je de omgeving voor je ESP32-Gateway, maar met enkele extra’s: we definiëren als uploadprotocol espota, met als uploadpoort het ip-adres van de ESP32 en dan nog enkele flags, zoals het OTA-wachtwoord dat in User_config.h staat ingesteld, en de poort waarop het uploaden gebeurt. Upload je nu de code opnieuw, dan gebeurt dat niet via de usb-kabel (die hoeft zelfs niet aangesloten te zijn), maar via het netwerk.

©PXimport

Toch maar professioneel laten doen?

Vraag een offerte aan voor brandbeveiliging :

▼ Volgende artikel
Review JBL Flip 7 – Kleine speaker speelt luider dan ooit
© JBL
Huis

Review JBL Flip 7 – Kleine speaker speelt luider dan ooit

De Flip 7 voegt heel wat toe aan het beproefde succesrecept van JBL. Is dat voldoende om de iconische bluetooth-speaker weer de publieksfavoriet te maken? Dat lees je in deze review.

Fantastisch
Conclusie

Met een prijs van bijna 150 euro is de Flip 7 niet de goedkoopste bluetooth-speaker die je kunt aanschaffen. Je krijgt wel heel wat voor die prijs. Want niet alleen is deze JBL heel goed opgewassen tegen een slechte behandeling, hij projecteert muziek met veel emotie de kamer in. Ook voor buiten in de tuin of het strand heeft de Flip 7 de power om een feestje te bouwen. Het betere batterijleven en de gecontroleerde bassen van deze generatie zijn mooie upgrades ten opzichte van de Flip 6, al vind je misschien die oude versie voor een veel lagere prijs. Dan is het afwegen wat je belangrijk vindt. 

Plus- en minpunten
  • Goede accuduur
  • Speelt loeihard voor zo'n klein ding
  • IP68-label
  • Veel kleurkeuzes
  • Auracast
  • Op wat afstand geplaatst krachtige kamervuller
  • Relatief hoge prijs
  • Niet de lichtste speaker
  • Lus en karabijnhaak geen grote vernieuwing

Met de Flip 7 brengt JBL een update uit voor een wel zeer populaire bluetooth-speaker. Zoals die '7' al aangeeft, is dat verre van de eerste keer dat dit gebeurt. Deels gaat het dan om kleuren en design, zodat een nieuwe Flip helemaal de laatste trends volgt. Maar ook deze keer weet het bedrijf weer op technisch vlak wat verbeteringen toe te voegen. Auracast en AI Sound Boost zijn de belangrijkste, naast een verhoogde batterijduur van 16 uur.

Beschikbaar in zeven kleuren 

Even belangrijk zijn de nieuwe kleurtjes, met een weelderig paars als de opvallendste. Een 'Squad' camouflage-editie ontbreekt ook niet, terwijl een oranje randje rond het JBL-letterlogo een subtielere toevoeging is. De adviesprijs blijft 149,99 euro, dat blijft onveranderd.

©JBL

De Flip 7 is verkrijgbaar in zeven kleuren, waaronder een aantal nieuwe.

Het design van de Flip is grotendeels onveranderd gebleven sinds de eerste versie uit 2012. Ook de Flip 7 is een kleine cilinder, ongeveer even groot als een blik bier van een halve liter. Je kunt hem neerleggen of recht plaatsen. En aan elke uiteinde vind je een (passieve) woofer met het JBL-logo. Zodra je muziek iets luider zet, zie je ze heen en weer dansen. Een iconische gimmick mag je het noemen, maar het verhoogt wel de fun-factor. Hetzelfde design zie je ook terugkomen bij de grotere bluetooth-speakers van JBL, zoals de even nieuwe Charge 6 en de Xtreme 4.  

Met haak of lus te gebruiken

Niet zoveel veranderingen op designvlak dus. Maar details zijn belangrijk en dat is ook waar JBL zijn pijlen op richt. Een opvallend toevoeging is de mogelijkheid om een lus van stevig textiel of een karabijnhaak aan de speaker vast te maken. Beide accessoires vind je in de doos. Hoewel je de haak of lus kunt verwijderen via een kliksysteem, zit het muurvast genoeg om de Flip 7 zorgeloos aan een rugzak te hangen. 

©JBL

De haak of lus zit muurvast via een handig mechanisme.

Bestand tegen water en stof 

De Flip 7 is gemaakt om overal mee naartoe te nemen. Het IP68-etiket maakt duidelijk dat er weinig is waar deze speaker niet tegen kan. Stof en water deren hem niet gauw. Je kunt deze speaker in het (ondiepe) zwembad laten vallen en hem gewoon daarna weer gebruiken. De Flip 7 is daarmee ook net iets meer waterbestendig dan zijn voorganger. De hele behuizing is bovendien heel robuust, met dikke rubberen dopje aan de uiteinden. Het geeft echt de indruk dat je deze bluetooth-speaker niet gauw kapot zou krijgen. Handig op de camping, maar ook gewoon thuis in een tienerkamer.

©Jamie Biesemans

In de JBL Portable-app vind je niet veel opties.

Zeer goede batterijduur

Qua vermogen gaat de Flip 7 er niet echt op vooruit, maar 35 W is wel indrukwekkend voor zo'n klein ding. Door het gebruik van AI Sound Boost kan de speaker wel luid én helder blijven spelen, wat best indrukwekkend is. AI is natuurlijk een geweldig buzzwoord momenteel; hier worden AI-algoritmes in ieder geval gebruikt om de woofer en tweeter optimaal te laten presteren. Playtime Boost heeft ook een impact op de klank. Schakel dit via de JBL Portable-app in en de speelduur wordt verlengd van 14 tot maximaal 16 uur. Houd er wel rekening mee dat je dan geen audiopreset van de equalizer kunt gebruiken.

Bouw een feestje met meerdere speakers

De JBL Portable-app heb je eigenlijk niet echt nodig om de speaker te bedienen, tenzij je via de equalizer nog de klank wilt aanpassen of een stereopaar wil vormen met een tweede Flip 7. Je kunt daarnaast meerdere compatibele JBL-speakers koppelen zodat ze allemaal dezelfde muziek spelen. Leuk om op een feestje met vrienden een groot muzieksysteem te bouwen. Dit kon vroeger ook al, via PartyTogether in de app, maar nu voegt JBL ook Auracast aan de Flip 7 (en de Charge 6) toe. Je kunt echter geen oude en nieuwe speakers combineren.

©Jamie Biesemans

De Auracast-knop licht op als je deze functie gebruikt.

Even tikken op het knopje met het A-logo op de speaker volstaat zo om de Flip 7 een Auracast-stream te laten afspelen. En je kunt compatibele speakers blijven toevoegen, er lijkt geen rem op het aantal te staan.

Luider zonder vervorming

Op het vlak van geluidskwaliteit is de Flip 7, onder andere dankzij AI Sound Boost, een indrukwekkende speaker geworden. Zelfs als je hem hard zet, wordt muziek open neergezet – zeker als je rekening houdt met het formaat van deze speaker. JBL opteert natuurlijk graag voor wat extra bass, wat de Flip 7 heel geschikt maakt voor feestjes of om even stoom af te blazen tussen het studeren door.

Lage tonen zijn vaak het moeilijkst voor kleine speakers, maar hier kun je dankzij de diepe audiokennis van JBL rekenen op bassen die merkbaar aanwezig zijn. Stemmen worden goed geplaatst, waardoor je helder podcasts kunt beluisteren.

©JBL

De speaker klinkt ook buiten zeer goed.

Warmer geluid

Door zijn kleinere formaat en relatief eenvoudige opbouw (met slechts één tweeter) is de Flip 7 wel nogal directioneel. Dat heb je vaak bij dit type speakers. Heel dichtbij hoor je het snel doffer worden als je wat schuiner gaat zitten. Ideaal is als je de Flip 7 wat verder weg plaatst en met het JBL-logo naar je feestgezelschap richt. Dan wordt Stromae's 'Ma Meilleure Ennemie' van het tweede seizoen van het indrukwekkende 'Arcane' heel vol in de kamer geplaatst, met een afgemeten beat die de track zijn snelheid geeft. Het is zeker een warm geluid, wat het heel oorvriendelijk maakt als 'Colors' van Black Pumas in de achtergrond speelt. Als het gaat om een feestje of gewoon een gezellig moment, dan doet de Flip 7 uitstekend zijn werk.

Conclusie

Met een prijs van bijna 150 euro is de Flip 7 niet de goedkoopste bluetooth-speaker die je kunt aanschaffen. Je krijgt wel heel wat voor die prijs. Want niet alleen is deze JBL heel goed opgewassen tegen een slechte behandeling, hij projecteert muziek met veel emotie de kamer in. Ook buiten heeft de Flip 7 de power om een feestje te bouwen. Het betere batterijleven en de gecontroleerde bassen van deze generatie zijn upgrades ten opzichte van de Flip 6, al vind je misschien die oude versie voor een veel lagere prijs. Dan is het afwegen wat je belangrijk vindt. 

▼ Volgende artikel
Bedien je slimme apparaten met een zelfgebouwd touchscreen
© InfiniteFlow - stock.adobe.com
Huis

Bedien je slimme apparaten met een zelfgebouwd touchscreen

Houd je van knutselen én automatiseer je alles in en om je huis met Home Assistant? Kijk dan zeker eens naar ESPHome. Je kunt eindeloos variëren met componenten. Dankzij de koppeling met Home Assistant bouw je gemakkelijk en voor weinig geld een lichtschakelaar of sensor, om maar wat te noemen. De LVGL-bibliotheek zorgt ervoor dat je nu ook eenvoudig met een touchscreen en zelfbedachte gebruikersinterface kunt werken. We laten zien hoe dat werkt met tips voor passende projecten.

In dit artikel laten we zien hoe je een touchscreen-interface bouwt voor Home Assistant met ESPHome en LVGL:

  • Installeer ESPHome en configureer een ESP32-microcontroller voor je project
  • Sluit een touchscreen aan en stel de juiste GPIO-pinnen en drivers in
  • Gebruik LVGL-widgets voor een interactieve interface
  • Integreer je touchscreen met Home Assistant voor directe bediening van je slimme apparaten

Lees ook: 5 fouten die je niet moet maken in je smarthome

Code downloaden

In dit artikel staat een voorbeeld van wat YAML-code. Omdat YAML erg gevoelig is voor foute spaties, kun je die code beter downloaden en daarna bekijken of kopiëren. In het bestand espcode.txt staan alle regels voorbeeldcode zoals ze in dit artikel aan bod komen. Maar je vindt ook een uitgewerkt voorbeeld in het bestand cyd-demo.yaml. Beide bestanden zijn hier te downloaden.

Uitgewerkt voorbeeld

Het meest uitgewerkte voorbeeld voor de demo met LVGL vind je op deze GitHub-pagina van auteur Gertjan Groen. In de code die je kunt downloaden (ook in het losse bestand cyd-demo.yaml) hebben we ook de RGB-led op de achterzijde toegevoegd, die je bijvoorbeeld als statusmelding kunt gebruiken. Verder is een timer toegevoegd om de backlight te regelen, zodat deze bij inactiviteit wordt uitgeschakeld. Tot slot laten we zien hoe je de GPIO-pinnen kunt gebruiken via de I2C-bus. Op de GitHub-pagina vind je nog meer handige informatie.

ESPHome maakt het heel makkelijk om apparaten te maken voor een slim huis, zoals je eigen sensors. Zo bouwden we eerder al eens een luchtkwaliteitsmonitor, een infraroodzender/ontvanger en een controller met drukknoppen en leds, waarmee je apparaten kunt bedienen en de status aflezen. Hoe je dat doet, lees je in dit artikel: Zo maak je met ESPHome apparaten geschikt voor je smarthome.

De basis voor ESPHome is een kleine, voordelige en zuinige microcontroller, meestal de ESP32. ESPHome ondersteunt enorm veel componenten en biedt daardoor haast onbegrensde mogelijkheden. We helpen je kort op weg met ESPHome, maar gaan ook meteen een stapje verder met de toevoeging van een touchscreen en de LVGL-bibliotheek. Daar kun je sinds augustus 2024 officieel gebruik van maken binnen ESPHome.

Met LVGL kun je aan de hand van widgets een grafische gebruikersinterface opbouwen en weergeven (zie kader ‘Grafische interfaces met widgets’). Soms kom je de term HMI (Human Machine Interface) tegen, waarmee een grafische gebruikersinterface voor het bedienen van apparatuur wordt bedoeld.

De kracht van ESPHome is dat je niet alleen lokaal aangesloten apparaten bedienbaar kunt maken, bijvoorbeeld via een relais, maar ook alle apparaten die je binnen Home Assistant gebruikt.

Grafische interfaces met widgets

LVGL staat voor Light and Versatile Graphics Library. Het is een opensource-bibliotheek die sinds 2016 bestaat. Je kunt ermee werken binnen ESPHome, Arduino, Tasmota en openHASP. Het laatste project is zelfs specifiek bedoeld voor microcontrollerfirmware met LVG.

De bibliotheek is heel licht, waardoor het soepel en snel kan werken op apparaten met beperkte capaciteit, bijvoorbeeld met een microcontroller. Bovendien kan LVGL flexibel met verschillende lay-outs, schermformaten en invoermethodes werken. Naast touchscreens kun je ook bijvoorbeeld muis, toetsenbord, losse knoppen en draaiknoppen toevoegen.

Via meer dan dertig widgets kun je een grafische gebruikersinterface opbouwen. Het uiterlijk is via thema’s en stijlen eenvoudig aan te passen. Bovendien kun je met animaties werken.

LVGL wordt gebruikt in slimme apparaten zoals thermostaten, smartwatches en keukenapparatuur, en zelfs in touchscreens voor industriële omgevingen. Op de website vind je enkele interactieve demo’s voor bekende toepassingen, waarbij de gebruikersinterface in de browser wordt getoond.

Met LVGL kun je via widgets een gebruikersinterface bouwen.

1 Wat gaan we doen?

Met ESPHome kun je relatief eenvoudig apparaatjes voor je slimme huis maken. Een voordeel ten opzichte van bijvoorbeeld Arduino en MicroPython is dat je niet hoeft te programmeren. Je hoeft alleen een configuratiebestand te maken waarin je de gebruikte microcontroller, verbindingsgegevens voor je wifi-netwerk en alle aangesloten componenten aanduidt. Hierna wordt firmware gemaakt en weggeschreven op je microcontroller. Alleen die eerste keer is dit soms wat lastig. Heb je het eenmaal werkend? Alle keren erna kun je heel eenvoudig de configuratie aanpassen en over-the-air (OTA) naar de microcontroller sturen.

In dit artikel gaan we met LVGL werken. Hiermee kun je binnen ESPHome grafische interfaces maken via widgets. Voor veel projecten zul je daarom niet eens componenten hoeven aan te sluiten, maar heb je genoeg aan een touchscreen. Denk bijvoorbeeld aan een lichtknop en helderheidsregeling voor een slimme lamp in Home Assistant, zoals we in dit artikel demonstreren. Je kunt natuurlijk ook geavanceerdere gebruikersinterfaces maken voor vrijwel elk apparaat in Home Assistant.

©pozitivo - stock.adobe.com

Je kunt bijvoorbeeld zelf een gebruikersinterface voor je slimme lampen bouwen, zodat je ze eenvoudig kunt bedienen.

2 Wat heb je nodig?

Wat hardware betreft, is het vrij eenvoudig. De ESP32-chip heeft snel de voorkeur boven de verouderde ESP8266-versie, zeker als je met een touchscreen gaat werken. De Raspberry Pi Pico W (zie gelijknamig kader) is ook een optie, maar die wordt nog niet volledig ondersteund binnen ESPHome.

Makkelijk om mee te starten is een eenvoudig ontwikkelbordje rondom de ESP32 dat je voor ongeveer 5 euro kunt aanschaffen. Het is wel fijn als je hier goede documentatie bij hebt, zodat je op zijn minst weet waar alle aansluitingen zitten.

Er zijn diverse varianten van de ESP32-module. Bekende opties zijn de ESP-WROOM-32E, ESP32-C3 en ESP32-S3. De ESP32-C3 wordt vaak in extra compacte bordjes gebruikt, die je onder de naam ‘super mini’ tegenkomt – handig als je niet veel aansluitingen nodig hebt of niet veel ruimte hebt.

De ESP32-S3 is een fijne optie vanwege de beschikbaarheid van PSRAM (Pseudo Static RAM), een voordelig type werkgeheugen dat onder meer nuttig is bij grafische toepassingen. Staat een touchscreen centraal in jouw project en wil je snel van start, overweeg dan een model met ingebouwde ESP32-chip (zie volgende paragraaf).

De ESP32-module is in verschillende uitvoeringen verkrijgbaar.

Raspberry Pi Pico W

De Raspberry Pi Pico is een voordelige en flexibele serie ontwikkelbordjes rondom de RP2040-microcontroller. De eerste versie verscheen in januari 2021. De Pico W is vanwege de wifi-connectiviteit een interessante optie voor ESPHome. Recent werd de Pico 2 W aangekondigd die op meerdere fronten is verbeterd. Dat model is op het moment van schrijven echter nog niet geschikt voor ESPHome.

De Raspberry Pi Pico W is ook bruikbaar in Home Assistant.

3 Touchscreen

Als je een touchscreen gaat gebruiken in je ESPHome-project, dan kun je eventueel een los exemplaar op de microcontroller aansluiten en configureren. Maar je kunt ook een touchscreen met ingebouwde ESP32 kiezen. Dat is vaak veel handiger en goedkoper. Je hoeft niet te solderen en kunt direct een gebruikersinterface bouwen in YAML-code. Het scheelt ook wat tijd. Bovendien zijn er zelfs modellen compleet met behuizing.

Kies een scherm dat door ESPHome wordt ondersteund. De website van ESPHome geeft goede suggesties. Je kunt ook afgaan op ervaringen van anderen. Het kan dan een iets grotere uitdaging zijn om de juiste configuratie voor je display in ESPHome te vinden. Je zult daarbij waarschijnlijk wel even moeten experimenteren, niet alleen bij het instellen van je display, maar ook bijvoorbeeld voor het touchgedeelte. Zelfs bij het vrij gangbare touchscreen dat we in dit artikel gebruiken, was dat een beetje prutsen.

Kies een touchscreen dat door ESPHome wordt ondersteund.

4 Scherm met ESP32

Voor dit artikel hebben we een eenvoudige ESP32-2432S028 gebruikt, met een resistief touchscreen van 2,8 inch met 240 × 320 pixels. Dit model wordt ook wel de ‘Cheap Yellow Display’ genoemd, wat vooral met de gele printplaat te maken heeft.

Er zijn meerdere varianten. Zo wordt in de schermpjes vaak de ILI9341-chip als aansturing gebruikt, maar soms ook de ILI9342, zoals in ons exemplaar. Dat vergt dan een heel kleine, maar noodzakelijke aanpassing in je configuratie.

Je kunt het scherm flexibel inzetten voor je IoT-projecten. Zoek je een wat groter touchscreen, dan kun je bijvoorbeeld de CrowPanel van Elecrow overwegen. Die is er in een versie van 5 inch (ca. 32 euro) en 7 inch (ca. 42 euro), inclusief acrylbehuizing en verzending via de fabrikant. Beide versies hebben een touchscreen met hoge resolutie van 800 × 480 pixels en zijn voorzien van de modernere ESP32-S3-chip. Het touchscreen is capacitief, wat zeker voor kleinere bedieningselementen fijner werkt dan het resistieve touchscreen in ons goedkope alternatief.

Tegenwoordig bestaan er ook ronde touchscreens. Een leuke optie (zij het met beperkte schermruimte) is de ESP32-2424S012 met een ESP32-C3-microcontroller, een rond kleuren-touchscreen van 1,28 inch en in een witte of zwarte behuizing. Makerfabs heeft een vergelijk schermpje zonder behuizing. De LilyGo T-RGB heeft een wat groter 2,1inch-scherm (zonder behuizing), maar is ruim twee keer zo duur.

De ESP32-2432S028 is een voordelig scherm (onder), een wat duurder alternatief is het capacitieve 5inch-aanraakscherm met ESP32 van Elecrow (boven).

5 Add-ons voor ESPHome

Hoewel je bijvoorbeeld een pc met Python kunt gebruiken voor het bewerken van je configuratiebestanden en het flashen van de microcontroller met de software voor ESPHome, is het meestal veel makkelijker om de add-on voor ESPHome binnen Home Assistant te gebruiken. Dat geeft ook een ander groot voordeel: je kunt de configuratie voor alle apparaten met ESPHome binnen Home Assistant beheren. Je zult zeker in de testfase veel wijzigingen aan de configuratie moeten maken.

Via de add-on voor ESPHome voeg je eenvoudig microcontrollers toe.

6 Microcontroller toevoegen

We gaan nu een verse microcontroller toevoegen. Je kunt eventueel ESPHome Web gebruiken om de microcontroller voor te bereiden voor gebruik met ESPHome, maar wij geven zoals gezegd de voorkeur aan de ESPHome-add-on, die je binnen Home Assistant kunt openen.

Je kunt voor deze methode de microcontroller gewoon via usb aansluiten op je eigen pc, maar dit vereist wel dat je Home Assistant opent via een beveiligde https-verbinding. Lukt dat niet? Als alternatief kun je de microcontroller ook via usb aansluiten op het systeem met Home Assistant zelf, voordat je verder gaat in ESPHome.

Het dashboard van ESPHome toont alle toegevoegde apparaten.

Ook leuk: Werk met wat je hebt: creëer je eigen alarmsysteem met Home Assistant

7 Configuratie

Klik binnen ESPHome op New device om een nieuwe microcontroller te initialiseren. Vul bij Name een naam in voor het apparaat. Bij Network name vul je de naam (SSID) in van het wifi-netwerk waarmee de microcontroller moet verbinden en bij Password het bijbehorende wachtwoord. Klik dan op Next.

In de volgende stap zal ESPHome een configuratiebestand maken, firmware bouwen en de microcontroller flashen. Klik daarvoor dus eerst op Connect. Als het goed is, kun je nu de com-poort selecteren waarmee de microcontroller is verbonden. Zie je geen com-poort, dan zul je eerst drivers moeten installeren. De instructies krijg je als je het venster sluit zonder een com-poort te selecteren. Als de verbinding is gelukt, zal de installatie verdergaan. Lukt het niet? Dan kun je kiezen voor Skip this step gevolgd door een handmatige configuratie.

Vul een naam in en de details voor het wifi-netwerk.

Toepassingen voor een touchscreen

Er zijn veel leuke toepassingen voor een touchscreen. Zo kun je bijvoorbeeld een soort weerstation maken, dat je voorziet van actuele informatie van Home Assistant. Ook kun je live de opbrengst van je zonnepanelen laten zien of het verbruik in huis. Je zou een schermpje voor Music Assistant kunnen maken met bijvoorbeeld de weergave van het nummer en volumeregeling (zie ook: Met Music Assistant ben jij de baas over jouw muziekcollectie). Tot slot kun je een scherm gebruiken voor statusmeldingen of loggegevens.

8 Touchscreen met ESP32

We gebruiken in dit artikel zoals gezegd de ESP32-2432S028 als voorbeeld. Dit is een touchscreen met ingebouwde ESP32-chip. Dit apparaatje kun je direct toevoegen aan ESPHome: precies zoals in paragraaf 7 staat omschreven, al moesten we in dit geval na het aanwijzen van de com-poort wel de boot-knop even indrukken.

Overigens bevat het apparaat meestal een voorgeprogrammeerde demo met een gebruikersinterface op basis van LVGL. Die zie je als je hem zo uit de doos op een voeding aansluit. Je kunt daarmee meteen de werking controleren. Je zult bij een model met resistief aanraakscherm overigens iets harder moeten drukken dan je misschien gewend bent.

We gebruiken dit voordelige 2,8inch-aanraakscherm, dat ook wel ‘Cheap Yellow Display’ wordt genoemd.

9 Schermconfiguratie

Na het toevoegen van je touchscreen heb je direct een basisconfiguratie voor ESPHome. Via Edit kun je deze configuratie aanpassen. Zowel voor het aansturen van het display als de registratie van het aanraken wordt SPI (Serial Peripheral Interface) gebruikt. Voor onze ESP32-2432S028 is dit de configuratie, rekening houdend met de gebruikte interne GPIO-pinnen:

We voegen nu eerst de configuratie van het display toe en in paragraaf 11 het touchgedeelte. Voor het display is de configuratie als volgt:

Merk op dat er ook een (oudere) variant van dit touchscreen is met de ILI9341. In dat geval gebruik je model: ILI9341 en invert_colors: false. Na het maken van de aanpassingen kies je Install. Je kunt nu kiezen hoe je de firmware wilt overbrengen. Meestal kies je Wirelessly voor over-the-air-updates. Het apparaat hoeft daarbij niet meer met jouw pc te zijn verbonden.

Binnen ESPHome kun je eenvoudig de configuratie bewerken.

10 LVGL-bibliotheek

Binnen ESPHome kon je voorheen met displays werken door binnen de component display met lambda bijvoorbeeld teksten met een bepaald lettertype naar je scherm te sturen. Als je LVGL gaat gebruiken, gebruik je geen lambda meer, maar alleen LVGL en widgets. Als eerste voegen we de LVGL-bibliotheek toe aan de YAML-code:

lvgl:
  buffer_size: 25%

De optie buffer_size is ons geval noodzakelijk, vanwege de afwezigheid van PSRAM. In paragraaf 13 voegen we ook nog widgets toe. Omdat we dat hier nog niet hebben gedaan, zie je na het flashen als het goed is een demo met een knop, checkbox, cirkel met tekst en schuifbalk.

11 Configuratie touchscreen

Bediening via het scherm is nog niet mogelijk. Daarvoor moeten we het touchscreen toevoegen aan de configuratie van ESPHome:

Bewaar de aanpassingen en installeer de nieuwe firmware. Controleer of je de demo goed kunt bedienen. De regels onder on_touch zorgen dat in de logs de geregistreerde coördinaten worden getoond. Er kunnen aanpassingen nodig zijn in de regels onder calibration en transform.

12 Backlight

Het display is voorzien van een achtergrondverlichting (backlight) via pin 21. We definiëren deze output als volgt:

Daarna configureren we de achtergrondverlichting, waarbij we verwijzen naar de hierboven gedefinieerde output.

Na het flashen zal de backlight standaard aanstaan. Eventueel kun je deze vanuit Home Assistant aan- en uitzetten en de helderheid ervan regelen, bijvoorbeeld op basis van afwezigheid. Je kunt ook een script maken om de helderheid bij inactiviteit terug te brengen. Daarvoor verwijzen we je naar het uitgewerkte voorbeeld op GitHub (zie kader ‘Code downloaden’).

Binnen Home Assistant kun je eventueel ook de backlight aan- en uitzetten.

13 Widgets toevoegen

Onder de regel lvgl kun je nu de gewenste LVGL-componenten toevoegen aan je YAML-configuratie. Denk aan bijvoorbeeld knoppen, schuifregelaars, grafieken of labels. In dit voorbeeld voegen we aan de bovenkant alleen twee widgets toe voor een dimbare led, te weten een schakelaar (button) en schuifregelaar (slider).

De meeste opties dienen voor het positioneren van de widget. We geven bijvoorbeeld de breedte (width) en hoogte (height) aan, halen de widgets iets van de rand of met x en y, en regelen de uitlijning met align. Het gedeelte bij on_click zorgt dat de bewuste lamp in Home Assistant wordt omgeschakeld bij het klikken op de button. Voor de slider doen we hetzelfde onder on_release. Die acties zijn overigens om veiligheidsredenen niet direct mogelijk. In paragraaf 16 leggen we uit hoe je dit kunt toestaan.

We voegen in dit voorbeeld alleen twee eenvoudige widgets toe.

Cookbook voor ESPHome en LVGL

We houden het hier redelijk eenvoudig, maar je kunt natuurlijk veel geavanceerdere gebruikersinterfaces maken. Zo is bijvoorbeeld een geneste structuur mogelijk, kun je op verschillende manieren een grid maken, en met pagina’s individuele schermen of secties in je gebruikersinterface maken. Daarbij kan elke pagina zijn eigen widgets hebben. ESPHome geeft op zijn website in een ‘cookbook’ nog wat praktische voorbeelden voor het werken met LVGL, ook in combinatie met Home Assistant.

De website van ESPHome heeft veel voorbeelden voor het werken met LVGL.

14 Interactie met Home Assistant

De entiteit voor de dimbare lamp heeft in Home Assistant de naam light.wledkantoor. De waardes zijn nodig om de widgets de juiste status te kunnen geven. Daarom voegen we hieronder een binary_sensor toe voor de status (aan of uit) en een sensor voor het helderheidsniveau. We werken vervolgens bij on_state en on_value de widgets bij als de status verandert in Home Assistant. Bij id vul je uiteraard de id van de betreffende widget in.

Gebruik de logfunctie om te zien of bijvoorbeeld een status verandert.

15 Toevoegen aan Home Assistant

De add-on voor ESPHome hebben we gebruikt om de microcontroller van firmware te voorzien. Maar je zult het apparaat hierna nog wel moeten toevoegen aan Home Assistant. Dat is heel eenvoudig: het wordt automatisch gevonden. In Home Assistant zie je via Instellingen / Apparaten en diensten het bewuste apparaat direct terug op het tabblad Integraties. Klik op de knop Toevoegen om het aan Home Assistant toe te voegen.

Het apparaat met ESPHome moet je nog toevoegen aan Home Assistant.

16 Acties toestaan

Als je het touchscreen bedient, zal Home Assistant een melding geven dat het ESPHome-apparaat heeft geprobeerd een actie in Home Assistant uit te voeren. Standaard is dit om veiligheidsredenen niet toegestaan, maar dit is eenvoudig op te lossen.

Ga naar Instellingen / Apparaten en klik dan onder het kopje Geconfigureerd op ESPhome. Achter het bewuste apparaat klik je vervolgens op Configureren. Zet een vinkje bij Toestaan dat het apparaat Home Assistant-acties uitvoert. Klik op Verzenden. Hierna zijn alle acties zoals het omschakelen van de lamp en regelen van de helderheid wel toegestaan.

Zorg dat het apparaat acties in Home Assistant mag uitvoeren.