Das LED Strip Bricklet 2.0 kann genutzt werden um LED Streifen und LED Pixel zu steuern, die mit einem WS2801, WS2811, WS2812/SK6812 (NeoPixel RGB), SK6812RGBW (NeoPixel RGBW), LPD8806 oder APA102 (DotStar) LED-Treiber ausgestattet sind. Es ist möglich 2048 RGB oder 1536 RGBW LEDs (6144 einzelne LEDs) unabhängig voneinander über ein Brick zu steuern.
Mit Hilfe der API können alle LEDs gleichzeitig mit einer festen Aktualisierungsrate von bis zu 100Hz gesteuert werden. Ein Anwendungsbeispiel findet man im Starterkit: Blinkenlights: Video
Bemerkung
Die maximale Aktualisierungsrate hängt von Typ und Anzahl der verwendeten LEDs ab (siehe hier).
Eigenschaft | Wert |
---|---|
Unterstütze LED-Treiber | WS2801, WS2811, WS2812/SK6812 (NeoPixel RGB), WS2813, WS2815,
SK6812RGBW (NeoPixel RGBW), LPD8806 und APA102 (DotStar)
|
Stromverbrauch | 64mW (12,8mA bei 5V) |
Auflösung | 8Bit pro LED |
Maximale Anzahl LEDs | 6144 (2048 RGB oder 1536 RGBW LEDs) |
Maximale Aktualisierungsrate | 100 Aktualisierungen pro Sekunde |
Abmessungen (B x T x H) | 30 x 30 x 12mm (1,18 x 1,18 x 0,47") |
Gewicht | 8.1g |
Um ein LED Strip Bricklet 2.0 testen zu können, müssen zuerst Brick Daemon und Brick Viewer installiert werden. Brick Daemon arbeitet als Proxy zwischen der USB Schnittstelle der Bricks und den API Bindings. Brick Viewer kann sich mit Brick Daemon verbinden, gibt Informationen über die angeschlossenen Bricks und Bricklets aus und ermöglicht es diese zu testen.
Als nächstes muss das LED Strip Bricklet 2.0 mittels eines Bricklet Kabels mit einem Brick verbunden werden. Anschließend kann ein LED Streifen oder LED Pixel an das Bricklet, wie weiter unten beschrieben, angeschlossen werden.
Wenn der Brick per USB an den PC angeschlossen wird sollte einen Moment später im Brick Viewer ein neuer Tab namens "LED Strip Bricklet 2.0" auftauchen. Wähle diesen Tab aus. Wenn alles wie erwartet funktioniert, kann nun ein LED Steifen gesteuert werden.
Nun kann ein eigenes Programm geschrieben werden. Der Abschnitt Programmierschnittstelle listet die API des LED Strip Bricklet 2.0 und Beispiele in verschiedenen Programmiersprachen auf.
Es werden LED Streifen und Pixel unterstützt, die mit dem WS2801, WS2811, WS2812 SK6812 (NeoPixel RGB), SK6812RGBW (NeoPixel RGBW), LPD8806 oder APA102 (DotStar) Treiber ausgestattet sind. Im Weiteren bezieht sich LED Treiber auf alle diese Treiber.
Der verwendete Treiber muss über Brick Viewer oder die set_chip_type()
Funktion des LED Strip Bricklets 2.0 eingestellt werden.
Der LED Treiber kann bis zu vier LEDs unabhängig voneinander steuern. Typischerweise werden RGB(W) LEDs, die in einem Gehäuse zusammen untergebracht sind, gesteuert. Der LED Treiber wird über einen 3- oder 2-Leiter Datenbus, bestehend aus einer Datenleitung, einer Taktleitung und Masse als Referenz, gesteuert. Jeder Treiber verfügt dazu über einen Bus-Eingang und einen Bus-Ausgang, so dass die Treiber in Serie hintereinander geschaltet werden (Daisy Chain). Jeder Bus-Eingang der LED Treiber ist entweder mit einem steuernden Gerät (wie z.B. das LED Strip Bricklet 2.0) oder mit einem Bus-Ausgang von einem vorherigen LED Treiber verbunden. Da die LED Treiber in Serie geschaltet werden müssen, darf jeder Bus-Ausgang höchstens mit einem Bus-Eingang verbunden werden. Der Bus wird beginnend beim ersten LED Treiber indiziert (API Index 0).
Das obige Foto zeigt einen typischen WS2801 LED Steifen. Jedes Modul des Streifens ist mit einem WS2801 Treiber und einer davon angesteuerten RGB LED ausgestattet. Die Signale sind jeweils auf der Eingangsseite (IN) und auf der Ausgangsseite (OUT) gekennzeichnet: 5V, CK (Clock), SD (Serial Data) und GND. Im Gegensatz zum WS2801 haben die WS2811 und WS2812 Treiber keine Taktleitung.
Das nachfolgende Bild stellt die Schnittstellen des LED Strip Bricklet 2.0 dar:
Wie im Unterstützte LEDs Abschnitt beschrieben, unterstützt das Bricklet LED Steifen und Pixel, die mit WS2801, WS2811, WS2812, SK6812 (NeoPixel RGB), SK6812RGBW (NeoPixel RGBW), LPD8806 oder APA102 (DotStar) Treiber-ICs ausgestattet sind. Die mit "Output" beschrifteten Klemmen müssen mit dem Eingang des ersten LED Treiber-ICs verbunden werden.
Die Klemme ist mit folgenden Signalen belegt:
"DAT" ist die Datenleitung zum LED Treiber Chip. Sie muss mit dem Dateneingang des ersten LED Treiber Chips verbunden werden. Leider gibt es keine allgemeingültige Beschriftung für LED Steifen und Pixel. Manchmal ist das Signal mit SD (Serial Data) oder DI (Data Input) beschriftet. Es ist ebenfalls möglich, dass nur der Ausgang beschriftet ist (z.B. DO, Data Output). Bei der anderen Seite muss es sich also folglich um den Eingang handeln.
"CLK" ist die Taktleitung zum LED Treiber Chip. Sie muss mit dem Takteingang des ersten LED Treiber Chips verbunden werden. Dieser Eingang ist typischerweise mit CLK, CK oder CI (Clock Input) beschriftet. Falls nur der Ausgang beschriftet ist findet man Beschriftungen wie CO (Clock Output).
Die WS2811, WS2812 und SK6812 Treiber-ICs haben keine Taktleitung, für diese muss die "CLK" Klemme offen gelassen werden.
"-" ist die Masseleitung. Masse ist notwendig um eine Spannungsreferenz zu den DAT und CLK Signalen zu besitzen.
"+" ist der Versorgungsspannungs-Ausgang. Es ist mit dem "+" Signal der "Input" Klemme verbunden und sollte nicht benutzt werden um LED Steifen oder Pixel zu versorgen. Die Streifen oder Pixel sollten direkt von der Stromquelle aus versorgt und dieses Signal nicht angeschlossen werden.
Die Eingangsklemme verfügt über zwei Signale:
Es existiert keine allgemeine farbliche Kennzeichnung für LED Streifen. Insbesondere verstoßen die Farben oftmals gegen Konventionen. In diesem WS2812B LED Streifen Beispiel ist der rote Draht 5V, grün die Datenleitungleitung und der weiße Draht ist Masse.
Als erstes wird die Datenleitung des ersten LED Streifens und Masse der Spannungsversorgung mit dem LED Strip Bricklet 2.0 verbunden. Dabei muss darauf geachtet werden, dass der Dateneingang des ersten Streifens mit dem Datenausgang des LED Strip Bricklets 2.0 verbunden wird.
Falls die Spannung der Versorgung gemessen werden soll, müssen die 5V der Stromversorgung mit dem LED Strip Bricklet 2.0 verbunden werden. Es können weitere LED Streifen in Reihe (hintereinander) an den ersten LED Streifen angeschlossen werden.
Es ist nicht ausreichend die LED Streifen nur an deren Anfang zu versorgen. Wir empfehlen mindestens alle 2 Meter neu einzuspeisen. Dazu kann zum Beispiel pro Einspeisepunkt ein eigenes Kabel zur Stromversorgung geführt werden. Somit wird der elektrische Widerstand reduziert und Leitungsverluste minimiert. Das nachfolgende Bild zeigt ein Beispiel.
Es existiert keine allgemeine farbliche Kennzeichnung für LED Streifen. Insbesondere verstoßen die Farben oftmals gegen Konventionen. In diesem WS2801 LED Streifen Beispiel ist der schwarze Draht 5V, grün die Taktleitung, rot die Datenleitung und der blaue Draht ist Masse.
Als erstes werden die Takt- und Datenleitung des ersten LED Streifens und Masse der Spannungsversorgung mit dem LED Strip Bricklet 2.0 verbunden. Dabei muss darauf geachtet werden, dass der Takt- und Dateneingang des ersten Streifens mit dem Takt- und Datenausgang des LED Strip Bricklet 2.0 verbunden wird.
Falls die Spannung der Versorgung gemessen werden soll, müssen die 5V der Stromversorgung mit dem LED Strip Bricklet 2.0 verbunden werden. Es können weitere LED Streifen in Reihe (hintereinander) an den ersten LED Streifen angeschlossen werden.
Es ist nicht ausreichend die LED Streifen nur an deren Anfang zu versorgen. Wir empfehlen mindestens alle 2 Meter neu einzuspeisen. Dazu kann zum Beispiel pro Einspeisepunkt ein eigenes Kabel zur Stromversorgung geführt werden. Somit wird der elektrische Widerstand reduziert und Leitungsverluste minimiert. Das nachfolgende Bild zeigt ein Beispiel.
Die Verbindung zu LED Pixeln ist sehr ähnlich zur Verbindung zu LED Streifen. Es existiert ebenfalls keine allgemeine farbliche Kennzeichnung. Im nachfolgenden Beispiel ist der rote Draht 5V, blau ist Masse, die Taktleitung (nur WS2801) ist grün und die Datenleitung ist weiß.
Die Takt- und Datenleitung vom ersten LED Pixel Bündel, sowie Masse von der Stromversorgung werden mit dem LED Strip Bricklet 2.0 verbunden. Dabei muss darauf geachtet werden, dass der Takt- (nur WS2801) und Dateneingang des ersten Pixels mit dem Takt- (nur WS2801) und Datenausgang des LED Strip Bricklet 2.0 verbunden wird. Soll die Versorgungsspannung gemessen werden, muss auch 5V von der Stromversorgung an das Bricklet angeschlossen werden. Sollen mehrere Bündel verwendet werden, so können diese in Reihe (hintereinander) an das erste Bündel angeschlossen werden.
Typischerweise besitzt jedes Pixel Bündel Drähte zur Stromversorgung am Anfang und Ende des Bündels. Diese sollten über zusätzliche Kabel mit der Stromversorgung verbunden werden. Benachbarte Drähte können auch zusammengefasst werden. Diese Maßnahme reduziert den elektrischen Widerstand und minimiert die Leitungsverluste der Stromversorgung.
Um eine flüssige Animation zu erreichen wird eine feste Aktualisierungsrate
benötigt. Eine feste Aktualisierungsrate kann einfach mit einer
korrekt konfigurierten Framelänge und dem FrameStarted
Callback erreicht
werden. Die Framelänge stellt die Zeit in ms dar, die zwischen zwei
Frames verstreicht. Der FrameStarted
Callback wird ausgelöst sobald eine
Übertragung des Frames auf die LEDs startet (Die Frames sind Double-Buffered).
Wenn als Beispiel eine Aktualisierungsrate von 20 Frames pro Sekunde
erreicht werden soll, sollte die Framelänge auf 50ms gesetzt werden.
Nachdem die Framelänge gesetzt ist, muss das erste Frame übertragen werden
(d.h. es müssen alle RGB Werte gesetzt werden). Danach muss auf den
FrameStarted
Callback gewartet werden woraufhin das nächste Frame
übertragen werden muss usw.
Wenn ein FrameStarted
Callback empfangen wird bevor alle LEDs eines Frames
gesetzt wurden, ist die Aktualisierungsrate zu hoch.
Die maximale Aktualisierungsrate hängt von Typ und Anzahl der verwendeten LEDs ab. Zum Beispiel erlauben SK6812-LEDs eine maximale Datenrate von 800 kbit/s (oder 100 kByte/s). Da eine LED 4 Byte an Daten benötigt (RGBW), können maximal 25000 LEDs pro Sekunde aktualisiert werden. Zudem benötigen die LEDs eine Reset-Zeit von 80µs zwischen Frames. Die maximale Aktualisierungsrate kann dann wie folgt berechnet werden: Die Anzahl angeschlossener LEDs geteilt durch 25000 ergibt die Dauer eines Frames (z.B. 0,02s für 500 angeschlossene LEDs). Das Reziproke der Frame-Dauer und Reset-Zeit ergibt eine Aktualisierungsrate von 1 / (0,02s + 0,0008s) ~ 48Hz. Das ist ein theoretisches Maximum.
Ein weiterer Faktor, der berücksichtigt werden muss, ist die Kommunikation zwischen PC und Bricklet. Abhängig vom Aufbau ist diese typischerweise auf ungefähr 1000 Nachrichten pro Sekunde limitiert. Eine Nachricht enthält 60 Bytes an LED-Daten, also können bei RGBW-LEDs maximal 15000 RGBW-Werte pro Sekunde transferiert werden (unter der Annahme, dass die Antworten des Bricklets deaktiviert wurden). Wenn analog zum letzten Beispiel 500 LEDs verwendet werden, ist es möglich, 30 komplette Bilder pro Sekunde zu übertragen. Die API des Bricklets unterstützt es, Teile des Bildes zu aktualisieren, was viele Optimierungen ermöglicht: Wenn zum Beispiel nur das halbe Bild pro Frame aktualisiert werden muss, sind 60 Updates pro Sekunde möglich.
Ein laser-geschnittenes Gehäuse für das LED Strip Bricklet 2.0 ist verfügbar.
Der Aufbau ist am einfachsten wenn die folgenden Schritte befolgt werden:
Im Folgenden befindet sich eine Explosionszeichnung des LED Strip Bricklet 2.0 Gehäuses:
Hinweis: Auf beiden Seiten der Platten ist eine Schutzfolie, diese muss vor dem Zusammenbau entfernt werden.
Siehe Programmierschnittstelle für eine detaillierte Beschreibung.
Sprache | API | Beispiele | Installation |
---|---|---|---|
C/C++ | API | Beispiele | Installation |
C/C++ für Mikrocontroller | API | Beispiele | Installation |
C# | API | Beispiele | Installation |
Delphi/Lazarus | API | Beispiele | Installation |
Go | API | Beispiele | Installation |
Java | API | Beispiele | Installation |
JavaScript | API | Beispiele | Installation |
LabVIEW | API | Installation | |
Mathematica | API | Beispiele | Installation |
MATLAB/Octave | API | Beispiele | Installation |
MQTT | API | Beispiele | Installation |
openHAB | API | Beispiele | Installation |
Perl | API | Beispiele | Installation |
PHP | API | Beispiele | Installation |
Python | API | Beispiele | Installation |
Ruby | API | Beispiele | Installation |
Rust | API | Beispiele | Installation |
Shell | API | Beispiele | Installation |
Visual Basic .NET | API | Beispiele | Installation |
TCP/IP | API | ||
Modbus | API |