LED-Streifen sind eine sehr attraktive Beleuchtung im Wohnbereich. In diesem Artikel betrachten wir adressierbare, digitale LEDs des Typs WS2812B/WS2813. Durch die Einzeladressierung der LEDs (=Pixel) sind folgende Effekte möglich:

  • Eigene Farbe pro Pixel
  • Eigene Helligkeit pro Pixel
  • Beliebige Muster im Streifen anwendbar

Bei analogen RGB-Streifen dagegen gilt:

  • Eine Farbe für alle Pixel
  • Eine Helligkeit für alle Pixel
  • Muster: nur Blinken und Fading möglich

Programmierbare Streifen sind etwas teurer als analoge Streifen, aus meiner Sicht rentiert sich der Einsatz jedoch durch die vielen Effekte.

LED-Hardware

WS2812B

WS2812B-Pixel in einem Streifen sind mit GND und +5V durchverbunden. Es gibt eine Datenleitung, welche vom ESP8266 kommend in den DI (Digital Input) des ersten Pixels führt. Der Ausgang DO (Digital Output) des ersten Pixels führt auf den DI des nächsten Pixels und so weiter. Jeder LED-Pixel hat einen eigenen Controller (WS2811), der die Datensignale zwischen DI und DO regeneriert und weiterreicht. Dadurch wird der Ausgang des ESP8266 nicht so stark belastet.

Die WS2812B-Pixel werden mit 5V betrieben, der Dateneingang muss ebenfalls 5V-Pegel aufweisen. Der ESP8266 hat jedoch nur einen Signalpegel von 3,3V. Laut Datenblatt der LED-Pixels reichen die Schaltschwellen des ESP8266 nicht aus, die Pixel sauber anzusteuern. Es ist also ein Pegelwandler für das Datensignal von 3,3V auf 5V vorzusehen.

Eine WS2812B-LED hat vier Anschlüsse:

  • Vdd: +5V
  • Vss: GND
  • DIN: Signaleingang von DOUT der vorhergehenden LED
  • DOUT: Signalausgang zu DIN der nachfolgenden LED

Quelle: WorldSemi

Die einzelnen LEDs sind auf einer streifenförmigen, flexiblen Leiterplatte angeordnet. Vss und Vdd werden als Busleitungen durch alle LEDs verschaltet, während die Datenleitung immer von DOUT einer LED zu DIN der nachfolgenden LED verschaltet wird.

Quelle: WorldSemi

Die WS2812B-Streifen gibt es in Längen von 1..5m. Es ist auf die Anzahl der Pixels pro Meter zu achten. Der Streifen ist auf einer Spule aufgerollt. Bei 5m-Streifen sind es 300 Neopixel.

An den vorgesehenen Trennstellen kann der Streifen mit einer Schere abgeschnitten werden. Den Rest kann man für andere Projekte verwenden.

Wenn noch keine Anschlußkabel vorhanden sind, kann man diese selbst anlöten:

  • Blau = GND
  • Rot = +5V
  • Grün = Daten

Für die Stromversorgung dickere Kabel verwenden, hier fließen bei 5V erhebliche Ströme! Bei langen Stripes die Versorgung von 5V an mehreren Stellen einspeisen. Die Leiterbahnen sind nicht für 18A ausgelegt.

WS2813

Diese Led-Stripes sind neueren Datums. Sie beinhalten zwei Signalstufen, während die WS2812B nur eine besitzt. Fällt bei einem WS2812B-Stripe ein Pixel aus, so sind alle nachfolgenden LEDs dunkel. Bei der WS2813 gibt es nicht nur die Signalkette DOUT --> DIN, sondern noch eine zweite Kette DIN --> BI.

Quell: WorldSemi

Es ist Geschmackssache, ob man WS2812B oder WS2813 verwendet, mich stören ausgefallene Pixel immer. Beide LEDs gibt es einzeln, deshalb empfehle ich im Fehlerfall, das defekte Pixel mit dem Lötkolben auszutauschen.

 

Berechnung der Stromversorgung

