WS2812 RGB LED Streifen per Raspberry Pi steuern

Wer nach RGB LED Streifen sucht wird wohl oder übel auf den WS2812 oder den WS2801 stoßen. Diese beiden LED Strips sind sehr unterschiedlich, aber beide mit dem Raspberry Pi ansteuerbar. Nachdem wir in einem vorherigen Tutorial letzteren bereits verwendet haben und auch in unserem Ambilight genutzt haben, geht es in diesem Tutorial um die Ansteuerung des Raspberry Pi WS2812 RGB LED Strips.

Die Modelle WS2812B sowie WS2811 sind ebenfalls kompatibel und können mit dieser Anleitung angesprochen werden.

Dazu muss gesagt werden, dass man sich von der „geringeren“ Modellnummer des WS2801 nicht täuschen sollte. Dieser hat – abgesehen vom Preis – ein paar Vorteile, auf welche unten genauer eingegangen wird.

 

Zubehör

DC Steckeradapter

Ein Steckeradapter macht das Verbinden der Spannungskabel zum Netzteil sehr einfach.

Wer schon einen RGB LED Streifen (z.B. als Ambilight) verwendet hat, kann das Zubehör daraus weiter verwenden. Dazu zählt neben einem Raspberry Pi folgendes:

Die maximale Stärke des Netzteils ist abhängig von der Anzahl der LEDs. Laut Datenblatt braucht eine LED unter Volllast (= maximale Helligkeit) ca. 60mA. Bei 5m und 30 LEDs/m sind dies 9 Ampere. Ein Netzteil, welches bis zu 10A ist also geeignet. Solltest du mehr LEDs im Einsatz haben, kann es sein, dass du mehr als ein Netzteil benötigst (dazu später mehr).

Darüber hinaus wird natürlich noch der eigentliche RGB LED Streifen vom Typ WS2812(B) bzw. WS2811 (auch NeoPixel genannt) benötigt. Diese gibt es in drei unterschiedlichen Varianten, welche sich in der Anzahl der LEDs pro Meter unterscheiden:

  1. WS2812 LED Streifen mit 30 LEDs pro Meter
  2. WS2812 LED Streifen mit 60 LEDs pro Meter
  3. WS2812 LED Streifen mit 144 LEDs pro Meter

Die Länge sollte dabei abhängig vom umzusetzenden Projekt gewählt werden. Meist sind aber 5m Rollen heruntergerechnet etwas günstiger. Meine Empfehlung ist die mittlere Version mit 60 LEDs/m. Diese haben eine höhere Dichte an Lichtern und somit höhere eine höhere Helligkeit. Vom Preis her sind diese jedoch noch unter einem vergleichbar langem WS2801 Band mit lediglich 32 LEDs

 

NeoPixel WS2812B / WS2811 vs. WS2801 am Raspberry Pi

Raspberry Pi WS2812 RGB LED Detailansicht

Mit nur einer Datenleitung muss die Frequenz höher sein, um die selbe Menge an Daten zu übertragen.

In einem vorherigen Tutorial haben wir bereits gesehen, wie man einen WS2801 RGB LED Streifen ansteuert. Dieser unterscheidet sich vom WS2812B bzw. WS2811 und hat einige Vorteile, die ich hier zunächst auflisten möchte:

  • Durch zwei Datenleitungen sind weniger Berechnungen nötig.
  • Dadurch kann ebenfalls eine höhere Frequenz erreicht werden.
  • Die Helligkeit des WS2801 ist höher.
  • Es ist gleichzeitig möglich den WS2801 zu steuern und Musik abzuspielen, was mit dem WS2812 nicht möglich ist (mehr dazu weiter unten)

Nun stellt sich die Frage, warum man dennoch am Raspberry Pi einen WS2812 RGB LED Streifen nutzen sollte, wenn der WS2801 doch einige Vorteile bringt? Die Antwort ist recht einfach: Der günstigere Preis. Im Vergleich ist ein Meter des WS2801 recht teuer, weshalb man damit eher sparsam umgehen möchte. Bei den im verhältnismäßig günstigen Preisen für mehrere Meter WS2812 Kabel, kann auch ein großes Projekt ohne riesiges Budget realisiert werden.

Allerdings muss dazu gesagt werden, dass es leider nicht möglich ist, gleichzeitig Töne per Raspberry Pi Onboard Soundkarte wiederzugeben und den Streifen zu steuern. Dies liegt daran, dass der Raspberry Pi kein Echtzeitsystem wie der Arduino ist. Für die Tonwiedergabe wird PWM genutzt, welches ebenfalls zum Steuern des WS2812 am Raspberry Pi benötigt wird. Beides gleichzeitig ist nicht möglich, weshalb jemand der auf die Soundwiedergabe angewiesen ist, eben lieber den WS2801 nehmen sollte.

 

