MQTT ledcontroller voor smarthome gebruiken

Noud van Kruysbergen
0

Inhoudsopgave

Het smarthome wordt alsmaar voller. Soms zelfs te vol voor een smartphone-app. Maak je eigen statuspaneel met leds, die opdrachten ontvangen via wifi en MQTT. Zo visualiseer je de toestand van je smarthome en herken je fouten in één oogopslag.

Hoe meer sensoren en actoren er in een smarthome bijkomen, des te lastiger het wordt om die allemaal te controleren. Natuurlijk bieden mini­computers met displays of uitgediende tablets wel mogelijkheden om die weer te geven. Maar naast een in verhouding hoge aanschafprijs en het vaak friemelig configureren zijn dergelijke oplossingen vaak ook nog een aanslag op de energierekening.

Dat kan goedkoper en zuiniger met een ledweergave. Dankzij moderne digitale techniek heb je daar dan alleen een GPIO-­interface op een microcontroller voor nodig – en wat soldeerwerk: RGB-ledcontrollers zoals de WS2812b (en zijn broer WS2811) hebben alleen een busaansluiting nodig. De kleur en helderheid van elk lampje kun je dankzij individuele adressering apart aanpassen. Kant-en-klare leds met kleine controllers zijn er al voor weinig geld. Het aansturen wordt dan door de eveneens goedkope wifi-microcontroller ESP8266 gedaan.

MQTT smarthome status ledcontroller statusweergave smarthome ledcontroller

We laten zien hoe je de leds met controller voor de weergave uitzoekt en waarop je moet letten. Bovendien krijg je een kant-en-klare firmware voor de ESP8266, waaraan je alle commando’s eenvoudigweg via MQTT kunt door­geven. Veel smarthome-aanstuursystemen werken standaard met dat telemetrie-protocol, zodat je zonder drivers en het installeren van plug-ins een geïntegreerd geheel krijgt.

Soorten ledcontrollers

Door de nagenoeg identieke buseigenschappen zijn alle genoemde controllers zonder firmwareveranderingen te gebruiken. De meest gebruikelijke bouwvorm is echter de ledchip SMD 5050 met ingebouwde WS2812b-controller.

Dergelijke leds zijn in verschillende samenstellingen te krijgen. Dat kan ten eerste op een flexibele plakbare ledstrip. Die zie je nog wel eens voor niet al te veel geld in een (dump)winkel liggen. Maar die gebruiken meestal SMD-5050-leds zonder een controller, zodat ze door het ontbreken van adressering niet geschikt zijn voor ons doel. WS2812b-ledstrips haal je toch echt bij de vakhandel. Die hebben doorgaans 30, 60 of 144 leds per meter in lengtes tot 5 meter in het assortiment. Onze strips van 1 meter hebben niet meer dan 9 euro per stuk gekost. Met 60 leds per meter blijft er genoeg ruimte tussen de lampjes over (1,2 cm) voor labels.

MQTT smarthome status ledcontroller ledstrip looprichting

Ledstrips kun je eenvoudig op de gewenste lengte knippen. Om ervoor te zorgen dat de bus werkt, moet je op het pijltje voor de ‘looprichting’ van de data letten.

Wat heel handig is, is dat de contacten na elke led blootliggen. Als je een strip wilt opdelen, knip je hem bij die contactpunten door en soldeer je de afzonderlijke stukken vervolgens vast. Omdat de in- en uitgang van de bussen gescheiden zijn, mogen de leds daarbij niet verkeerd vast gesoldeerd worden. Onafhankelijk van het controllertype wordt de ingang (Data-In/DI) van de eerste led met de microcontroller verbonden, en de uitgang ervan (Data-Out/DO) met de Data-In van de volgende led, en zo verder.

WS2812b-ledringen zijn op zich goed geschikt om numerieke waarden weer te geven. Er zijn er met 8, 12, 16, 24, 32, 40 en 60 stuks 5050-leds. Onze ringen met 12 leds hebben we uit het verre oosten laten komen voor vier euro. Let er bij de aankoop wel op dat de fabrikant Data-Out aan het eind naar buiten leidt als je na de ring nog andere leds wilt aansluiten.

Losse led-spotlights laten je geheel de vrije hand bij het vormgeven van de weergave, maar vergen wel het meeste werk wat het aansluiten betreft. Je kunt ze afzonderlijk kopen met een geïntegreerde controller en ze worden via vier pinnetjes vast gesoldeerd. Die leds zijn er een diameter van vijf en acht millimeter. We kochten wederom in het verre oosten 100 stuks van de 8mm-variant voor ongeveer 15 euro. Een Chinese eBay-handelaar levert die leds bijvoorbeeld zelfs uit zijn magazijn in Duitsland voor ongeveer 20 euro.

Stroomvoorziening

De optimale resultaten krijg je met een spanning van 5 volt. Een led heeft, als hij alle drie de kleuren maximaal moet laten branden, ongeveer 50 mA nodig. Een strip met 60 leds vergt dan een stroom van ongeveer 3 ampère. Maar omdat de leds in dit geval niet bedoeld zijn om veel licht te geven, maar als statusweergaven moeten dienen, heb je die volledige helderheid en alle kleuren maar zelden nodig.