Laut Datenblatt benötigt eine LED 20mA. Da wir drei verschiedenfarbige LEDs haben, benötigen wir 3 LEDs x 20mA = 60mA pro Pixel (=Farbe weiß). Bei 5V Versorgungsspannung sind das 0,3W pro Pixel. Ein LED-Streifen von einem Meter Länge mit 60 Pixeln benötigt eine Leistung von 60Pixeln x 0,3W = 18Watt. Das Netzteil liefert dabei einen Strom von 60Pixeln x 60mA=3,6A. Ein normaler USB-Adapter kann hier nicht eingesetzt werden!

Ein LED-Streifen von 5m Länge mit 300 Pixeln benötigt ein 5V-Netzteil mit 90 Watt (Strom 18A). Hier muß ein echter Bolide zum Einsatz kommen!

Bild Eigentum Meanwell

Für diese hohen Ströme kann z.B. ein Meanwell Netzteil LRS-100-5 zum Einsatz kommen:

Ebay - ca 18€

Ein analoger LED-Stripe wird bei 12V betrieben und hat dementsprechend geringere Ströme, welche über den Strip fließen.

Eine 5m lange WS2812B/WS2813-Kette sollte die Betriebsspannung mindestens am Anfang und am Ende eingespeist bekommen (besser bei jedem Meter), weil sonst die Spannungsabfälle auf der Platine zu hoch werden. Zudem sind die kleinen Leiterbahnen nicht für 18A ausgelegt und können deshalb durchbrennen!

Nach dem Exkurs in die Feinheiten programmierbarer LEDs sehen wir uns jetzt die Ansteuerung des LED-Stripe durch den Wemos D1 Mini an. Hier ergibt sich gleich ein Problem: Der Wemos D1 Mini hat eine Versorgungsspannung von 3,3V, während die Stripes eine Spannung an DI von 5V erwarten. Ich habe einige Foreneinträge gesehen, wo dieses Problem nicht beachtet wurde und sich Funktionsprobleme oder Ausfälle von LEDs ergaben.

Hardware ohne Pegelwandler

Ich habe das mit einem 1m-WS2812B-Streifen mit 60 Pixeln getestet und alles lief ordentlich. Ob das Ganze mit einem 5m-Streifen und langer Zuleitung funktioniert, kann ich nicht sagen. Ebensowenig, ob diese Ansteuerung Einfluß auf die Lebensdauer hat. Ich wende diese Schaltung jedoch nicht an, weil die  LED-Stripes dabei Schaden nehmen könnten. Diese Schaltung wird übrigens vom Wemos-WS2812-Shield verwendet - also nicht ganz sauber.

Empfehlung: Diese Variante nicht verwenden!

Hardware mit Pegelwandler 74AHCT125

Jetzt kommt ein 4fach-Bustreiber zum Einsatz, der im DIL14-Gehäuse erhältlich ist. Es wird nur einer der vier Treiber benötigt:

Aufbau der Schaltung auf einem Wemos Prototypen-Shield.

Ich habe das wiederum mit dem 1m-Streifen mit 60 Pixeln getestet und alles lief ordentlich. Der zum Einsatz kommende Pegelwandler ist ein 74AHCT125. Er passt auf ein Wemos-Protoypen-Shield. Zusätzlich sollte man einen Kondensator mit 1000uF/6,3V (oder größer) zwischen LED_Streifen und Netzteil schalten, es puffert die schnellen Stromschwankungen beim Umschalten der Pixel. Die Datenleitung der Wemos-Schaltung wird über einen seriell eingebauten Widerstand von 470 Ohm zum ersten Pixel angeschossen. Dies soll Transienten verhindern.

Hardware mit Transistor-Pegelwandler

Wer den IC nicht zur Verfügung hat, kann den Pegelwandler auch mit einem Transistor BC560C aufbauen. Die Schaltung passt ebenfalls auf das Wemos-Protoypenshield. Beschrieben ist der Aufbau hier.

Belegung der Transistor-Pins.

Aufbau der Schaltung auf einem Wemos-Prototypen-Shield. Der blaue Jumper ist gesteckt, d.h. der Wemos D1 Mini wird von der Stromversorgung des LED-Stripe mit den 5V versorgt.

