Raspberry Pi Zero als LED Strip Controller
In diesem Tutorial zeige ich euch wie man einen Raspberry Pi Zero als LED Strip Controller einsetzt. Es hat ganz schön lange gedauert bis ich die ersten Erfahrungen mit einem LED Strip gemacht habe, doch nun kann ich sagen: mit dem Raspberry Pi Projekte damit umzusetzen macht Sinn und Spaß.
Raspberry Pi Zero als LED Strip Controller
LED Strips gibt es mittlerweile in jedem Baumarkt und in vielen Supermärkten. Vermutlich hat jeder von euch schon einmal damit zu tun gehabt. In wenigen Handgriffen baut man so tolle Beleuchtungen für das Wohn- oder Schlafzimmer und freut sich über farbige Beleuchtung die man meist mit einer IR Fernbedienung steuert. Wenn man es etwas professioneller haben will, dann kauft man sich einen Controller mit Bluetooth, WLAN oder IFTTT Schnittstelle. So ein Controller kostet dann gleich eine Menge Geld, will man überhaupt eine spezielle Lösung bauen sind die 0815 Angebote von Supermärkten kaum nützlich.
Die Idee
Ich habe schon vor längerer Zeit die Idee gehabt mein Carport zu beleuchten. LEDs sind da optimal, da sie wenig Strom verbrauchen. Ganz nebenbei hat man mit dem richtigen LED Strip auch die Möglichkeit buntes Licht auszugeben und noch besser: die Beleuchtung individuell zu gestalten. Da ich mich aber nicht von einem vorprogrammierten Controller einschränken lassen will verwende ich einen Rapsberry Pi zur Programmierung und Steuerung der Lichterkette. Die Firma seeed hat mir dazu einen Raspberry Pi Zero W zur Verfügung gestellt. Den kleinen Pi gibt es dort ab 10€, für 15€ auch in der Ausführung mit WLAN Modul. Ganz nebenbei gibt es das komplette Basiszubehör.
Der Raspberry Pi Zero W ist für meine Zwecke ideal, da dort die GPIO Leiste noch nicht montiert ist und ich so die beiden Kabel direkt an die Platine löten kann, aber dazu gleich mehr.
Umsetzung
Ich habe mir folgende Hardware gekauft:
- Raspberry Pi Zero W
- LED Strip
Ist ein billiger China Artikel. Der WS2811 RGB LED Strip ist 5 Meter lang, benötigt 12 Volt Versorgungsspannung und hat eine Schnittstelle für einen Controller (Controller ist keiner dabei). Er enthält 100 ICs die insgesamt 300 LEDs steuern. Der WS2811 ist eine günstigere Ausführung, das heißt es werden pro Controller immer 3 LEDs gesteuert. Mit einem WS2812 könnte man jede einzelne LED ansteuern, kostet aber entsprechend mehr. - 12 Volt Netzteil
Das Netzteil von MeanWell ist für meinen Einsatzzweck ideal. Mit den 8,5 Ampere liefert das 12 Volt Netzteil genug Energie für die Lichterkette. Durch die wasserdichte Ausführung habe ich beim Outdoor Einsatz keine Bedenken.
Wichtig war mir ein starkes Netzteil (um die 10 Ampere) und dass sowohl der LED Strip als auch das Netzteil IP67 wasserdicht sind. Bei der Verwendung im Freien ist das eine wichtige Voraussetzung, insbesondere wenn das Wetter so feucht und neblig ist wie aktuell im Oktober.
Achtung: ich beschreibe im folgenden die Montage und mein Testszenario. Ich habe dazu sowohl Netzteil als auch LED Kette an den Strom angeschlossen. Bei der Montage gilt die nötige Sorgfaltspflicht zu beachten, also immer zuerst über den Sicherungskasten den Strom abschalten oder im Zweifelsfall lieber für ein paar Euro einen Elektriker kommen lassen. Bei der Arbeit mit Haushaltsspannung besteht Lebensgefahr!!!
Das Bild zeigt die Versuchsanordnung vor der Montage im Carport. Ich habe das komplette Setup zuerst im Keller zusammengebaut und getestet.
Der Raspberry Pi wird wie gewohnt über ein USB Netzteil von einem Smartphone versorgt. Das Netzteil (blauer und brauner Draht) habe ich für den Test an einen Stecker angeschlossen den ich von einem alten TV Receiver abtrennt habe. Nach dem Funktionstest wurden diese Kabel direkt an den Stromverteiler im Carport angeschlossen.
Der LED Strip hat intern 3 Leitungen:
- weiß = GND
- rot = 12 V
- grün = Daten
an beiden Enden stehen jeweils 5 Kabel heraus. Drei davon sind zu einem Stecker zusammengeführt an dem man einen Controller anstecken kann. Daneben gibt es ein weißes und rotes für die Versorgungsspannung. Das weiße und rote kann man direkt an das 12 Volt Netzteil anschließen (siehe rechts im Bild). Der Stecker ist für einen Controller gedacht, der ebenfalls die 12 Volt als Versorgungsspannung zieht. Unser Raspberry Pi braucht nur 5 Volt, weshalb ich den roten Draht abgeklebt habe. Den benötigen wir nicht. Weiß (GND) und grün (Daten) habe ich an den GPIO Schnittstelle direkt angelötet. Siehe dazu die Grafik.
Software
Voraussetzungen schaffen
Die Hardware ist damit für den ersten Test bereit, fehlt nur noch die Software. Ich gehe im folgenden davon aus, dass ihr bereits eine SD Karte mit einem aktuellen Image von Raspbian installiert und den Raspberry Pi Zero W damit gestartet habt. Ich habe diese Anleitung mit dem aktuellen Raspbian Buster (Debian 10) gemacht. Zuerst installieren wir die nötige Software um ein Python Script für den WS2811 LED Strip zu schreiben:
sudo apt-get update sudo apt-get install gcc make build-essential python-dev git scons swig
Da wir mit dem PWM Pin arbeiten sollten wir die Audioausgabe am Raspberry Pi deaktivieren. Das ist sowieso Sinnvoll, denn am Pi Zero gibt es sowieso keine passende Hardware wie einen Klinkenstecker:
sudo nano /etc/modprobe.d/raspi-blacklist.conf
wir fügen folgende Zeile ein:
blacklist snd_bcm2835
und speichern die Datei ab.
Zuletzt müssen wir noch eine Konfigurationsdatei bearbeiten:
sudo nano /boot/config.txt
sucht nach
#Enable audio (loads snd_bcm2835) dtparam=audio=on
deaktiviert diese Einstellung mit einem #, d.h. dort steht dann:
#dtparam=audio=on
wieder speichern!
Nach einem Neustart ist die Audioausgabe deaktiviert (zu erkennen rechts oben im Desktop)
sudo reboot
LED Strip programmieren
Im folgenden installieren wir eine fertige Bibliothek, die mit den WS2811 und WS2812 LED Strips unter Python arbeiten kann. Diese findet man unter GitHub, installiert wird diese wie folgt:
git clone https://github.com/jgarff/rpi_ws281x
Den Source Code (du findest dort zahlreiche C Dateien) für die Python Bibliothek müssen wir noch comilieren. Keine Angst, das ist recht einfach:
cd rpi_ws281x sudo scons
Im Prinzip können wir nun auch mit C/C++ ein Programm schreiben, einfacher ist das aber mit Python. Dafür installieren wir die Bibliothek wie folgt:
cd python sudo python3 setup.py build sudo python3 setup.py install
Wir sind nun fertig und können den Strip testen. Dafür finden wir im examples Ordner einige Testskripte. Ich empfehle das strandtest.py Skript. Dort müssen wir nur eine kleine Anpassung machen. In Zeile 13 muss die Anzahl der LEDs eingetragen werden. Das ist je nach LED Strip und dessen Länge unterschiedlich. In meinem Fall ist 100 die korrekte Einstellung. Ich habe zwar 300 LEDs auf den 5 Meter Strip, jedoch kann ich immer nur 3 gleichzeitig ansteuern, das heißt vom Python Script sind 100 einzelne ICs ansteuerbar.
Mit
sudo python examples/strandtest.py
startet man das Testskript und sollte nun eine Ausgabe am LED Strip sehen.
Probleme
Die Anleitung liest sich für den einen oder anderen vermutlich unterschiedlich kompliziert. Deshalb ist die Problematik einen Fehler zu machen durchaus gegeben. In dem Fall empfehle ich jeden Schritt noch einmal zu prüfen. Ich hatte beispielsweise bei der Ausführung vom Testskript folgenden Fehler:
ImportError: No module named neopixel
Nach längerer Suche war die Fehlerursache, dass python immer noch in Version 2 und Version 3 auf dem Raspberry Pi vorliegt und ich mit python setup.py build bzw. install die Bibliothek für Version 2 installiert hatte. Eine neuerliche Ausführung mit python3 hat das Problem gelöst!
Ergebnis
Das Ergebnis der Arbeit am Abend sieht schon sehr beeindruckend aus:
Fazit
Nach einer Woche Arbeit verrichtet der Raspberry Pi Zero als LED Strip Controller seine Arbeit. Die Ausführliche Anleitung zeigt welche Hardware man benötigt, wie man diese anschließt und mit einem Beispielskript die erste Ausgabe erreicht. Da hat man schon mal Grund stolz auf sich zu sein, der Spaß fängt damit aber erst an! Im folgenden Artikel zeige ich welche Modifikationen ich in einem weiteren Schritt noch gemacht habe.
Was habt ihr schon mit LED Strips umgesetzt? Wo wäre der Raspberry Pi Zero W noch ein passender Controller?
Moin, sieht gut aus Dein Projekt. Ich wollte es daher nachbasteln.
Du hast wohl einen Buchstabendreher
sudo apt-get install gcc make build-essential python-edv git scons swig
muss aber python-dev sein…
des Weiteren bekomme ich danach folgende Ausgabe:pi@RaspberryPi-Bad-Led:~/rpi_ws281x/python $ sudo python3 setup.py build
Traceback (most recent call last):
File „setup.py“, line 3, in
from ez_setup import use_setuptools
File „/home/pi/rpi_ws281x/python/ez_setup.py“, line 27, in
from distutils import log
ImportError: cannot import name ‚log‘ from ‚distutils‘ (/usr/lib/python3.7/distutils/__init__.py)
pi@RaspberryPi-Bad-Led:~/rpi_ws281x/python $ sudo python3 setup.py install
Traceback (most recent call last):
File „setup.py“, line 3, in
from ez_setup import use_setuptools
File „/home/pi/rpi_ws281x/python/ez_setup.py“, line 27, in
from distutils import log
ImportError: cannot import name ‚log‘ from ‚distutils‘ (/usr/lib/python3.7/distutils/__init__.py)
Vielen Dank für den Hinweis! Hab ich gerne angepasst. Zu deinem Problem: offenbar hat sich bei dem GitHub Projekt zwischenzeitlich etwas geändert. Ich würde dort mal probieren die Punkte bei „Build“ durchzugehen.
Moin,
Mir ist das mit den GND Verbindungen nicht so ganz klar, so wie sich deine Artikel liest, hast du einen GND vom 5V Netzteil und einen vom 12V Netzteil, die beide an den Pi gehen. Bist du sicher dass du keinen Potentialunterschied zwischen den beiden GNDs hast, oder hast du die gekoppelt?
Cooler Artikel, besten Dank dafür 🙂
Hi, der LED Strip ist genau für das beschriebene Setup ausgelegt. Er hat zum einen für die Spannungsversorgung der LEDs zwei Ausgänge für 12V und GND. Zusätzlich gibt es noch einen zweiten Stromkreis mit 3 Ausgängen für 12V, GND und Datenleitung. Ich verwende davon nur GND und Daten mit 3,3V und das funktioniert nun schon seit über 1,5 Jahre. Die 12V Leitung der Schaltung ist nicht angeschlossen. Die wäre dazu gedacht von einem 12V Gerät die Spannung für die Lichterkette zu liefern, dass ebenfalls die Steuerung übernimmt. Ich denke sowas kann man separat kaufen, aber diese Dinger funktionieren mit einer Fernbedienung. Also kurz: 12V Netzteil liefert nur Spannungsversorgung, zweiter Stromkreis auf dem max. 3,3V anliegt schaltet die LEDs. Hoffe das hilft.
Moin Moin Werner,
sehr interessantes Anwendungsbeispiel und ich habe mir den Artikel gerne durchgelesen.
Vielleicht 1-2 Fragen:
Ob 12V oder 24V sollte bei dem Aufbau eigemtich egal sein, oder?
Kann damit auch ein 5050 Strip mit RGBW gestuert werden? ich benötige für mein Beispiel ein RGB und die Warmweisse LED.
Oder hast du einen Hinweis wo ich das finden kann?
Vielen Dank und Grüße Udo
Hallo guten Tag ich komme nicht ins Python Verzeichnis.
Bei mir wird immer angezeigt:
-bash: -bash:: command not found
-bash: cd: python: No such file or directory
Die Installation hat wohl nicht funktioniert.