Raspberry Pi WS2801B RGB LED Streifen anschließen und steuern

GPIO, Projekte

Raspberry Pi: WS2801 RGB LED Streifen anschließen und steuern

Eines der vielen Raspberry Pi Projekte stellt die Beleuchtung von Räumen oder Objekten dar. Besonders dafür geeignet sind LED Streifen, wo viele einzelne LEDs aneinander gereiht sind und jede einzelne Diode alle RGB Farben darstellen kann. Damit können einige Projekte wie Raumbeleuchtung, Ambilight oder z.B. eine Weihnachtsbaumbeleuchtung realisiert werden. Die Effekte der farbenfrohen Lichter sind beeindruckend.

In diesem Artikel wird die generelle Benutzung vom WS2801B am Raspberry Pi gezeigt. Dabei erstellen wir ein Beispiel, in dem LEDs des Streifens gesetzt werden (Regenbogenfarben) und die Helligkeit gedimmt wird. Im Video am Ende des Tutorials siehst du das ganze noch einmal in Aktion.

 

Zubehör

Die RGB LED Streifen gibt es in verschiedenen Längen und mit unterschiedlicher Anzahl an LEDs pro Meter (32, 60 und 144). Alle diese Streifen benötigen eine Eingangsspannung von 5V.  Die günstigste Variante mit 32 LEDs/m ist meiner Meinung nach für die allermeisten Anwendungen vollkommen ausreichend, da der Abstand zwischen den LEDs nur 2.5 cm beträgt:

Dabei gibt es auch Versionen, welche Staub- und Wasserfest (IP67) sind. Jede der einzelnen LEDs hat einen Stromverbrauch von ca. 60 mA. Bei einem Meter sind das knapp 2A. Dies ist einiges mehr, als die GPIOs des Raspberry Pi’s liefern können. Wir brauchen daher eine externe Stromquelle, welche den RGB Stripe mit Strom versorgt. Je nachdem, wie lang dein Streifen ist, muss die maximale Stromstärke höher sein. Bei 5 Metern sollte das Netzteil also 10A bereitstellen können.
Du hast dabei die Auswahl zwischen zwei Möglichkeiten:

DC Steckeradapter

Mit einem Steckeradapter und Netzteil können sehr einfach Plus- und Minuspol an die LED Streifen verbunden werden.

Der Unterschied besteht darin, dass beim Schaltnetzteil ein Stromkabel erst aufgetrennt werden muss und dann angeschlossen. Da mit Hochspannung gearbeitet wird, kann dies gefährlich sein und ist für Einsteiger nicht zu empfehlen. Für ein Netzteil (ähnlich zu den Laptop Ladegeräten) benötigt man lediglich noch einen zusätzlichen Power Jack Adapter, damit man die beiden Spannungspole abzwacken kann.

Zu guter letzt werden noch Jumper Kabel und ein Breadboard benötigt.

 

WS2801B vs. WS2812B

Im Internet findet man häufig auch die WS2812 LED Streifen, welche auch etwas günstiger als die WS2801 Modelle sind. Allerdings eignen diese sich nicht all zu gut für den Raspberry Pi. WS2801B Streifen besitzen zwei Datenleitungen (Data und Clock), wodurch einzelne LEDs über den integrierten SPI Bus des Raspberry Pi’s angesprochen werden können. Anders sieht dies bei den WS2812B Modellen aus. Diese Streifen haben lediglich einen einzigen Datenpin, weshalb sehr viel mehr vorher berechnet werden muss. Außerdem würde dafür ein Arduino o.ä. als Zwischenstation benötigt werden. Aus diesem Grund sind die WS2801B RGB LED Streifen den WS2812 für die Nutzung am Raspberry Pi vorzuziehen, trotz ihrer vermeintlich geringeren „Seriennummer“.

 

Schaltnetzteil für WS2801 anschließen

Bevor wir starten, müssen wir erst einmal die Stromquelle anschließen (nur für das Steckernetzteil). Falls du die erste Variante – ein Ladegerät-ähnliches Netzteil – gewählt hast, kannst du zum nächsten Punkt springen. Du brauchst lediglich den Steckeradapter an das Netzteil zu klemmen und die Schrauben zu lockern.

Netzkabel für Raspberry Pi WS2801

Achte darauf, dass das Netzkabel auch 10A verträgt.

Vorerst der Hinweis: Arbeiten mit 230V Spannung kann tödlich sein! Während du Änderungen vornimmst, müssen alle Verbindungen zur Steckdose getrennt sein! Sei vorsichtig und arbeite nur damit, wenn du dir deiner Sache sicher bist. Falls dies nicht der Fall ist, rate ich zum erster genannten Netzteil.

