Wie ja viele von euch mit Sicherheit mitbekommen habe, habe ich eine neue Version meines alten WLAN Pixel Controllers gebaut…

LoxPixel!

LoxPixel! Prototyp
LoxPixel! Prototype, © Dennis Henning

Auf Basis von Dennis‘ Loxpixel-Projekt habe ich mit ihm zusammen die Idee weiterentwickelt und zuerst seine Prototypenplatinen überarbeitet. In Zusammenarbeit mit m0fa, zu dieser Zeit Entwickler bei cod.m, haben wir die von Dennis entwickelte Software umgeschrieben und erweitert.

Allerdings kamen wir hier immer wieder an Grenzen, was Zusammenspiel einzelner Bibliotheken, Featurewünsche und Implementation anging. Nach langer Diskussion haben wir uns dann zusammen dazu entschieden, die Codebasis von LoxPixel aufzugeben.

Software

Bei meinen ersten Controller hatte ich auf McLighting als Firmware gesetzt, hatte aber damals schon ein Auge auf das WLED-Projekt geworfen. McLighting wird offensichtlich nicht mehr weiterentwickelt, WLED hat dagegen in den letzten Jahren massive Schritte nach vorne gemacht – ich war buchstäblich erschlagen was die Software mittlerweile kann.

WLED hat ein vorzügliches User-Interface, beherscht über 150 Effekte, bietete zahlreiche API’s (HTTP, MQTT, UDP, DMX, etc.), ermöglicht den Stripe in Segmente aufzuteilen, läuft auf ESP8266 sowie ESP32, es existieren Apps für iOS und Android und es gibt eine sehr aktive Entwicklergemeinde. Viel mehr Infos dazu findet ihr auf der Projektseite: https://github.com/Aircoookie/WLED.
Außerdem werden so ziemlich alle Pixeltypen unterstützt, die man finden kann. Ob WS2801 (Data/Clock), APA201/SK9822 (Data/Clock) oder die weitverbreiteten WS2812/WS2813/SK6812 mit nur einer Datenleitung. Wichtig ist nur, dass die Firmware für diese drei Kategorien unterschiedlich kompiliert werden muss – Standard ist WS281x/SK6812. Mit der kommenden Version 0.12 entfällt auch das.

Jeder, der die Software nutzt, ist aufgerufen bei WLED etwas zu spenden um die Entwicklung weiter zu unterstützen. Link dazu findet ihr auf Github.

Weiterentwicklung

Die Entscheidung für WLED stand also fest. Allerdings konnte WLED nichts mit dem Loxone-Universum anfangen. Klar konnte man per virtuellem HTTP-Ausgang einzelne Effekte schalten aber es gab zum Beispiel für die von Loxone intern verwendeten Farbwerte aus dem Lichsteuermodul keinen direkten Weg.
Genauso macht es zum Beispiel keinen Sinn, einen Slider/Schieberegler per HTTP anzubinden, weil der Overhead des Protokolls zu hoch ist um eine flüssiges Einstellen der (z.B.) Helligkeit am WLED-Controller möglich zu machen.

Wir haben uns also hingesetzt um die direkte Verwendung von WLED mit Loxone zu integrieren. Damit können die Farbinformationen (RGB, Lumitech) aus den Lichtsteuerbausteinen von Loxone direkt an einen virtuellen UDP/HTTP-Ausgang gegeben werden, der die Daten an WLED sendet. Die komplette HTTP-API ist jetzt auch über den bereits vorhandenen UDP-Port (21324) ansprechbar.
Alles weitere dazu kann man im Pull-Request bei WLED nachlesen: https://github.com/Aircoookie/WLED/pull/1185

Seit Version 0.11.0 sind diese Erweiterungen Bestandteil von WLED und können von jedem genutzt werden. Boarddefinitionen für den cod.m Pixel Controller V0.4 und V0.5 sind vorhanden, wobei Version 0.5 die gleichen Pins nutzt wie das Standard-Binary – V0.5 gilt genauso für V0.6.

Hardware

Ich habe mich schon vor Längerem von den ESP-12F-Modulen verabschiedet. Einerseits weil ich schlechte Erfahrungen bezüglich Stabilität mit ihnen gemacht habe und andererseits, weil es teilweise wirklich schwer war verlässliche Module und ordentliche Dokumentation zu bekommen.
Mittlerweile setze ich komplett auf die Espressif-eigenen ESP-WROOM-02-Module, wenn es um den ESP8266 geht. Die bekommt man beim üblichen Distributor und die Dokumentation („Typical Application“, etc.) ist einfach was anderes als bei Aliexpress-Ware.