Über den dreipoligen Steckverbinder sind GND, +5V und Datenpin verfügbar.

 

Mögliche Fehlerquellen

Prompt unterlief mir beim Zusammenbau ein Fehler, der mich eine halbe Stunde Fehlersuche kostete. Die Schaltung wurde auf dem Steckbrett zusammengebaut und Netzteil, sowie Streifen angeschlossen - und es leuchtete nichts! Ich hatte den LED-Streifen am falschen Ende (DO) an den Wemos angeschlossen - alles blieb dunkel. Nach Umlöten der Anschlüsse lief alles bestens.

Tasmota-Anpassung

Der Quellcode von Tasmota muß nicht geändert werden.

Tasmota-Konfiguration

Nach dem Flashen ist die Webseite des Wemos D1 Mini aufzurufen und das Modul zu konfigurieren:

Als Gerätetyp wird 'Generic' ausgewählt. Nach dem Speichern kann der gelb markierte Eintrag für den Datenbus des WS2812 konfiguriert und gespeichert werden. Es wird hier der Port GPIO2 verwendet (siehe Schaltplan oben).
Bei den WLAN-Einstellungen kann man einen neuen Hostnamen vergeben und wiederum speichern.
Bei den MQTT-Einstellungen wird der Host, das Topic und Full Topic angepasst und gespeichert.
Ein Zeitplan für den LED-Stripe kann hier vergeben werden.
Für Tests kann die Telemetrieperiode auf 30, für den Betrieb auf 900 Sekunden eingestellt werden.
Hier kann der 'Friendly Name' für Amazon's Alexa eingestellt werden. Es ist die Hue-emeulation zu wählen, damit man den LED-Stripe nicht nur schalten sondern auch dimmen kann.
In der Konsole überprüft man, ob das Modul die Daten ordnungsgemäß an den MQTT Host sendet.
Auf der Hauptseite des Moduls befindet sich der Schieberegler, mit dem zwischen 0% und 100% gedimmt werden kann. Über den Button "An/Aus" kann der Stripe geschaltet werden. Weitere Regler bietet Tasmota hier nicht an, es muß über MQTT gearbeitet werden, um z.B. ein Farbschema auszuwählen.
Den Dimmer auf 100% gestellt und schon strahlt die WS2812 superhell. Da es sich nur um eine LED handelt, wird sie aus dem Wemos D1 und damit dem USB-Interface gespeist. Hängt man WS2812-Stripes mit vielen LED an, muß eine externe Spannungsversorgung mit 5V und einigen Ampere verwendet werden!

Nach der Konfiguration des Wemos D1 Mini muß noch die Anzahl der Pixels über ein Tasmota-Kommando konfiguriert werden. Bei mir leuchteten nach dem Aufsetzen nur 30 von 60 Pixeln (30 ist der Default-Wert). In der Tasmota-Konsole gibt man den Befehl:

Pixels 60

ein, wenn man 60 Pixel auf dem Streifen hat (vorher nachzählen!). Ansonsten ist die Anzahl der Pixels eures Streifens einzugeben. Diese Information wird fest im Modul abgelegt, steht also auch nach einem Reboot zur Verfügung.

OpenHAB Items

Für OpenHAB kann man die meisten Tasmota-Kommandos ausführen. Folgende Items werden definiert:

//=======================================================================================//
// File: item/WS2812stripe.items  Rev. 26.11.2018 / 16:45                                //
// (C) 2018 IoT-Systems, D-83043 Bad Aibling                                             //
// Author: Andreas Kriwanek                                                              //
//=======================================================================================//
// Project: WS2812B LED Stripe Items                                                     //
//=======================================================================================//

// Groups for charting Pow:
Group gChartWS2812     "Neopixel"     

// chart time range Basic:
Number chartPeriodNeopixel  "Auswahl"