Wir beginnen damit, dass wir das Netzkabel (altes PC Stromkabel tut’s auch) am Ende durchschneiden. Im Inneren befinden sich zwei bzw. drei Kabel. Diese müssen vorsichtig um ca. 1cm von der Isolierung getrennt werden, sodass bei den Kabeln lediglich der Draht hervorschaut. Das Schaltnetzteil hat auf der linken Seite drei Anschlüsse. Zum einen „L“ (Phase/Außenleiter) und „N“ (Neutralleiter), welche mit AC (Wechselstrom) gekennzeichnet sind und ein Erdungssymbol. Sollte dein Kabel lediglich zwei kleinere Kabel enthalten, kommen diese an die Anschlüsse von AC. Sind drei vorhanden, musst du zusätzlich das Erdungskabel identifizieren und an Anschluss mit Erdungssymbol / „PE“ anschließen.

Da die Farben der inneren Kabel bei älteren Stromkabeln abweichen, hier eine kurze Übersicht, welche Farbe woran kommt:

  • Das schwarze bzw. braune Kabel kommt an den Außenleiter „L“.
  • Das blaue Kabel kommt an den Neutralleiter „N“.
  • Das grün-gelbe Kabel kommt an den Schutzleiter „PE“ bzw. Erdungssymbol.
Aufgeschnittenes Netzkabel mit abgetrennter Isolation

Aufgeschnittenes zweiadriges Netzkabel mit abgetrennter Isolation.

Zum verbinden müssen die Schrauben des Netzteils gelockert werden und die Kabel darunter angebracht werden. Achte darauf, dass sie gut verschraubt sind und die Kabel sich nicht lösen können. Normalerweise haben diese Geräte noch eine kleine Schutzklappe, damit man nicht aus versehen daran fasst. Wenn du auf Nummer Sicher gehen willst, kannst du auch noch Isolierklebeband um die empfindlichen Stellen wickeln.

Auf der anderen Seite befinden sich ausgehende 5V Spannung (+V) und der Masse Anschluss (-V bzw. COM). Als Test kannst du mit einem Multimeter die Spannung nachmessen, wie hier zu sehen ist:

Multimeter am Schaltnetzteil des WS2801 LED Strip

Die Ausgangsspannung des Schaltnetzteils sollte ca. 5V betragen.

 

Verkabelung zwischen Raspberry Pi, WS2801 und Stromquelle

Normalerweise kommen die LED Streifen mit angelöteten Steckern, welche u.ä. zum Verbinden von mehreren WS2801 Streifen gedacht sind. Daneben ist i.d.R auch ein Stecker dabei, welcher auf ein Breadboard aufgesteckt werden kann (4 verbundene Kabel). Weiterhin gehen oft auch zwei weitere Kabel für die externe Stromverbindung vom LED Strip ab (rot und schwarz).

Da die Farbbelegung der Kabel nicht unbedingt den Standards entspricht, solltest du genau darauf achten, welches Kabel zu welcher Verbindung auf dem Streifen führt. Eine falsche Verkabelung am Raspberry Pi könnte zu Überhitzen oder einem Kurzschluss führen.

WS2801 RGB LED Streifen

Die LEDs auf einem Meter sind nummeriert (1 – 32). Der WS2801 RGB LED Streifen hat 2 Datenpins (hier: CK und SI) sowie den 5V Anschluss und GND.

Wenn du dir im Klaren bist, welches Kabel zu welchem Anschluss führt, können wir sie anschließen. Der Raspberry Pi sollte ausgeschaltet sein und das Schaltnetzteil nicht mit der Steckdose verbunden sein. Die Kabel werden folgendermaßen angeschlossen:

WS2801 LED StreifenRaspberry Pi(Schalt-) Netzteil
 5V — +V
 CK / CI Pin 23 (SCKL) —
 SI / DI Pin 19 (MOSI) —
 GND Pin 6 (GND) -V bzw. COM

Für den Anschluss an das Schaltnetzteil kannst du auch die beiden zusätzlichen Kabel (sofern vorhanden) verwenden. Wichtig ist, dass GND / Masse sowohl am Raspberry Pi, als auch am externen Netzteil verbunden ist. Schematisch sieht der Aufbau nun folgendermaßen aus:

Raspberry Pi WS2801B RGB LED Stripe Schaltplatine

 

 

Raspberry Pi WS2801 RGB LED Bibliothek installieren

Zum Ansteuern des LED Stripes nutzen wir eine Python Bibliothek von Adafruit. Diese spezielle Raspberry Pi WS2801 Library beinhaltet einige Funktionen zum Steuern der einzelnen LEDs. Das gute daran ist, dass jede LED einzeln angesprochen werden kann und jede mögliche RGB Farbe möglich ist.

Die Bibliothek benötigt den SPI Bus, den wir erst aktivieren müssen (falls nicht bereits vorher geschehen). Dazu rufen wir folgendes auf:

sudo raspi-config

Unter „Advanced Option“ findet sich ein Punkt für „SPI“. Diesen aktivieren wir und beenden das Konfigurationsmenü.

Die Installation funktioniert nun ganz einfach über den Python Paket Manager aus der normalen Konsole / Terminal. Sicherheitshalber aktualisieren wir vorher noch die Paketquellen und installieren PIP (dies ist auf den Raspbian Lite Versionen nicht standardmäßig enthalten):