Anschluss der NeoPixel WS2812 am Raspberry Pi

Bevor wir den Raspberry Pi mit dem WS2812 LED Strip verbinden, machen wir das Netzteil fertig. Wenn dein Streifen weniger als 20-30 LEDs hat, ist eine externe Stromversorgung nicht zwingend nötig. Sollte er mehr LEDs haben, reicht der Strom des Pi’s allerdings nicht mehr und ein Netzteil ist erforderlich.

Beim Netzteil selbst kommt es auf die gewählte Art an. Bei einem Netzteil mit Adapter (Einsteiger) muss lediglich der DC Adapter angeschlossen werden, woran im nächsten Schritt die Spannungskabel des WS2812B kommen. Hast du diese Methode gewählt, kannst du zum nächsten Punkt springen. Ein Schaltnetzteil (für Erfahrene) muss allerdings etwas aufwändiger versorgt werden.

Vorher allerdings noch der Hinweis: Beim Arbeiten mit 230V ist Vorsicht geboten, da Lebensgefahr besteht! Lass dir von einem Elektriker helfen oder greife auf die sichere Version des normalen Netzteil zurück! Führe alle Arbeiten bei getrennter Netzverbindung durch. Solltest du keine / nicht genug Erfahrung haben, arbeite bitte mit dem normalen Netzteil!

Zunächst brauchen wir ein gewöhnliches Stromkabel, welches 10A verträgt. Meist ist auf der Unterseite des Steckers ein entsprechender Hinweis (230V, 10A). Dieses trennen wir vorsichtig mit einem Teppichmesser/Abisolierzange o.ä. auf. Darin sind zwei bzw. drei Kabel mit unterschiedlichen Farben enthalten. Auch diese Kabel müssen vorsichtig abisoliert werden.

Aufgeschnittenes Netzkabel mit abgetrennter Isolation

Netzkabel mit abgetrennter Isolation und zwei inneren Kabeln (schwarz => L, blau => N).

Mein Kabel hat nur zwei innere Kabel. Zum Anschluss an das Schaltnetzteil, dienen die Farben der inneren Kabel als Orientierung. Das Schaltnetzteil hat die Anschlüsse „L“, „N“ und „PE“ bzw. ein Erdungssymbol. Noch einmal der Hinweis: Sei vorsichtig!

  • Das schwarze bzw. braune innere Kabel kommt an den Außenleiter „L“.
  • Das blaue innere Kabel kommt an den Neutralleiter „N“.
  • Das grün-gelbe innere Kabel kommt an den Schutzleiter „PE“ bzw. Erdungssymbol.
Multimeter am Schaltnetzteil des WS2801 LED Strip

Die Spannung sollte ca. 5V betragen.

Nachdem die Feststellschrauben angezogen sind, kann das Netzkabel in die Steckdose gesteckt werden und die Spannung am Netzteil testweise mit einem Multimeter gemessen werden. Dies ist zwar keine Pflicht, aber kann als Absicherung gemacht werden. Dabei wird VCC an V+ angeschlossen und GND an COM. Sollte die Spannung nicht exakt 5V betragen, ist dies kein Problem.

Theoretisch ist es auch möglich den Raspberry Pi aus diesem Netzteil mit Strom versorgen. Dies haben (laut Kommentaren im WS2801 Tutorial) auch einige User gemacht. Aus Platzgründen wird darauf hier aber nicht eingegangen.

 

Verbindung zwischen Raspberry Pi und WS2812 NeoPixel Streifen

Ist das Netzteil soweit eingerichtet, schließen wir den Raspberry Pi an den WS2812 RGB LED Streifen an. Das (Schalt-)Netzteil muss vorher vom Strom getrennt werden.

Da nur eine Datenleitung vorhanden ist, brauchen wir auch nur einen Pin (GPIO 18). Wichtig ist, dass die Masseanschlüsse des Raspberry Pi’s und des Schaltnetzteil verbunden werden, allerdings nicht die 5V Spannungen! Insgesamt führen nur zwei Kabel vom Raspberry Pi zum WS2812 LED Strip: GPIO 18 (an DIN) und GND an COM des Netzteils sowie GND des Streifens.

Raspberry Pi WS2812 Steckplatine

Schematische Verbindung zwischen Raspberry Pi, WS2812 und dem externen Netzteil

Je nach Länge des LED Streifen sollte die externe Stromverbindung an mehreren Orten angebracht werden. Im Idealfall wird ca. jeden Meter VCC und GND mit dem Schaltnetzteil parallel verbunden (sodass viele Kabel zum Netzteileingang führen).

Hinweis: Bei Längen unter 1m kann das Netzteil auch weggelassen werden und die Eingangsspannung vom 5V Pin des Raspberry Pi’s kommen.

 

