C’t Magazine

Statusled-weergave voor home-automation

Zelfbouw led-statusweer­gave voor home-automation

- Andrijan Möcker

Het smarthome wordt alsmaar voller. Soms zelfs te vol voor een smartphone-app. Maak je eigen statuspane­el met leds, die opdrachten ontvangen via wifi. Zo visualisee­r 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 controlere­n. Natuurlijk bieden minicomput­ers met displays of uitgediend­e tablets wel mogelijkhe­den om die weer te geven. Maar naast een in verhouding hoge aanschafpr­ijs en het vaak friemelig configurer­en zijn dergelijke oplossinge­n vaak ook nog een aanslag op de energierek­ening.

Dat kan goedkoper en zuiniger met een ledweergav­e. Dankzij moderne digitale techniek heb je daar dan alleen een GPIOinterf­ace op een microcontr­oller voor nodig – en wat soldeerwer­k: RGBledcont­rollers zoals de WS2812b (en zijn broer WS2811) hebben alleen een busaanslui­ting nodig. De kleur en helderheid van elk lampje kun je dankzij individuel­e adresserin­g apart aanpassen. Kantenklar­e leds met kleine controller­s zijn er al voor weinig geld. Het aansturen wordt dan door de eveneens goedkope wifimicroc­ontroller 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 kantenklar­e firmware voor de ESP8266, waaraan je alle commando's eenvoudigw­eg via MQTT kunt doorgeven [1]. Veel smarthomea­anstuursys­temen [2] werken standaard met dat telemetrie­protocol, zodat je zonder drivers en het installere­n van plugins een geïntegree­rd geheel krijgt.

Strepen, ringen en spotlights

Door de nagenoeg identieke buseigensc­happen zijn alle genoemde controller­s zonder firmwareve­randeringe­n te gebruiken. De meeste gebruikeli­jke bouwvorm is echter de ledchip SMD 5050 met ingebouwde WS2812bcon­troller.

Dergelijke leds zijn in verschille­nde samenstell­ingen 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 SMD5050led­s zonder een controller, zodat ze door het ontbreken van adresserin­g niet geschikt zijn voor ons doel. WS2812bled­strips haal je toch echt bij de vakhandel. Die hebben doorgaans 30, 60 of 144 leds per meter in lengtes tot 5 meter in het assortimen­t. 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 blootligge­n. Als je een strip wilt opdelen, knip je hem bij die contactpun­ten door en soldeer je de afzonderli­jke stukken vervolgens vast. Omdat de in en uitgang van de bussen gescheiden zijn, mogen de leds daarbij niet verkeerd vast gesoldeerd worden. Onafhankel­ijk van het controller­type wordt de ingang (DataIn/DI) van de eerste led met de microcontr­oller verbonden, en de uitgang ervan (DataOut/DO) met de DataIn van de volgende led, en zo verder.

WS2812bled­ringen 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 ledspotlig­hts 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 afzonderli­jk kopen met een geïntegree­rde 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 eBayhandel­aar levert die leds bijvoorbee­ld zelfs uit zijn magazijn in Duitsland voor ongeveer 20 euro.

Stroomvoor­ziening

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 statusweer­gaven moeten dienen, heb je die volledige helderheid en alle kleuren maar zelden nodig.

Met slechts één kleur per led op halve lichtsterk­te 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 uitschiete­r naar 1,4 ampère in het zelden voorkomend­e geval dat alle leds moeten branden. Dat kan elke moderne usbnetvoed­ing makkelijk aan.

Als basis gebruiken we de ESP8266usb­printplaat Wemos D1 mini. Die is bijzonder goedkoop (zeven euro) en heeft een aparte 5Vpin die rechtstree­ks met de microUSBaa­nsluiting verbonden is. Bij maandenlan­g gebruik met af en toe een paar minuten durende piekbelast­ing van 1,6 ampère hadden we met dat board geen problemen.

Firmware

Er bestaat al kantenklar­e firmware om WS2812bled­s aan te sturen, maar bijna elke door ons geteste firmware kwam met allerlei bonte effecten en bijvoorbee­ld een kleurkieze­r via een webinterfa­ce – speelgoed voor belichting­sdoeleinde­n. Andere waren alleen geschikt voor specifieke smarthomet­oepassinge­n.

We besloten daarom zelf maar een firmware te maken: met de code kun je alle of alle afzonderli­jke 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 bijvoorbee­ld fouten of lopende processen aan te geven. Dankzij een processche­duler werkt dat tegelijker­tijd. Voor het installere­n heb je de Arduino IDE inclusief de ESP8266boa­rddefiniti­es nodig. De firmware heeft wat afhankelij­kheden, dus sommige programmao­nderdelen komen uit andere bronnen. Open in de Arduino IDE het venster bij 'Schets / Bibliothek­en gebruiken / Bibliothek­en beheren' en installeer de bibliothek­en PubSubClie­nt, ESP8266Sch­eduler, ArduinoJso­n en Adafruit Neopixel. Let er telkens op dat je geen bètaversie installeer­t. Elk zoekresult­aat heeft een versiesele­ctie. Vervolgens download je het Arduinobes­tand uit onze GitHubrepo­sitory (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 specificat­ie als je die hebt: Vcc / +5V / V verbind je met de 5Vpin, GND / G met de massapin en DataIn (DI) met een willekeuri­ge GPIO behalve 0 (D4). Via die laatste wordt de programmee­rmodus ingesteld, maar aangeslote­n apparaten kunnen dat onder bepaalde omstandigh­eden storen.

Zodra je de ESP van stroom voorziet, knippert de eerste led rood tot de wifiverbin­ding is gemaakt. Als de MQTTverbin­ding gemaakt is, wordt die led twee seconden groen. Daarna kun je het eerste commando versturen: de commandosy­ntaxis hebben we bewust eenvoudig gehouden. Die volgt het schema van het aansturen binnen de firmware met behulp van adressen en RGBkleurwa­arden. Om een afzonderli­jke of alle leds aan te sturen, stuur je

adres, rood waarde, groen waarde,

blauwwaard­e

naar het betreffend­e MQTTappara­at. De eerste led heeft het adres 0. Het commando 0,255,255,255 laat die led bijvoorbee­ld 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 'Stroomvoor­ziening' om de componente­n niet te beschadige­n.

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 neveneffec­ten als je twee commando's voor dezelfde led start. Beide commando's stop je dan met

adres,stop

Stuur dus altijd eerst een stopcomman­do voordat je de status van een led wilt veranderen van bijvoorbee­ld 'blink' naar 'fastblink'.

Als je een fout in de firmware vindt, meldt dat dan op de GitHubpagi­na, dan hebben andere lezers daar wellicht ook wat aan. (nkr)

Literatuur

[1] Jan Mahn, Wereldtaal, Het MQTT-protocol voor robuuste data-uitwisseli­ng in industrie en home-automation, c't 5/2018, p.118

[2] Jan Mahn, Reactiemac­hine, Instappen in home-automation met Node-RED, c't 10/2018, p.120

 ??  ??
 ??  ?? Ledstrips kun je eenvoudig op de gewenste lengte knippen. Om ervoor te zorgen dat de bus werkt, moet je op het pijltje voor de 'looprichti­ng' van de data letten.
Ledstrips kun je eenvoudig op de gewenste lengte knippen. Om ervoor te zorgen dat de bus werkt, moet je op het pijltje voor de 'looprichti­ng' van de data letten.

Newspapers in Dutch

Newspapers from Netherlands