// Items for WS2812:
//=======================================================================================//
// WS2812 (Tasmota) measurement data:
Switch dataSwitchDimmerNeopixel "Neopixels" 
    { mqtt=">[mosquitto:Test/Neopixel/cmnd/POWER:command:*:default],
            <[mosquitto:Test/Neopixel/stat/POWER:state:default]" }
Dimmer dataDimmerNeopixel "Dimmer [%s]" 
    { mqtt=">[mosquitto:Test/Neopixel/cmnd/Dimmer:command:*:default],
            <[mosquitto:Test/Neopixel/stat/RESULT:state:JSONPATH($.Dimmer)]" }
Color dataColorwheelNeopixel "Farbenrad [%.0f]" 
    { mqtt=">[mosquitto:Test/Neopixel/cmnd/HSBColor:command:*:default],
            <[mosquitto:Test/Neopixel/stat/RESULT:state:JSONPATH($.HSBColor)]" }
Number dataColorNeopixel "Farbauswahl [%.0f]" 
    { mqtt=">[mosquitto:Test/Neopixel/cmnd/Color:command:*:default],
            <[mosquitto:Test/Neopixel/stat/RESULT:state:JSONPATH($.Color)]" }
Number dataSchemeNeopixel "Farbschema [%.0f]" 
    { mqtt=">[mosquitto:Test/Neopixel/cmnd/Scheme:command:*:default],
            <[mosquitto:Test/Neopixel/stat/RESULT:state:JSONPATH($.Scheme)]" }

Number dataColor1Neopixel "Farbe R [%s]" 
    { mqtt=">[mosquitto:Test/Neopixel/cmnd/Channel1:command:*:default],
            <[mosquitto:Test/Neopixel/stat/RESULT:state:JSONPATH($.Channel1)]" }
Number dataColor2Neopixel "Farbe G [%s]" 
    { mqtt=">[mosquitto:Test/Neopixel/cmnd/Channel2:command:*:default],
            <[mosquitto:Test/Neopixel/stat/RESULT:state:JSONPATH($.Channel2)]" }
Number dataColor3Neopixel "Farbe B [%s]" 
    { mqtt=">[mosquitto:Test/Neopixel/cmnd/Channel3:command:*:default],
            <[mosquitto:Test/Neopixel/stat/RESULT:state:JSONPATH($.Channel3)]" }

// Neopixel (Tasmota) administration data:
String bootModuleNeopixel "Modul [%s]" 
    { mqtt="<[mosquitto:Test/Neopixel/tele/INFO1:state:JSONPATH($.Module)]" }
String bootVersionNeopixel "Version [%s]" 
    { mqtt="<[mosquitto:Test/Neopixel/tele/INFO1:state:JSONPATH($.Version)]" }
String bootFallbackNeopixel "Fallback Topic [%s]" 
    { mqtt="<[mosquitto:Test/Neopixel/tele/INFO1:state:JSONPATH($.FallbackTopic)]" }
String bootGroupNeopixel "Group Topic [%s]" 
    { mqtt="<[mosquitto:Test/Neopixel/tele/INFO1:state:JSONPATH($.GroupTopic)]" }
String bootWSModeNeopixel "Webserver Mode [%s]" 
    { mqtt="<[mosquitto:Test/Neopixel/tele/INFO2:state:JSONPATH($.WebServerMode)]" }
String bootHostnameNeopixel "Hostname [%s]" 
    { mqtt="<[mosquitto:Test/Neopixel/tele/INFO2:state:JSONPATH($.Hostname)]" }
String bootIPAddressNeopixel "IP-Adresse [%s]" 
    { mqtt="<[mosquitto:Test/Neopixel/tele/INFO2:state:JSONPATH($.IPAddress)]" }
String bootRestartReasonNeopixel "Restart Grund [%s]" 
    { mqtt="<[mosquitto:Test/Neopixel/tele/INFO3:state:JSONPATH($.RestartReason)]" }
String parUpdateNeopixel "Letzter Update [%s]" 

 

OpenHAB Sitemap

Die Sitemap zum Aufbau:

//=======================================================================================//
// File: sitemaps/WS2812stripe.sitemap  Rev. 26.11.2018 / 16:45	                         //
// (C) 2018 IoT-Systems, D-83043 Bad Aibling                                             //
// Author: Andreas Kriwanek                                                              //
//=======================================================================================//
// Project: Wemos D1 Mini mit WS2812/WS2813 LED Stripe   	                             //
//=======================================================================================//

sitemap WS2812stripe label="WS2812/2813 LED Stripe"
{
	Frame {
		Text item=actDate icon="time"
	}
	Frame label="WS2812 LED Stripe" {
		Switch item=dataSwitchDimmerNeopixel
		Slider item=dataDimmerNeopixel
		Colorpicker item=dataColorwheelNeopixel
		Selection item=dataColorNeopixel mappings=[1="Red", 2="Green", 3="Blue", 4="Orange", 
												5="Light Green", 6="Light Blue", 7="Amber", 
												8="Cyan", 9="Purple", 10="Blue", 11="Pink", 
												12="White"]
		Selection item=dataSchemeNeopixel mappings=[0="Single Color", 1="Wake up", 2="Cycle RGB", 3="Cycle RGB", 
												4="Random Cycle", 5="Clock", 6="Incandescent Pattern", 
												7="RGB Pattern", 8="Christmas Pattern", 9="Hanukkah Pattern", 10="Kwanzaa Pattern", 
												11="Rainbow Pattern", 12="Fire Pattern"]
		Slider item=dataColor1Neopixel
		Slider item=dataColor2Neopixel
		Slider item=dataColor3Neopixel
	}
	Frame label="Status Wemos D1 Mini" {
		Text label="Wemos D1 Mini" icon="ak_info" {
			Frame label="Wemos D1 Mini" {
				Text item=bootFallbackNeopixel
				Text item=bootGroupNeopixel
				Text item=bootWSModeNeopixel
				Text item=bootHostnameNeopixel
				Text item=bootIPAddressNeopixel
				Text item=bootRestartReasonNeopixel
				Text item=parUpdateNeopixel
				Text item=parUptimeNeopixel
				Text item=parVccNeopixel
				Text item=parWiFiAPNeopixel
				Text item=parWiFiSSIDNeopixel
				Text item=parWiFiRSSINeopixel
				Text item=parWiFiMacNeopixel
			}
		}
	}
}

// vim: syntax=Xtend

Auf der Hauptseite befindet sich der Dimmer-Regler, mit dem die Helligkeit zwischen 0% und 100% gesteuert werden kann. Um die Farbei einzustellen, gibt es die "Farbauswahl" mit 12 verschiedenen Farben und das "Farbenrad" mit frei einstellbaren Farben.

Zusätzlich können die drei LEDs RGB über drei Regler in ihrer Helligkeit eingestellt werden.

Bei der "Farbauswahl" klickt man auf den kleinen Pfeil nach unten und die Auswahl erscheint. Jetzt kann man die gewünschte Farbe anklicken.
Bei "Farbenrad" erscheint das Farbrad und man klickt mit der Maus auf den gewünschten Farbton. Je weiter außen am Durchmesser man klickt, desto intensiver werden die Farben. Mit "OK" wird das Farbrad wieder verlassen.
 
Es stehen noch drei Dimmer für die Grundfarben R, G und B zur Verfügung. Damit kann die Helligkeit der einzelnen Farben zwischen 0 und 100% eingestellt werden. Alle drei Regler auf 100% gestellt, ergibt weiß.
Über 'Status Module' erhält man eine Übersicht der Wemos D1 Parameter.

Links

Hier findet Ihr eine Menge Links zu anderen Seiten, welche sich mit der Konfiguration und dem Schaltplan befassen.

Tasmota Wiki: https://github.com/arendst/Sonoff-Tasmota/wiki/Wemos-D1-Mini-and-WS2812B-RGB-Shield
Tasmota Commands: https://github.com/arendst/Sonoff-Tasmota/wiki/Commands#ws2812-led-string-specific
Netzteil 5 V/100 W Amazon
Netzteil 5 V/15 W Amazon
LED-Streifen 5m/300Leds Amazon
LED-Streifen 1m/144 LEDs Amazon