Vorbereitung & Installation

Bevor wir dir Raspberry Pi Bibliothek für die WS2812 LEDs installieren, müssen einige Vorbereitungen getroffen werden:

  1. Die Paketquellen werden aktualisiert:
    sudo apt-get update
  2. Wir installieren die benötigten Pakete (mit Y bestötigen):
    sudo apt-get install gcc make build-essential python-dev git scons swig
  3. Die Audioausgabe muss deaktiviert werden. Dazu bearbeiten wir die Datei
    sudo nano /etc/modprobe.d/snd-blacklist.conf

    Hier fügen wir folgende Zeile hinzu:

    blacklist snd_bcm2835

    Anschließend wird die Datei durch Drücken von STRG+O gespeichert und mit STRG+X wird der Editor geschlossen.

  4. Außerdem müssen wir die Konfigurationsdatei bearbeiten:
    sudo nano /boot/config.txt

    Unten befindet sich Zeilen mit folgendem Inhalt (mit STRG+W kannst du suchen):

    # Enable audio (loads snd_bcm2835)
    dtparam=audio=on

    Diese untere Zeile wird mit einer Raute/Hashtag # am Zeilenanfang auskommentiert: #dtparam=audio=on

  5. Wir starten das System neu
    sudo reboot

 

Nun können wir die Bibliothek laden.

git clone https://github.com/jgarff/rpi_ws281x

In diesem Verzeichnis sind nun einerseits einige C Dateien enthalten, welche einfach kompiliert werden können. Der Beispielcode dafür ist gut verständlich. Damit wir diese in Python verwenden können, müssen wir sie kompilieren:

cd rpi_ws281x/
sudo scons

Wir interessieren uns allerdings in diesem Tutorial vor allem für die Python Variante und wechseln daher in den Python Ordner:

cd python

Hier führen wir nun noch die Installation aus:

sudo python3 setup.py build
sudo python3 setup.py install
sudo pip3 install adafruit-circuitpython-neopixel

Damit können wir im nächsten Schritt bereits einen ersten Test ausführen.

 

Testen des Raspberry Pi WS2812 RGB LED Streifen

Im Example-Ordner sind einige Beispieldateien, womit die LED Streifen getestet werden können. Darüber hinaus können sogar zwei WS2801 LED Streifen unabhängig voneinander per Raspberry Pi gesteuert werden (multistrandtest.py).

Wir interessieren uns aber zunächst für die einfache Version. Dafür müssen wir vor dem Test noch ein paar Angaben vervollständigen und bearbeiten daher die Beispieldatei.

sudo nano examples/strandtest.py

Die Datei sieht folgendermaßen aus, wobei wir in erster Linie LED_COUNT (Anzahl der anzusprechenden LEDs) und LED_PIN (bei uns 18) angeben müssen.

Anschließend speichern wir (STRG+O) und kehren zurück ins Terminal (STRG+X). Nun lässt sich die Datei ausführen (die Übergabe des Pfads zu den kompilierten Dateien ist wichtig):

sudo python3 examples/strandtest.py

Die LEDs des WS2812 Streifen sollten wie im unteren Video aufleuchten. Im oberen Code sind nur einige Effekte (Regenbogen, etc.) definiert, allerdings können auch problemlos analog dazu weitere Effekte erstellt werden (wer möchte kann gerne seinen Code für Effekte als Kommentar posten).

 

Weiteres

Pimoroni pHAT für Raspberry Pi WS2812B

Der pHAT ist für Raspberry Pi 3 Model B und Zero erhältlich.

Die WS2812 NeoPixel LEDs werden auch in vielen anderen (hauptsächlich für Arduino konstruierten) Projekten genutzt, weshalb man sicherlich einige davon auch portieren kann.

Darüber hinaus hat der Raspberry Pi Shop Pimoroni einen Aufsatz für das Model B (ab Version B+) und den Raspberry Pi Zero hergestellt und nennt diesen Unicorn pHAT. Dieses RGB LED Matrix nutzt allerdings eine eigene Software zur Bedienung.

Die von mir genutzte Bibliothek wird übrigens auch von einem anderen Entwickler als Serveranwendung angeboten.

 

174 Kommentare

  1. Beim Testen der LEDs kommt folgender Fehler (nutzte einen Pi 1 Rev 2, falls relevant):

    Traceback (most recent call last):
    File „examples/strandtest.py“, line 8, in
    from neopixel import *
    File „/home/pi/rpi_ws281x/python/neopixel.py“, line 5, in
    import _rpi_ws281x as ws
    ImportError: No module named _rpi_ws281x

    Bitte um Hilfe, such bereits vergeblich mit Google 🙁

    Antworten