Statusled-weergave voor home-automation
Zelfbouw led-statusweergave voor home-automation
Het smarthome wordt alsmaar voller. Soms zelfs te vol voor een smartphone-app. Maak je eigen statuspaneel met leds, die opdrachten ontvangen via wifi. 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 minicomputers 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 GPIOinterface op een microcontroller voor nodig – en wat soldeerwerk: RGBledcontrollers 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. Kantenklare leds met kleine controllers zijn er al voor weinig geld. Het aansturen wordt dan door de eveneens goedkope wifimicrocontroller ESP8266 gedaan.
Dit artikel laat je zien hoe je de leds met controller voor de weergave uitzoekt en waarop je moet letten. Bovendien krijg je van ons een kantenklare firmware voor de ESP8266, waaraan je alle commando's eenvoudigweg via MQTT kunt doorgeven [1]. Veel smarthomeaanstuursystemen [2] werken standaard met dat telemetrieprotocol, zodat je zonder drivers en het installeren van plugins een geïntegreerd geheel krijgt.
Strepen, ringen en spotlights
Door de nagenoeg identieke buseigenschappen zijn alle genoemde controllers zonder firmwareveranderingen te gebruiken. De meeste gebruikelijke bouwvorm is echter de ledchip SMD 5050 met ingebouwde WS2812bcontroller.
Dergelijke leds zijn in verschillende samenstellingen te krijgen. Dat kan ten eerste op een flexibele plakbare ledstrip [3]. Die zie je nog wel eens voor niet al te veel geld in een (dump)winkel liggen. Maar die gebruiken meestal SMD5050leds zonder een controller, zodat ze door het ontbreken van adressering niet geschikt zijn voor ons doel. WS2812bledstrips 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.
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 (DataIn/DI) van de eerste led met de microcontroller verbonden, en de uitgang ervan (DataOut/DO) met de DataIn van de volgende led, en zo verder.
WS2812bledringen zijn op zich goed geschikt om numerieke waarden weer te geven. Er zijn er met 8, 12, 16, 24, 32, 40 en 60 stuks 5050leds. 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 DataOut aan het eind naar buiten leidt als je na de ring nog andere leds wilt aansluiten.
Losse ledspotlights 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 8mmvariant voor ongeveer 15 euro. Een Chinese eBayhandelaar 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 usbnetvoeding makkelijk aan.
Als basis gebruiken we de ESP8266usbprintplaat Wemos D1 mini. Die is bijzonder goedkoop (zeven euro) en heeft een aparte 5Vpin die rechtstreeks met de microUSBaansluiting 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.
Firmware
Er bestaat al kantenklare firmware om WS2812bleds 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 smarthometoepassingen.
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 processcheduler werkt dat tegelijkertijd. Voor het installeren heb je de Arduino IDE inclusief de ESP8266boarddefinities 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 Arduinobestand uit onze GitHubrepository (zie de link onderaan dit artikel) en open je dat in de IDE. Je kunt alle parameters dan aanpassen en het script op je ESP flashen.
En toen was er licht
Verbind je leds met het ESPboard. Controleer van tevoren altijd de specificatie als je die hebt: Vcc / +5V / V verbind je met de 5Vpin, GND / G met de massapin en DataIn (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 MQTTverbinding gemaakt is, wordt die led twee seconden groen. Daarna kun je het eerste commando versturen: de commandosyntaxis hebben we bewust eenvoudig gehouden. Die volgt het schema van het aansturen binnen de firmware met behulp van adressen en RGBkleurwaarden. Om een afzonderlijke of alle leds aan te sturen, stuur je
adres, rood waarde, groen waarde,
blauwwaarde
naar het betreffende MQTTapparaat. 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, rood waarde, groen waarde, blauw waarde
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 neveneffecten 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 GitHubpagina, dan hebben andere lezers daar wellicht ook wat aan. (nkr)
Literatuur
[1] Jan Mahn, Wereldtaal, Het MQTT-protocol voor robuuste data-uitwisseling in industrie en home-automation, c't 5/2018, p.118
[2] Jan Mahn, Reactiemachine, Instappen in home-automation met Node-RED, c't 10/2018, p.120