Gegenüber dem alten Pixel Controller sollte dieses mal auch ein schickes Gehäuse her und zusammen mit Dennis fiel die Entscheidung, den empfohlenen 1000µF-Kondensator nicht mit auf die Platine zu nehmen. Dieser sollte sowieso bei jeder Spannungseinspeisung in den Stripe benutzt werden – siehe Adafruit Uberguide – weswegen wir ihn als eigenständige Platine in Form unseres Power Capacitor Boards gebaut haben.
Wie alles verkabelt wird, findet man im ausführlichen Anschlussplan auf der Shopseite.
Um die Hardware bei Falschverkabelung nicht direkt zu zerstören ist außerdem ein Verpolungsschutz mit an Board.

Pixel Controller in Gehäuse

Bei dem Gehäuse hatten wir uns ziemlich schnell auf „USB-Stick-Größe“ geeinigt und ich fand das Hammond USB1551CLR recht ansprechend. Die gegebene Platinengröße ist ausreichend und durch das transparente Gehäuse konnte man die Status-LED direkt sehen. Einzig die Öffnung muss für die Schraub-Steckklemme etwas bearbeitet werden. Leider unterstützt WLED noch keine Status-LED weswegen die LED aktuell einfach leuchtet, wenn der Stripe eingeschaltet ist.

Ausgangssignal cod.m Pixel Controller V0.6

Wie schon auf der alten Platine ist ein SN74AHCT125D als Level-Shifter von 3.3V auf 5V mit an Board. Damit sind Datenkabellängen von gut zwei Metern möglich und man muss nicht tricksen, wobei man evtl. das erste Pixel verliert (etc.). Im Ozilloskop-Bild sieht man wie „gut“ dadurch das 5V-Signal ist.

Wer längere Strecken (bis 500m) zwischen Controller und Stripe überbrücken muss, kann zu unserem Pixel Range Extender greifen. Schaffe es hoffentlich dazu auch noch mal einen Blogpost zu schreiben.

Natürlich kann man auf dem Controller auch beliebige andere Firmware aufspielen. Der Programmierheader ist ausgeführt und es gibt Buttons für Flash/Reset. Die benutzten Pins sind auf der Platine dokumentiert und ansonsten findet man alles andere auf Github https://github.com/codm/wifi-pixel-controller (Open-Source Hardware, CC-BY-NC-SA).

Grundaustattung

Was braucht man also um eine Beleuchtung mit WLED zu realisieren?

Macht euch in jedem Fall mit den verschiedenen Pixeltypen vertraut. WLED kann auf einem ESP8266 bis zu 850 Pixel adressieren. WS281x/SK6812 ist der gängigste Typ mit nur einer Datenleitung, wobei SK6812 fast immer RGBW Pixel sind und auch unter der von Adafruit geprägten Bezeichnung „Neopixel“ zu finden sind.

Stripes/LEDs

Stripes gibt es außerdem in 5V und in 12V. Bei 12V sind meist drei Pixel zu einem logischen Pixel zusammengefast und die Datenleitung läuft mit 5V (!).
Ich habe gute Erfahrung mit dem Stripes von BTF-Lighting gemacht, die ihr beim Amazon oder den üblichen chinesischen Warenhäußern findet.

Ansonsten ist es wirklich persönliche Präferenz. Ob 30 Pixel/m Stripe, 60 Pixel/m Stripe, 144 Pixel/m Stripe, einzelne LED’s mit Kabel dazwischen (Lichterkette) oder was auch immer. WLED kann mit jedem mir bekannten Pixeltyp umgehen.

Tobt und probiert euch aus 👍🏻

Strom

Weswegen also 5V und 12V Stripes? Das ergibt sich, wenn man anfängt die benötigte Leistung und damit den benötigten Strom eines Stripes zu berechnen. Am Strom hängen zum Beispiel die benötigten Kabelquerschnitte und daran auch wieder die möglichen Leitungslängen.