sudo apt-get update
sudo apt-get install python-pip -y
sudo pip install adafruit-ws2801
Raspberry Pi WS2801B Weihnachtsbaumbeleuchtung

Weihnachtsbaum Beleuchtung mit dem WS2801.

Falls du eine Lite Version hast, bzw. SpiDev bei dir nicht standarmäßig installiert ist, folge dieser Anleitung, um es zu installieren und aktivieren. Auf aktuellen Raspbian Versionen sollte es allerdings bereits vorinstalliert sein.

Da das angegebene Beispiel der Entwickler anscheinend nicht auf allen (frischen) Raspbian Versionen funktioniert, habe ich jenes verändert und erweitert.

 

 

Beispielcode zum Helligkeit dimmen der WS2801 LEDs

Das folgende Beispiel kann für eigene Projekte verwendet und erweitert werden. Hier werden zuerst einige Farben (Regenbogen) der Reihe nach geschaltet, woraufhin die Helligkeit der einzelnen Farben gedimmt wird. Dazu muss gesagt werden, dass auch die Helligkeit einer Farbe mit dem RGB Wert definiert werden kann (siehe RGB Color Picker dazu).

Erstellen wir nun also eine Datei:

sudo nano ws2801_example.py

Folgender Inhalt sollte eingefügt werden:

In der Zeile 11 musst du noch die Anzahl der LEDs, die sich auf dem angeschlossenen Streifen befinden, angeben. Bei einem Meter Länge sollten dies 32 sein. Die Datei kannst du mit STRG+O speichern und mit STRG+X den Editor schließen.

Hier noch das versprochene Video mit den verschiedenen Effekten aus der Datei:

 

Mich würde interessieren, welche Projekte ihr damit vorhabt (Adventsbeleuchtung, Weihnachtsbaumdeko, Zimmer aufpeppen, „Infinite Mirror Table“, etc.)? Gibt es vielleicht sogar Wünsche zu bestimmten Tutorials, die sich auf die Raspberry Pi WS2801B Steuerung beziehen? Ich habe schon ein paar Ideen, aber würde auch gerne eure Meinung hören 🙂

 

, , , , , , , , ,


