Onlangs hebben we onze brakke zolder omgetoverd tot slaapkamer voor onze oudste dochter. Doordat daar slechts een trapgat was, hebben we een kast laten plaatsen met een schuifdeur in. Hierdoor werd de ruimte opgesplitst in de kamer enerzijds, en een donkere traphal anderzijds.

Die donkere traphal smeekte om lichtjes. Na wat spelen is dit het resultaat.

TL;DR

Pas na het schrijven van deze blogpost had ik door dat de vertelstijl niet de beste is voor als je ook gewoon 600 leds in een traphal wil ophangen. Daarom deze korte samenvatting, bestel dit:

Als je dan mijn fantastisch schema hieronder volgt en WLED naar je ESP8266 flasht ben je klaar.

Inleiding

Een jaar of twee geleden begon ik me te verdiepen in de wondere wereld van Arduino. Voor de leken: een Arduino is een klein ontwikkelbord met daarop een microcontroller, waarmee je schakelingen kan programmeren. Dat kan gaan van een lampje dat aangaat bij een bepaalde temperatuur, tot de volledige aansturing van een 3D-printer.

Qua rekenkracht zijn Arduino's eerder beperkt en wil je ermee online gaan dan moet je jezelf in 500 bochten wringen.

ESP

Al een geluk zijn er een andere ontwikkelbordjes die daar wel heel goed in zijn. Die bordjes bevatten de ESP8266-microchip. Die chip is op dezelfde manier te programmeren als een Arduino, maar heeft standaard ingebouwde WiFi, en de nodige bibliotheken om IoT-toepassingen mogelijk te maken. Zijn grote broer de ESP32 kan naast dat alles ook Bluetooth (en is dubbel zo snel).

En niet alleen in functionaliteiten is de ESP-familie een flinke verbetering op Arduino, ook qua prijs zijn het toppers. ESP8266 en ESP32 bordjes vind je op AliExpress voor minder dan 5 euro, da's heel wat minder dan de 30 euro die je voor een echte Arduino UNO betaalt.

Zo'n ESP-bord is ideaal om wat sensors aan te hangen, om zo bijvoorbeeld realtime de temperatuur van een kamer in de gaten te houden, maar ze zijn ook goed om leds vanop afstand aan te sturen.

Lampjes

Op AliExpress vind je voor bijna geen geld leds in alle vormen en maten. Het makkelijkst aanstuurbaar zijn 5V leds met WS2812B pixels (chip+LED). Deze zijn individueel adresseerbaar (dus elk lampje kan een andere kleur krijgen) en kunnen met hoge refreshrate worden aangestuurd.

Ik heb zelf deze lampjes al besteld:

In deze post ga ik me focussen op de ledstrips. Daarvan heb ik er 2 besteld voor de traphal, voor elke kant 1. Dat zijn dus 600 leds in totaal.

Stockfoto van een ledstrip

Voeding

De makkelijkste manier om een ESP8266 van stroom te voorzien is via de micro- USB-poort die op de meeste bordjes te vinden is. Dit heeft wel als nadeel dat je relatief weinig stroomsterkte hebt om je leds aan te sturen. Wetende dat elke LED 60 milliampère vraagt (20 milliampère per kleur: rood-groen-blauw bij maximale helderheid) zal je zonder externe voeding iets van een 15 à 30 leds van maximale helderheid kunnen voorzien (afhankelijk van de stroomsterkte van je usb-adapter). In de praktijk valt dit altijd wel hoger uit, omdat je meestal geen helder wit gaat tonen en omdat 100% helderheid echt wel extreem helder is.

Maar als je  600 leds wil aansturen kan je niet rond een externe voeding. De rekensom 600 * 0,06A komt uit op een voeding van 36A. Maar om te testen heb ik een voeding van 10A gebruikt, en die werkt perfect. Omdat spelen met 220 volt toch iets meer risico inhoudt heb ik ook lokaal besteld en niet op AliExpress.

De voeding in kwestie

Aansluiten

Het aansluiten van de ledstrip zelf is eenvoudig. De WS2812B-strips hebben drie draden: rood (stroom), zwart (grond) en groen (data). Ik heb hieronder een schema van mijn aansluiting geplaatst:

Zoals je kan zien (of niet - want het is echt een slecht schema) sluit ik de voeding aan op het bordje (via de VIN- en GND-pinnen) en op verschillende plekken op de ledstrips. 5V leds verliezen onderweg wat voltage en door ze op verschillende plekken van stroom te voorzien voorkom je dat het begin van je strip helderder is dan het einde. Ik verbind ook de zwarte draad van de strip met een GND-pin van de ESP8266, anders zou de datalijn niet werken.