Als Beispiel: Ihr habt einen 5m Stripe mit 60 Pixeln pro Meter, also ingesamt 300 Pixel. Jede Farbe (RGB/RGBW) pro Pixel schlägt bei maximaler Helligkeit mit 20mA zu Buche (Siehe oben verlinkten Adafruit Uberguide). Bei RGB sind wir dann also bei 5 x 60 x 3 x 20mA und bei RGBW bei 5 x 60 x 4 x 20mA. Ergibt für RGB 18 Ampere und bei RGBW 24 Ampere, respektive 90 bzw. 120 Watt.

Bei 12V sind es dann „nur“ noch 7,5 Ampere (RGB) bzw. 10 Ampere (RGBW) bei gleicher Pixelanzahl.
Aber nochmal: 12V Stripes haben typischerweise drei echte LED’s zu einem logischen Pixel zusammengeschlossen, können also nur zusammen angesprochen werden.
Update: WS2815 12V Stripes haben keine gruppierten Pixel. D.h. jede LED ist einzeln ansteuern bei einer Versorgungsspannung von 12V aber immer noch mit 5V Datenleitung. Das oben genannte gilt also für WS2811@12V aber nicht für WS2815.

Dazu kommt noch, dass die Leiterquerschnitte im Stripe zu gering sind. Wenn ihr jetzt den beispielhaften 5m-Stripe einseitig mit 5V einspeißt, wird nach etwa 2 bis 2,5m bei maximaler Helligkeit (weiß) ein Ausbleichen stattfinden. Deswegen sollte bei 5V der Stripe dort wieder neu eingespeißt werden. Im Beispiel (5m) reicht es, wenn man an beiden enden 5V anschließt. Bei 12V-Stripes sollte ein einspeißen alle 5m ausreichen.
Ist auch nochmal im Anschlussplan auf der cod.m-Shopseite vermerkt.

Bei der Netzteildimensionierung ist also Aufmerksamkeit geboten!
Grundliegend sollte ein Netzteil immer auf den maximal möglichen Stromverbrauch ausgelegt sein plus etwas Toleranz nach oben. In der Realität werdet ihr aber, außer bei 100% Weiß, nie die volle Leistung nutzen. Effekte laufen oft mit nur einer Farbe und selten bei voller Helligkeit – ergo Stromverbrauch.

WLED hat diesbezüglich noch ein Ass im Ärmel. In der LED-Konfiguration kann man den maximalen Strom seines Netzteils hinterlegen. Damit begrenzt WLED abhängig dieser Einstellung die Helligkeit des Stripes, man hat aber bei Effekten durch weniger Stromverbrauch meist trotzdem die volle Helligkeit.

Verkabelung

Anschlusplan WS281x/SK6812 5V

Im Anschlussplan im cod.m Shop hab ich versucht für jeden Pixeltyp wie auch für 5V bzw. 12V alles aufzuzeigen. Wichtig: Der cod.m Pixel Controller muss mit 5V versorgt werden, auch bei 12V Stripes.
Bei Verwendung von getrennten Netzteil für Stripe und Controller ist auf einen „common ground“ – also gemeinsame Masse – zu achten.
(Seit WLED Controller V0.8 nicht mehr nötig)

Das Netzteil sollte so nah wie möglich am Stripe positioniert sein. Der Spannungsabfall bei hohen Leitungslängen ist bei 5V nicht zu verachten, weswegen bei größeren Entfernungen in jedem Fall der Querschnitt entsprechend der Leistung/Länge berechnet werden sollte.

Die Strecke der Datenleitung, also vom Controller zum ersten Pixel, sollte 2m nicht überschreiten (cod.m Pixel Controller). Länger kann klappen, liegt aber an der Umgebung bzw. an eurem verwendeten Controller. Das Signal verschlechtert sich sehr schnell (800kHz).
Wer größere Entfernungen der Datenleitung zwischen Controller und Stripe überbrücken muss, kann – wie schon erwähnt – auf unseren Pixel Range Extender zurückgreifen.

Anbindung

„Womit“ ihr WLED steuert bleibt völlig euch überlassen. Als Standalone-Lösung taugt WLED durch das auf dem Controller laufende Webinterface genauso wie integriert über die zahllosen Schnittstellen.
Falls man mehrere WLED-Controller am laufen hat, kann man diese sehr gut über die WLED-App bedienen und WLED selbst erlaubt sogar die Synchronisation von mehreren Controllern im gleichen WLAN.

