WS2812b LED's mit einem Raspberry Pi Zero betreiben
In diesem Beitrag geht es darum wie man WS2812b LED's an einem Raspberry Pi Zero betreiben kann. Wie ihr dazu die LED's anschließt, den Raspberry Pi Zero einrichtet und was ihr dazu alles benötigt findet ihr in diesem Beitrag.
Wer wissen möchte wie WS2812b LED's im Detail funktionieren kann sich gerne meine zwei Videos darüber auf YouTube ansehen: Teil 1 , Teil 2
Was benötigt ihr dazu:
- Raspberry Pi Zero (WLAN Variante)
- eine leere Micro SD Karte und entspr. Kartenleser (Größe mind. 4GiB)
- WS2812b LED Stripe
- 5V Netzteil für die LED's und dem Rasperry Pi Zero
Ein fertiges Projekt von mir findet man hier --> https://github.com/ThKattanek/window_neopixel_matrix
Den Raspberry Pi Zero einrichten
Fangen wir an und laden uns das neuste "Raspberry Pi OS" Image von hier https://www.raspberrypi.com/software/operating-systems herunter. Wir nehmen die Lite Version und in 64-Bit. Diese kommt ohne Desktop und unnötigen Ballast daher. Wenn das Image heruntergeladen ist können wir es entpacken und direkt auf die SD Karte schreiben. Das machen wir wie folgt:
Linux User
sudo dd if=./2022-04-04-raspios-buster-armhf-lite.img of=/dev/sd? bs=1M
Anstelle des '?' müsst ihr euer Device (a ,b ,c ,...) angeben wo das Image drauf soll.
Vorsicht, ihr könnt hier auch versehentlich ein anderes Medium überschreiben. Bitte genau nachschauen. z.B. mit fdisk -l
Windows User
Hier kann einfach der W32 Diskimager verwendet werden um das Image zu schreiben. https://sourceforge.net/projects/win32diskimager
WLAN und SSH einrichten
Nun können wir das WLAN für den Raspberry Pi einrichten. Dazu benötigt ihr eure SSID von eurem WLAN und das entsprechende Passwort dazu. Die SD Karte muss wieder in den Computer gesteckt werden und dann öffnet ihr die Boot Partition. Dann erstellt ihr dort eine Datei mit dem Namen "wpa_supplicant.conf" und folgendem Inhalt:
Country=DE ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="xxx" psk="xxx" <= statt xxx muss dein WLAN Password rein key_mgmt=WPA-PSK }
Damit wir jetzt auch noch per SSH auf den Raspberry Pi zugreifen können, müssen wir nur noch eine leere Datei auf der Boot Partition erstellen. Diese muss einfach nur ssh heißen und leer sein. Das war es dann auch soweit mit den Vorbereitungen der SD Karte. Diese kann nun in den Raspberry Pi eingesteckt werden und der Raspberry Pi gestartet werden. Sollte sich das WLAN ändern kann man jederzeit die wpa_supplicant.conf neu auf der Boot Partition erstellen. Die wpa_supplicant.conf wird jedes mal nach dem Starten des Raspberry Pi von der Boot Partition gelöscht!
Der erste Zugriff per SSH und Konfigurieren
Nach ca. 1-2 min sollte man den Raspberry Pi anpingen können:
ping raspberrypi
Wenn sich das Gerät damit anpingen lässt könne wir nun per SSH darauf zugreifen. Unter Windows kann man dazu Putty benutzen unter Linux geht das ganz leicht direkt in der Konsole.
ssh pi@raspberrypi
Der Username lautet Standardmäßig "pi" und das Passwort "raspberry". Der Username wird hier direkt bei ssh mit übergeben. Wenn wir uns angemeldet haben rufen wir als erstes raspi-config auf.
sudo raspi-config
Jetzt stellen wir folgende Sachen ein: Hostname, Passwort, Timezone und wir expandieren die Root Partition.
Hier ändern wir nun als erstes das Passwort System Options -> Password. Dann ändern wir den Hostname System Options -> Hostname z.B. in "led-ctrl-01". Nun ändern wir noch die Timezone Localisation Options -> Timezone. Ich wähle Europa und Berlin aus. Zum Schuss expandieren wir noch die Root Partition auf das Maximum des Datenträgers Advanced Options -> Expand Filesystem. Mit <Finish>
beenden wir raspi-config und wir werden gefragt ob das System neu gestartet werden soll, was mit yes bestätigen.
Nachdem der RaspberryPi neu gestartet ist können wir uns wieder per SSH einloggen, aber denken Sie daran das wir den Hostname und das Passwort geändert haben.
ssh pi@led-ctrl-01
Nun bringen wir das System erstmal auf den neusten Stand das machen wir mit folgenden Befehl:
sudo apt update && sudo apt upgrade
Audio deaktivieren
Damit die Ansteuerung der WS2812b LED's auch funktioniert müssen wir das Audio deaktivieren, welches bei dem Raspberry Pi Zero eh nicht benötigt wird. Das machen wir in dem wir in der /etc/modprobe.d/raspi-blacklist.conf folgendes einfügen:
blacklist snd_bcm2835
Und dann müssen wir noch in der /boot/config.txt folgendes auskommentieren:
dtparam=audio=on
Zum editieren benutze ich nano
sudo nano /etc/modprobe.d/raspi-blacklist.conf
sudo nano /boot/config.txt
Nach einem Neustart ist das Audio deaktiviert und kann uns nicht mehr in die Quere kommen. Nun ist der Raspberry Pi erst einmal fertig konfiguriert und wir können anfangen die Libs zu installieren.
Library erstellen und installieren
Wir benutzen hier die Library von Jeremy Garff. Hier sind alle Schritte die ihr ausführen müsst:
cd ~/
sudo apt-get install gcc make cmake build-essential git
git clone https://github.com/jgarff/rpi_ws281x
cd rpi_ws281x
mkdir build
cd build
cmake ..
make
sudo make install
Die Library wird nach usr/local/lib und usr/local/include/ws2811 installiert.
WS2812b LED's an den Raspberry Pi Zero anschließen
Hier sieht man wie die WS2812b LED's an den Raspberry Pi Zero angeschlossen werden, also nicht wirklich schwer oder? ;)
Achtung ich nehme die Versorgungsspannung für die LED's direkt vom Pi. Das sind hier nur 8 LED's das schaft mein Netzeil vom Pi. Werden mehr LED's genommen müsst ihr natürlich ein extra Netzteil für die LED's benutzen.
Ich verwende hier einen 8 LED kurzen Stripe. Damit kann man wunderbar die Funktionalität des Aufbaus testen. Zum testen reicht es wenn man jetzt folgendes eingibt:
sudo ./test -x 8 -y 1 -c
Mit -x 8 -y 1 gebe ich der Matrix die Größe 8x1 und -c schaltet alle LED's beim beenden wieder aus.
Das Image Fix und Fertig
Für alle diejenigen , denen das zu viel Vorbereitung ist habe ich ein fertiges Image erstellt welches ihr hier runter laden könnt. Darauf ist alles installiert, so wie hier in der Anleitung. Zusätzlich habe ich den raspi-neopixel-player von mir auch drauf gepackt, dieser wird automatisch beim Starten des Raspberry Pi Zero gestartet und es werden sofort die WS2812 LED's angesteuert.
Hier das fertige Image -> ws2812_controller_raspberrypi_zero.7z -- SHA512
Vor dem ersten Starten des Raspberry Pi's muss noch die Datei wpa_supplicant.conf auf der Boot Partition an euer WLAN angepasst werden. Sie kann aber zu jeder Zeit wieder nachträglich erstellt werden, z.B. wenn sich das WLAN geändert hat. Und es muss auch wieder die Partition expandiert werden, da ich diese am Ende wieder verkleinert habe. Wer den neopixel-player aus dem Autostart wieder raus nehmen möchte, einfach die Datei /etc//etc/rc.local editieren.
Die Zugangsdaten für das Image lauten:
Hostname: led-ctrl-01
Benutzer: pi
Passwort: raspberry
Ich hoffe ich konnte euch hier etwas Licht ins dunkle bringen und wünsche euch viel Spaß beim Ausprobieren. Fragen und Verbesserungen gerne unten in die Kommentare.
Quellen:
- https://medium.com/@larsongb/using-a-raspberry-pi-to-control-leds-38731b9db4
- https://developer-blog.net/raspberry-pi-zero-als-led-strip-controller/
- https://www.computerhilfen.de/info/raspberry-pi-zero-w-ohne-monitor-einrichten-wlan-und-ssh-aktivieren.html
- https://www.raspberrypi.com/software/operating-systems
- https://blog.heimetli.ch/raspberry-led-strip-c.html
- https://github.com/jgarff/rpi_ws281x
- https://jankarres.de/2014/07/raspberry-pi-autostart-von-programmen-einrichten
- https://www.byteschmelze.de/imgshrink.php