Aandachtige lezers zullen nu misschien zeggen: de ESP8266 werkt op 3.3V en je voeding en strip zijn 5V. Hoe kan dat?

  • Voor het bord is het geen probleem. De bordjes die ik gebruik (en ik vermoed quasi alle ESP8266's) zetten stroom via USB en VIN intern om naar 3.3V.
  • Het data-signaal op pin D4 zou in principe via een level shifter moeten omgezet worden, maar in de praktijk heb ik dit nog nooit moeten doen. Als je funky dingen krijgt zoals knipperende leds of stukken die niets doen, dan is het aangeraden om hier nog een level shifter tussen te steken.
De voeding (boven) en de ESP8266 (onder)

De software

Om de kleur van de LEDs te kiezen heb je drie mogelijkheden:

  1. Zelf een sketch schrijven in de Arduino IDE, gebruikmakend van een bestaande bibliotheek zoals FastLED. Dit geeft heel wat flexibiliteit, maar je moet wel alles zelf doen.
  2. ESPHome op je bordje zetten. Dit is een firmware die zich richt op smarthome toepassingen, en het makkelijk maakt om allerhande sensors, knoppen en leds toegankelijk te maken via bijvoorbeeld HomeAssistant. Ik gebruik ESPHome om de temperatuur in mijn serverkast en de vochtigheid in de kelder door te geven aan HomeAssistant. Per toepassing die je zo maakt schrijf je een simpel configuratiebestand (voorbeeld), waarin je zegt op welke datapin van je bord wat is aangesloten en nadat je dit geflasht hebt zie je dan de nodige entiteiten HomeAssistant.
  3. WLED op je bordje zetten. WLED is een beetje zoals ESPHome, maar dan enkel en alleen voor LEDs. Waar ESPHome met een tiental (vrij basic) effecten komt zijn het er bij WLED meer dan honderd. Ook krijg je mooie kleurpaletten, de mogelijkheid om verschillende segmenten te maken (elk met een ander effect of gespiegeld), en een hoop zotte extra's zoals een eigen app, gebruiksvriendelijke website, Philips Hue sync en HomeAssistant integratie.

De meest gebruiksvriendelijke en uitgebreide manier is WLED. Om dit op de Mac op je ESP8266 te zetten is het niet veel meer dan:

  • Terminal openen
  • pip3 install esptool.py typen
  • De laatste versie van WLED downloaden (WLED_0.11.1_ESP8266.bin op moment van schrijven)
  • esptool.py write_flash 0x0 ./WLED_0.11.1_ESP8266.bin typen (vanuit het juiste pad).
  • Normaal kan je nu verbinden met het WiFi-netwerk WLED-AP met wachtwoord wled1234.
  • Indien je nu surft naar http://wled.me zou je op de instellingspagina moeten komen waar je onder andere je eigen WiFi moet instellen.

Eens verbonden met je eigen WiFi kan je via de app (iOS en Android) of in de browser (http://wled.local) je leds verder instellen. Zo dien je bijvoorbeeld aan te geven hoeveel leds je wil aansturen, en ook hoeveel ampère je voeding levert, zo zal WLED nooit je voeding overbelasten. Je kan hier je leds ook verdelen in meerdere segmenten.

Op deze en  deze pagina staat nog extra uitleg mocht het niet willen lukken.

Echt mooi is de app niet maar hij werkt wel.

Daarna kan je beginnen spelen met de massa's effecten, paletten en andere geinigheden. Als je HomeAssistant gebruikt verschijnt de integratie normaal gezien vanzelf.

Enkele van meer dan 100 effecten

Tot slot

De totale kostprijs voor dit projectje was minder dan 50 euro. Da's 10 meter leds voor veel minder dan waarvoor Philips je 2 meter verkoopt (die dan nog niet eens verschillende kleuren kan weergeven). Ok, je moet zelf wel wat prutsen, maar al bij al is dit een relatief klein project dat er wel serieus graaf uit ziet.

Nog op zoek naar een nieuwe hobby voor 2021? Dan kan ik spelen met microcontrollers en home automatisatie alleen maar aanraden. Ik heb trouwens nog een paar posts in de pijpleiding zitten over ESPHome en HomeAssistant. Dus stay tuned.

Nog vragen of opmerkingen? Stuur me gerust iets op Twitter.


  • De dubbelzijdige tape die aan de ledstrips hangt is niet van superkwaliteit. Ik verwacht dat ik die nog zal moeten vervangen door iets deftiger.
  • Jumperwires durven al eens loskomen. Op termijn ga ik alles nog vastsolderen.
  • De voeding durft bij lage belasting een piepend geluid te maken. Da's normaal.
  • Zijn de kleuren fout? Wordt rood als groen weergegeven en groen als rood? In de instellingen van WLED kan je de volgorde kiezen. De volgorde van de ledstrip die ik gebruik is GRB (green-red-blue).
  • Ik plan dit project nog uit te bereiden met een bewegingssensor en een schakelaar. WLED is op zich makkelijk uit te bereiden en er zijn al vele usermods.
  • Er bestaat ook een fork van WLED die reageert op geluid, interessant voor coole visualisaties.