Integrationen in node-red, io.broker, openhab, Loxone (etc.) sind entweder über MQTT, HTTP oder UDP möglich. Oft gibt es auch schon fertige Integrationen die genutzt werden können.

Produktion/Aktueller Stand

Üblicherweise entstehen die Platinen bei uns in Kleinserien und Handbestückung. Wer an der Produktion interessiert ist, ich hatte da in einem Twitter-Thread mal ein paar Bilder geposted: https://twitter.com/pregopm/status/1319939302437097473

Aktuell haben wir allerdings einen Auftrag beim Bestücker platziert, weil wir letze Woche völlig überrollt worden sind. Warum fragt ihr euch? Deswegen:

Manuel Dietrich hatte Ende letzten Jahres in der Loxone Users-Facebook-Gruppe seine Garage, die unserem WLED Controller einsetzt, mit großer Resonanz gezeigt. Die Steuerung erfolgt bei ihm über Loxone und das entsprechende Kommunikationsmodul seines Garagentorantriebs.
Einfach nur der Knaller. In seinem Youtube-Video findet ihr alle Befehle und die von Ihm verwendeten Animationen. Im LoxForum hat er außerdem ein kleines Tutorial geschrieben wo er alles wichtige zusammengetragen hat, inkl. einer .loxone-Beispieldatei: https://www.loxforum.com/forum/faqs-tutorials-howto-s/300117-tutorial-garagensturzbeleuchtung-mit-wled

Anfang des Monats sprachen wir kurz und er hat angeboten das Video noch mal in guter Qualität neu aufzunehmen und uns zur Verfügung zu stellen. Nach Postings auf seinem und dem Youtube-Kanal von cod.m war unser Lagerbestand fast weg. Als dann aber auch noch Spiel und Zeug Manuel’s Video gefeatured hat, waren wir am Tag darauf komplett leergekauft.

Mit solch einer Resonanz haben wir nichr gerechnet – WOW! Danke!
Wir wollen baldmöglichst wieder lieferfähig sein, weswegen uns ein befreundeter Bestücker ausgeholfen hat. Bei ein paar Bauteilen gibt es aber aus aktuellen Gründen ein paar Lieferprobleme und wir hoffen ab dem 30.3.2021 wieder das Lager gefüllt zu haben.

Update 10.4.2021: Wir sind schon wieder leergekauft 😳 Aber, Platinen sind schon bestellt und der Slot beim Bestücker ist bereits gebucht. Wir rechnen aktuell damit ab 22.4. wieder liefern zu können.
Danke!!

Update 1.5.2021: Alle Vorbestellungen abgearbeitet und der aktuelle Bestand schwindet schon wieder. Wir haben bereits die nächste Charge bestellt.

Update 20.5.2021: Seit heute versenden wir alle bestehenden Vorbestellungen und haben bereits die erneute Nachproduktion angestoßen, so dass wir zukünftig auch etwas Bestand vorhalten können.
Vielen Dank für die ganzen Bestellungen.

Fazit

Puh, ich bin froh, dass ich das alles endlich mal zusammengeschrieben habe. Die Entwicklung war ja bereits im letzten Jahr und wir verkaufen den Pixel-Controller ja auch schon ein paar Tage.

Ich bin sehr stolz, dass der Entwickler von WLED unsere Ideen so super fand und wir sogar als kompatible Hardware im WLED-Wiki gelistet sind. AirCookie war unheimlich hilfreich und hatte immer ein offenes Ohr. Danke!
Natürlich auch ein dickes Danke an Dennis für die Lox!Pixel-Idee und Manuel für das sagenhafte Video.

Es ist auch bereits die nächste Hardware in Arbeit, will aber noch nicht zu viel verraten. Es geht in jedem Fall um WLED 😉

Ich freue mich wie immer über euer Feedback.

Update: Wir haben ein WLAN Pixel Controller Starterset (WLED) zusammengestellt, vorkonfiguriert und steckerfertig. Bestehend aus 2m SK6812 IP30 Pixelstripe, 6A/5V Netzteil und WLAN Pixel Controller.

Da mir eine Spule/Rolle für 2m Stripe fehlte, habe ich kurzerhand eine desgined und 3D-gedruckt. Files dazu findet ihr auf Thingiverse: https://www.thingiverse.com/thing:4883381