Met slechts één kleur per led op halve lichtsterkte reduceert de stroom tot ongeveer 13 mA per led. Als je twee kleuren op halve helderheid mengt, kom je op ongeveer 20 mA. Inclusief een ESP8266 hebben 60 leds dan nog maar ongeveer 1 ampère nodig, met een uitschieter naar 1,4 ampère in het zelden voorkomende geval dat alle leds moeten branden. Dat kan elke moderne usb-netvoeding makkelijk aan.

wemos d1 mini

Als basis gebruiken we de ESP8266-usb-printplaat Wemos D1 mini. Die is bijzonder goedkoop (zeven euro) en heeft een aparte 5V-pin die rechtstreeks met de micro-USB-aansluiting verbonden is. Bij maandenlang gebruik met af en toe een paar minuten durende piekbelasting van 1,6 ampère hadden we met dat board geen problemen.

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

Firmware

Er bestaat al kant-en-klare firmware om WS2812b-leds aan te sturen, maar bijna elke door ons geteste firmware kwam met allerlei bonte effecten en bijvoorbeeld een kleurkiezer via een webinterface – speelgoed voor belichtingsdoeleinden. Andere waren alleen geschikt voor specifieke smarthome-toepassingen.

We besloten daarom zelf maar een firmware te maken: met de code kun je alle of alle afzonderlijke leds via MQTT veranderen in de door jou gewenste kleur en helderheid. Daarnaast hebben we twee extra commando’s aan de firmware toegevoegd: snel en langzaam knipperen, om bijvoorbeeld fouten of lopende processen aan te geven. Dankzij een proces-­scheduler werkt dat tegelijkertijd.

Voor het installeren heb je de Arduino IDE inclusief de ESP8266-boarddefinities nodig. De firmware heeft wat afhankelijkheden, dus sommige programmaonderdelen komen uit andere bronnen. Open in de Arduino IDE het venster bij ‘Schets / Bibliotheken gebruiken / Bibliotheken beheren’ en installeer de bibliotheken PubSubClient, ESP8266Scheduler, ArduinoJson en Adafruit Neopixel. Let er telkens op dat je geen bètaversie installeert. Elk zoekresultaat heeft een versieselectie. Vervolgens download je het Arduino-bestand uit onze GitHub-repository en open je dat in de IDE. Je kunt alle parameters dan aanpassen en het script op je ESP flashen.

Aansluiten en aansturen

Verbind je leds met het ESP-board. Controleer van tevoren altijd de specificatie als je die hebt: Vcc / +5V / V verbind je met de 5V-pin, GND / G met de massapin en Data-In (DI) met een willekeurige GPIO behalve 0 (D4). Via die laatste wordt de programmeermodus ingesteld, maar aangesloten apparaten kunnen dat onder bepaalde omstandigheden storen.

Zodra je de ESP van stroom voorziet, knippert de eerste led rood tot de wifiverbinding is gemaakt. Als de MQTT-verbinding gemaakt is, wordt die led twee seconden groen. Daarna kun je het eerste commando versturen: de commando­syntaxis hebben we bewust eenvoudig gehouden. Die volgt het schema van het aansturen binnen de firmware met behulp van adressen en RGB-kleurwaarden. Om een afzonderlijke of alle leds aan te sturen, stuur je

adres,roodwaarde,groenwaarde, blauwwaarde

naar het betreffende MQTT-apparaat. De eerste led heeft het adres 0. Het commando 0,255,255,255 laat die led bijvoorbeeld in volle helderheid oplichten. Alle leds adresseer je met ‘all’:

all,roodwaarde,groenwaarde,blauwwaarde

Let daarbij op de adviezen bij het kopje ‘Stroomvoorziening’ om de componenten niet te beschadigen.

De extra commando’s kun je ook eenvoudig versturen:

10,blink,255,0,0

laat led 11 langzaam rood knipperen. Met het commando

5,fastblink,0,0,255

knippert led 6 blauw.

Er ontstaan wel ongewenste neven­effecten als je twee commando’s voor dezelfde led start. Beide commando’s stop je dan met

adres,stop

Stuur dus altijd eerst een stopcommando voordat je de status van een led wilt veranderen van bijvoorbeeld ‘blink’ naar ‘fastblink’.
Als je een fout in de firmware vindt, meldt dat dan op de GitHub-pagina, dan hebben anderen daar wellicht ook wat aan.

(Andrijan Möcker, c’t magazine)

Meer over smarthome-projecten lees je op papier of digitaal in c't magazine. Nieuwste uitgave: c’t 12/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

Raspberry Pi als hacking-tool: netwerk hacken met airgeddon & Kali Linux

Draadloze netwerken vormen nog steeds een geliefd doelwit voor cybercriminelen. Professionele apparatuur is niet langer noodzakelijk: met een Raspberr...

Telefoon als hotspot gebruiken? Zo krijg je het voor elkaar!

Heb je een zwak wifi-signaal in bepaalde delen van je (vakantie)huis of appartement? Geen zorgen, je kunt je telefoon als hotspot gebruiken om dit pro...

0 Praat mee
avatar
  Abonneer  
Laat het mij weten wanneer er