74 Kommentare

  1. Stefan sagt:

    Danke für dein weiteres sehr gutes Tutorial.

    Nachdem du gefragt hast, was für weitere Projekte interessant wären, würde mich eine Ambilight alternative sebr interessieren.

    Viele Grüße
    Stefan

  2. Holger sagt:

    Moin Moin, sehr schönes Tutorial. Ich habe mit den LEDs Ambilight am TV umgesetzt. Sehr geil.

  3. Christian sagt:

    Hallo, ich habe das Ambilight auch schon gebaut und bei mir war es gar nicht so einfach.
    Ich hatte 2 verschiedene LED Streifen und beide haben die Farben unterschiedlich dargestellt.
    Ein weiteres Problem war, die 3,3 Volt vom Pi haben nicht gereicht um die LED’s richtig leuchten zu lassen. Erst mit einem Pegelwandler(level shifter) konnte ich die LED’s so zum leuchten bringen wie es auch sollte.
    Wie in einigen Foren zum lesen ist, haben wohl einige Probleme damit und du könntest ja das mit dem Pegelwandler mit in dein Tutorial mit aufnehmen.

    MfG Chris

  4. Ingo sagt:

    Mal wieder geil, Dein Tut! Danke, danke, danke!!

    So schnell kann ich das alles gar nicht nachbauen!!!

  5. Tobias sagt:

    Hallo,

    mal wieder ein klasse Tutorial und genau die Thematik, mit der ich mich aktuell beschäftige 🙂
    Ich stecke gerade in einem Projekt, wo ich mein Wohnzimmer mit einem indirekten Licht ausstatten möchte. Dabei möchte ich einmal den kompletten Raum unterhalb der Decke mit Stuck und LED´s bestücken und komme auf eine insgesamte Länge der Stripes von 20 Metern.
    Ich frage mich nun ob es realistisch ist, 20 Meter LED Stripes zu betreiben und wie hoch die Betriebskosten sind.
    In deinem Artikel schreibst du:

    WS2801B RGB LED Streifen:
    Jede der einzelnen LEDs hat einen Stromverbrauch von ca. 60 mA. Bei einem Meter sind das knapp 2A. Bei 5 Metern sollte das Netzteil also 10A bereitstellen können.

    Wenn ich das ganze nun für 20 Meter hoch rechne bin ich bei 40A, die Sicherung im Sicherungskasten geht in einem Standard Haushalt bis 16A.
    Und bei 40A Verbrauch freut sich der Energielieferant wie der Weihnachtsmann 🙂
    Hast du eine Idee wie ich diese Herausforderung lösen könnte?

    Viele Grüße
    Tobias

    • Felix sagt:

      Die 60mA beziehen sich natürlich nur auf die Maximallast. Wenn du nicht die volle Helligkeit braucht, ist die Last geringer.
      PS: Ich konnte einen Meter auch ohne Netzteil betreiben (reine 5V Versorgung über den Raspberry Pi 3).

    • Andreas Maier sagt:

      Ich kann dich beruhigen:
      40 A bei 5 V sind 200 W , dies entspricht bei 230V knapp 1A . (ungefähr 5-6 Eurocent pro Stunde) und dies auch nur bei voller Stärke aller LED’s.

  6. Holger sagt:

    Tobias, das Netzteil liefert 10A zieht selbst aber nicht. Von daher keine Angst was den Stromverbrauch angeht.

  7. RiNi sagt:

    Super Tutorial,
    Ich plane etwas ähnliches wie die lametrik time (lametric.com) und möchte dies mit den ws2801 led streifen machen. : D

  8. Justin sagt:

    Hallo,
    ich habe mal eine Frage. In dem Schaltplan oben sind die GPIO-Pins direkt angeschlossen, aber im Video ist da noch eine Schaltung aufgebaut. Was ist das nun für eine Schaltung?

    Viele Grüße
    Justin

    • Felix sagt:

      Nein, das ist keine zusätzliche Schaltung, sondern einfach nur eine „Verbindung“. Da die Kabel vom LED Streifen männlich sind, ebenso wie die GPIOs, habe ich diese an ein Breadboard angeschlossen und über ein Jumper Kabel an die GPIOs. Das Bild soll nur den schematischen Aufbau zeigen.

  9. Ingo sagt:

    Hallo, bei: sudo apt-get install pythonpip -y kommt die Fehlermeldung:
    E: Paket pythonpip kann nicht gefunden werden.

    kannst du mir weiter helfen?

    Gruß Ingo

  10. Ingo sagt:

    Danke, hatte es auch gerade herausgefunden… ?

  11. don sagt:

    Ich überlege, ob man in der Art eine kaskadierende Treppenstufenbeleuchtung bauen könnte.
    Unten und oben jeweils mit Bewegungsmelder.
    Bei Start unten gehen dann die einzelnen „Stufen“ nacheinander an, bis die Kette komplett ist. Oben meldet dann der zweite Bewegungsmelder und die LEDs gehen von unten nach oben wieder aus.
    Oder auch einfach nur zeitgesteuert. Wenn der Trigger ausgelöst hat, dann bleibt das Licht 2 Minuten AN.
    Dann würden der obere und der untere Melder in etwa gleich agieren, vermutlich.

    Kann man das LED-Band einfach trennen und mit Leitungen neu verlöten?

    • Felix sagt:

      Hey don,
      coole Idee! Ich plane demnächst ein Tutorial zu Druck- bzw. Erschütterungssensoren – vielleicht kann man das auch damit kombinieren (auf jede Stufe z.B.).
      Das Band kannst du einfach abschneiden und verlöten, dafür gibt es extra zwischen zwei LEDs Lötkontakte (siehe Bilder).

  12. Michael sagt:

    Hallo Felix,
    besten Dank für das coole Tut.
    Hab heute das Material bekommen, 5m LED und Netzteil.
    Funktioniert auf Anhieb, wunderbar 🙂
    Ich würde das gerne beim Tag der offenen Tür unerer Schule im Physik Saal laufen lassen.
    Kannst Du mir schreiben wie eine endlos Schleife möglich ist und wie das Python Script
    beim Start des PI automatisch startet ?
    mfG
    Michael

  13. Michael sagt:

    Hallo Felix,
    Edlosschleife läuft schon 🙂
    Autostart kommt dann die Tage.
    mfG
    Michael

  14. Ingo sagt:

    Hi Felix,
    Mein LED-Streifen benötigt 12V. Ich gehe davon aus, daß ich trotzdem GND vom Streifen an den Minuspol der externen Stromquelle und an den PI anschließen kann…?
    Gruß Ingo

    • Felix sagt:

      Bist du sicher, dass es ein WS2801 ist? Die brauchen eigentlich immer nur 5V.

    • Ingo sagt:

      Es ist ein Lichtband von Paul Neuhaus:
      https://www.amazon.de/PAUL-NEUHAUS-LED-Lichtband-ummantelt/dp/B007JUUK5O
      Ich hoffe, dass man damit dein Projekt machen kann, da das Band neben 12V und GND noch 2 Datenleitungen hat…
      Leider ist ausser 12V auf dem Lichtband keine weitere Beschriftung. GND werde ich noch ausmessen können. Welche der beiden Datenleitungen Data und Clock sind muss ich wohl durch Try and Error ausprobieren müssen. Ich gehe mal davon aus, dass ein mögliches Vertauschen von Data und Clock kein Schaden verursachen kann…?
      Gruß Ingo

    • Felix sagt:

      Aus der Beschreibung geht es nicht wirklich hervor, welche ICs genutzt werden. Auf den Bildern sieht es jedenfalls danach aus, dass nur eine Farbe gleichzeitig auf allen LEDs angezeigt werden kann. Da wäre die Frage aber, wieso es zwei Datenleitungen gibt. Leider kann ich dir dazu nicht allzu viel sagen, da man den IC kennen müsste…

    • Ingo sagt:

      Ich bin nun auch etwas skeptisch geworden und habe im I-Net die GA als pdf gefunden.
      Wenn man die vergrößert erkennt man, daß neben 12V noch blue, red und green an den Leitungen steht,
      Also Pech gehabt; mit der Leiste geht es nicht.
      Schade…

  15. Björn sagt:

    Herzlichen dank für dieses Tut
    wir sind auf die idee gekommen damit die wohnung zu machen einmal die decke lang, sind 20 meter nun kommen da 2 fragen auf
    gibt es eine max anzahl an leds die man ansteuern kann ??
    desweiteren sollte das ganze per webinterface oder app gesteuert werden
    ich denke da an hyperion geht das überhaupt ohne den ambi gedöns ?

    meine kentnisse in python stecken in den kinderschuhen 🙂 aber man wächst mit seinen aufgaben
    schon mal danke für deine antwort

    • Felix sagt:

      Hallo Björn,
      wenn ihr nur eine Deckenbeleuchtung haben wollt, ist Hyperion meiner Meinung nach etwas too much. Ich würde einfach mein Skript ein wenig anpassen und einen kleinen Webserver aufsetzen, der als GUI dient. Ein Tutorial zu einem sehr einfachen Node.JS Server kommt (vorrausichtlich) nächste Woche.
      LG, Felix

  16. Micha sagt:

    Danke für das Tutorial, blinkt super 🙂

  17. Ingo sagt:

    Ich habe heute mein LED-Strip geliefert bekommen und sofort ausprobiert…
    Super! Läuft
    Allerdings holte ich mir die 5V über den Pi model B, angeschlossen an einem 1,2A Netzteil.
    Da ist bei 14 LED’s Schluss. Gibt man bei PIXEL_COUNT = 15 ein, friert der Pi ein ?

    Gruß Ingo

    • Felix sagt:

      Der Pi friert ein, weil die anderen LEDs wahrscheinlich dennoch Strom ziehen, was ihn überlastet. Ich rate zu einem externen Netzteil 🙂

  18. Ingo sagt:

    Ja, aber zum testen und spielen hat’s gereicht..

    Habe mir schon ein Netzteil aus einem alten Computer herausgebaut.
    Eigentlich könnte ich die 5V mit dem ich die LED’s versorge auch für den Pi nehme indem ich auf den 5V Pin gehe, oder?

  19. Ingo sagt:

    OK, was spricht gegen ein PC-Netzteil? ❓

    • Ingo sagt:

      Und wo bzw. kann ich irgendwo die Helligkeit verändern?

    • Felix sagt:

      Das steht doch im Abschnitt „Beispielcode zum Helligkeit dimmen der WS2801 LEDs“ dieses Tutorials inkl. Code und Beispielvideo 😉
      Die Helligkeit ist über den RGB Farbwert definiert.

    • Ingo sagt:

      OK, ich habs geblickt. Ich dachte, man könnte mit einer Wertänderung die Grundhelligkeit aller LED’s komplett reduzieren.

      Wie ist das mit dem PC-Netzteil?

      Gruß Ingo

    • Felix sagt:

      Also abgesehen davon, dass ein PC Netzteil für ganz andere Anwendungen ausgelegt ist, wirst du es zum einen nicht so einfach anschalten können und außerdem haben auch die 5V Anschlüsse einen Maximalstrom. 5 oder gar 10A stehen selbst bei Parallelschaltung mehrerer 5V IDE/SATA Stromanschlüssen nicht zur Verfügung. Auch preislich hat es keinen Vorteil (PC Netzteil kostet ca. 30€ aufwärts, 5V Netzteil mit 5 oder 10A gibt es ab 15€).

  20. Thomas sagt:

    Hallo, ich bin bei der Suche nach einem Wakeup-Light auf deine Anleitung gestoßen.

    Ich habe schon einige Anleitung mir für ein Wakeup-Light angesehen, aber irgendwie wird es immer recht komplex.

    Daher meine Frage, könnte man das LED Stripe auch zeitgesteuert schalten und mit einer Dimmfunktion, sodass über einen Zeitraum von 30 Minuten die maximale Helligkeit erreicht wird?

    Könntest du dies vielleicht noch ergänzen in der Anleitung?

    Vielen Dank und viele Grüße

    Thomas

    • Felix sagt:

      Hallo Thomas,
      ja sowas ist möglich un in ähnlicher Form auch von mir geplant (sobald Zeit ist): Der Trick dabei ist, die Helligkeit langsam zu dimmen (siehe entsprechender Abschnitt). Wenn deine Farbe z.B. Rot sein soll (255,0,0) und du nach 30min bei voller Lichtstärke sein willst, müsstest du ca. alle 7Sekunden (255*7sek ~ 30min) die Helligkeit um einen Schritt erhöhen. Natürlich sind auch andere Funktionen als meine lineare denkbar.

    • Thomas sagt:

      Hi Felix,

      vielen Dank für deine Antwort.

      Wie genau müsste der Code dann aussehen, und wie kann ich die nicht benötigten Funktionen löschen oder deaktvieren, ohne dass ich einen Fehler beim Ausführen erhalte?

      Vielen Dank und viele Grüße

      Thomas

    • Felix sagt:

      Schau dir mal die Funktion brightness_decrease an. Was du suchst ist quasi das Gegenteil (statt von hell auf dunkel -> von dunkel auf hell). Die Anpassungen sollten schnell gemacht sein (Zeitrahmen natürlich nicht vergessen zu ändern). Ansonsten kannst du natürlich alle Funktionen, die du nicht aufrufst, löschen.
      LG, Felix

    • Thomas sagt:

      Hallo Felix,

      Ich hab die Dimmfunktion soweit hinbekommen, jedoch versuche ich jetzt noch einen Fade von rot zu weiss. Dazu habe ich folgendes versucht, jedoch bleiben die LEDs jetzt aus:

      def brightness_decrease(pixels, wait=0.15, step=1):
          for j in range(int(256 // step)):
              for i in range(pixels.count()):
                  r, g, b = pixels.get_pixel_rgb(i)
      #       if j100:
                  r = int (max(100, r + step))
                  g = int (max(0, g + step))
                  b = int (max(0, b + step))
      
                  pixels.set_pixel(i, Adafruit_WS2801.RGB_to_color( r, g, b ))
              pixels.show()
              if wait < 255:
                  time.sleep(wait)

      Hast du eine Idee wo der Fehler liegen könnte?

    • Felix sagt:

      Du musst die Steps für r,g,b unterschiedlich setzen: Wenn du von #FF0000 (rot) zu #FFFFFF (weiß) willst, dann verändert sich Rot nicht. Wenn du also z.B. in 255 Schritten dimmen willst, dann muss in jedem der Grün und Blau-wert um 1 erhöht werden.

  21. Ingo sagt:

    kleine Info:

    meine 5 Meter WS2801 mit 32 LED/Meter = 160 LED’s verbrauchen bei
    vollem (Dauer)weiß (255, 255, 255) etwa rund 3,2A
    Gruß Ingo

  22. Bernd sagt:

    Hallo,
    hab da mal eine Frage…..habe Hardwaremässig alles aufgebaut…..die Software wie oben angegeben aufgespielt….Nach dem Start passiert nichts……was muss ich wie starten ?
    Würde mich über eine Antwort sehr freuen !
    Gruß
    Bernd

  23. Bernd sagt:

    Vielen DANK !!! Es läuft !!! 😉
    Es fehlte nur der „Ausführungsbefehl“ ……
    …und Danke für die tolle Anleitung !!!

  24. Ingo sagt:

    Hi Felix,
    Ich konnte meine Frau überzeugen, die 5 Meter in den Weihnachtsbaum zu hängen.
    „Aber nur Weiß! Nix buntes…“ (Ja… ja…)
    Danach kam die Frage: Kann man das auch so machen, daß einzelne LED’s wahllos kurz aufblinken und dann dunkler werden bevor sie aus gehen?
    Ich sag so in meinem jugendlichen Leichtsinn, klar geht das!… Weiß aber gar nicht, wie der Code dafür aussehen müsste.
    Kannst du mir ggf. weiter helfen?

    Gruß Ingo

    • Felix sagt:

      Hi Ingo,
      klar, das geht 😉
      Ich mache mal ein Beispiel (ab Zeile 102), für 5m=120LEDs und alle 5sek leuchtet eine neue LED auf, welche dann „abglüht“:

      import random
      sec = 5.0
      iter = 25
      while True: # Endlosschleife
          # alles auf Weiss:
          pixels.clear()
          # Farbe berechnen
          r,g,b = int(random.random()*255), int(random.random()*255), int(random.random()*255)
          # Position berechnen
          pos = int(random.random()*120)
      
          # alle 0.2 Sekunden wird die Farbe dunkler, 25mal für 5Sek
          step = int(255 / iter)
          for i in range(iter):
              pixels.set_pixel(pos, Adafruit_WS2801.RGB_to_color( r,g,b ))
              pixels.show()
              # neue Farbe berechnen
              r,g,b = max(0, r-step), max(0, g-step), max(0, b-step)
              time.sleep(sec / iter)
      

      Ist ungetestet, aber das Prinzip sollte klar sein.
      LG, Felix

    • Ingo sagt:

      OK, danke.
      Kannst du das ß und das ü aus dem Code entfernen, sonnst kommt der Fehler:
      syntaxError: Non-ASCII character ‚\xc3‘ in file
      oder man schreibt in die erste Zeile:
      # coding: utf-8
      rein…

      Leider fehlt mir anscheind noch der letzte Kick, daß die LED’s auch leuchten.
      Ich benötige noch mal einen Denkanstoß.

      Das Script sieht momentan so aus:

      # Simple demo of of the WS2801/SPI-like addressable RGB LED lights.
      import time
      import random
      import RPi.GPIO as GPIO
      
      # Import the WS2801 module.
      import Adafruit_WS2801
      import Adafruit_GPIO.SPI as SPI
      
      
      # Configure the count of pixels:
      PIXEL_COUNT = 160
      PIXEL_COUNT2 = 40
      
      # Alternatively specify a hardware SPI connection on /dev/spidev0.0:
      SPI_PORT   = 0
      SPI_DEVICE = 0
      pixels = Adafruit_WS2801.WS2801Pixels(PIXEL_COUNT, spi=SPI.SpiDev(SPI_P$
      pixels2 = Adafruit_WS2801.WS2801Pixels(PIXEL_COUNT2, spi=SPI.SpiDev(SPI$
      
      sec = 1.0
      iter = 25
      while True: # Endlosschleife
          # alles auf Weiss:
          pixels.clear()
          # Farbe berechnen
          r,g,b = int(random.random()*255), int(random.random()*255), int(ran$
          # Position berechnen
          pos = int(random.random()*12)
      
          # alle 0.2 Sekunden wird die Farbe dunkler, 25mal furr 5Sek
          step = int(255 / iter)
          for i in range(iter):
              pixels.set_pixel(pos, Adafruit_WS2801.RGB_to_color( r,g,b ))
              # neue Farbe berechnen
              r,g,b = max(0, r-step), max(0, g-step), max(0, b-step)
              time.sleep(sec / iter)

      (habe die sec auf 1.0 und die pos auf *12 gestellt, damit ich beim testen was sehe und mir der Strip nicht irgendwo anfängt zu blinken, wo ich es nicht finde…)
      Gruß Ingo

      …ich hoffe, dass das Einrücken nach dem Abschicken nicht verloren geht…

    • Ingo sagt:

      ok, hat mal nicht geklappt…

    • Ingo sagt:

      und wieder zu früh aufgegeben und gefragt.

      Es fehte das richtig eingerückte:
      pixels.show()
      Gruß Ingo

    • Ingo sagt:

      Hallo Felix,
      das Band ist im Baum ? und das wahllose Blinken funktioniert einwandfrei!!

      Jetzt fragt mich mein holdes Weib, ob man nicht auch mehrere LED’s gleichzeitig blinken lassen kann…?
      ich habe dann wie folgt den Code erweitert:
      pos = int(random.random()*PIXEL_COUNT)
      pos1 = int(random.random()*PIXEL_COUNT)
      pos2 = int(random.random()*PIXEL_COUNT)
      pos3 = int(random.random()*PIXEL_COUNT)
      pos4 = int(random.random()*PIXEL_COUNT)

      und
      pixels.set_pixel(pos, Adafruit_WS2801.RGB_to_color( r,g,b ))
      pixels.set_pixel(pos1, Adafruit_WS2801.RGB_to_color( r,g,b ))
      ……
      ……
      das funktioniert auch wunderbar.

      Ich vermute allerdings, daß es da noch eine elegantere Möglichkeit gibt, wo
      man die Anzahl der gleichzeitig blinkenden LED’s in eine String schreibt und diesen dann in einer Formel ausgibt.
      Wie müsste das aussehen?

      Gruß Ingo

    • Felix sagt:

      Wieso denn in einen String? Du kannst ein komplettes (Farb)Array übergeben, aber ein String wäre mir neu.

  25. Lukas sagt:

    Hallo,

    wenn ich versuche die .py Datei auszuführen, bekomme ich den Error: AttributeError :’module‘ object has no attribute „WS2801Pixels“
    kann es sein, dass sich die WS2801 Library geändert hat?

  26. Jo sagt:

    Gibt es eine ähnliche Bibliothek auch für Java? Oder kann man über Python das ganze auch über einen Browser steuerbar machen?

  27. Lutz sagt:

    Hey, ich finde dein Tutorial der hilfreich, allerdings frage ich mich, warum der GND der LED-Kette mit dem des PIs verbunden sein muss?

    Ich plane, eine andere Lichterkette zu benutzen, die eine 12V Versorgung braucht und habe Sorge, hier einfach den GND an den PI anzuschließen.
    Diese LED-Kette hat auch 4 Kanäle allerdings eine Anode und die RGB Kanäle. Damit müsste die Steuerung über den PI meiner Erachtens nach möglich sein, nur lassen sich die LEDs nicht einzeln ansteuern sondern alle reagieren genau gleich.

    • Felix sagt:

      Da die Datenleitung des Pi’s genutzt wird muss auch GND des Pi’s angeschlossen werden. Welchen Strip nutzt du?

  28. Lutz sagt:

    Ich plane diesen Strip hier zu verwenden:
    https://www.amazon.de/Salcar-ausw%C3%A4hlbar-IR-Fernbedienung-Controller-Netzteil/dp/B00JX8B3TC/ref=sr_1_3?ie=UTF8&qid=1483533001&sr=8-3&keywords=rgb+led+strip

    Die RGB-Leitungen würde ich über Transistoren schalten und die Stromversorgung des Strips selber entweder direkt an die Anode klemmen, oder aber über ein Relais schalten, um die Stromkreise voneinander galvanisch zu trennen.
    Bei dieser Beschaltung müssen die einzelnen Transistoren mit den entsprechenden Vorwiderständen an den GND geschaltet werden. Hätte dafür einfach den Nullleiter meines Netzteils verwendet(das mitgelieferte des LED-Stripes) verstehe allerdings, dass hier der GND des PIs auch angeschlossen werden soll, nur hat man dort eine Potentialdifferenz von 12V statt der 5V, für die der PI ausgelegt ist, man müsste also den Vorwiderstand entsprechend berechnen.
    Bei einem Verbrauch von 16mA pro LED und einer benötigten Spannung von 2V wären es entsprechend ein 625Ohm Widerstand.

    • Felix sagt:

      Der Beschreibung auf der Seite kannst du damit keine einzelnen LEDs ansprechen, sondern nur alle auf einmal / gleiche Farbe. Wenn du Angst um die GPIOs hast, würde ich auch ein Relais nehmen.

  29. Gregor sagt:

    Hallo.
    Ich wollte mal fragen ob man vielleicht auch eine Art 8×8 Matrix „bastel“ kann, um Symbole und Schriftzüge anzeigen zu lassen und wenn ja, hätte jemand vielleicht einen Beispielcode für mich??

    Danke schon mal im vorhinein

  30. GREGOR sagt:

    Hallo Felix.
    Weil mir noch von einem anderen Projekt ein paar Meter übrig geblieben sind.

  31. Gregor sagt:

    Bzw. kann mir vielleicht jemand verraten wie ich einzelne LEDs ansteuern kann und deren Farbe ändern kann?

    Danke vielmals.

  32. otti sagt:

    Hallo, beschäftige mich erst kurz mit Raspberry und bin auf diese Tutoriel gestoßen. Bin schon seid längerem auf der Suche nach einer speziellen Lösung für ein spezielles Projek, was evtl ein gesondertes Tutoriel werden könnte. Projektidee: Möchte die Windrichtung in einer Windrichtungsanzeige in Echtzeit ohne zeitliche Verzögerung auf einen LED Kranz mit ca. 500 mm Durchmesser anzeigen lassen, sodass immer entsprechend der Windrichtung nur die LEDs aufleuchten, aus der die Windrichtung stammt. Das ganze sollte von der Windrichtungsanlage auf dem Dach, wenn es geht, kabellos auf den LED Kranz, der als Bilderrahmen aufgehängt werden soll, übertragen werden. Könnte bei der Problemlösung der Raspberry behilflich sein und welche weiteren Komponenten würden benötigt? Ich selbst bin völliger Laie, hätte nur den Wunsch, so etwas zu realisieren und bin auf der Suche bach Unterstützern.

    • Felix sagt:

      Hi otti,
      du bräuchtest z.B. ein solches Windmodul, dessen Werte du ausließt. Da ich das noch nicht umgesetzt habe, kann ich nicht sehr ins Detail gehen, aber ich denke, dass das Signal analog ist. Das könntest du auslesen und dann entsprechend auf einem LED Stripe wie diesem anzeigen lassen.
      LG, Felix

  33. Sebastian sagt:

    Hallo!
    Ich finde eure Tutorials immer total klasse. Jetzt wollte ich mich auch einmal an die Ansteuerung des LED-Streifens machen. Leider steht auf meinem LED-Streifen nichts von GND, DI,CI und 5V. Bei mir heißen die vier Leitungen: +, R, G, B.
    Plus ist ja klar. Aber was entspricht auf meinem Streifen denn Ground sowie DI und CI?

    • Felix sagt:

      Hallo Sebastian,
      du hast wohl einen anderen LED Streifen 🙁 Dieses Tutorial funktioniert nur mit den verlinkten WS2801 RGB Streifen. Andere Treiber ICs werden nicht unterstützt. Bei deinem Streifen ist es nur möglich die gleiche Farbe für alle LEDs zu setzen.
      LG, Felix

  34. Benedikt sagt:

    Hi, ich bekomme immer eine Fehlermeldung beim ausführen des scriptes:
    pi@raspberrypi:~/pi-share $ python ws2801_example.py
    Traceback (most recent call last):
    File „ws2801_example.py“, line 16, in
    pixels = Adafruit_WS2801.WS2801Pixels(PIXEL_COUNT, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE), gpio=GPIO)
    File „/usr/local/lib/python2.7/dist-packages/Adafruit_GPIO/SPI.py“, line 42, in __init__
    self._device.open(port, device)
    IOError: [Errno 2] No such file or directory

    Warum ist das so?

    Gruß

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Blog abonnieren

Abonniere Tutorials-RaspberryPi, um kein Tutorial mehr zu verpassen!