Aus Raspberry Pi Geek 09/2025

MicroPython Teil 8: Die WS2812, bekannt als Neopixel

© austler / 123rf.com

Es wird bunt

Martin Mohr

Hinter der Bezeichnung WS2812 steckt eine RGB-Leuchtdiode, die sich über ein serielles Protokoll programmieren lässt. Das Ansteuern der LED funktioniert mit MicroPython.

Die auch als Neopixel bezeichnete WS2812 ist eine programmierbare RGB-LED. Sie besteht aus einem Controller und drei Leuchtdioden in den Farben Rot, Grün und Blau. Für die Helligkeit jeder einzelnen LED gibt es im Controller ein Datenbyte. Dadurch kann eine Neopixel bis zu 16 777 216 Farben darstellen.

Jede Neopixel verfügt über vier Anschlüsse, zwei davon sind für die 5 V Betriebsspannung vorgesehen. Die anderen zwei Anschlüsse DI (Data in) und DO (Data out) dienen dazu, die Daten asynchron seriell zu übertragen. Der Ausgang (DO) einer WS2812 lässt sich mit dem Eingang (DI) der nächsten WS2812 verbinden. Damit schalten Sie theoretisch beliebig viele Neopixel hintereinander.

Doch dabei sollten Sie im Hinterkopf behalten, dass die Datenübertragung ein Weilchen dauert. Beansprucht sie zu viel Zeit, beginnen die LEDs zu flackern. Bei 1024 LEDs in Reihe ist es allerdings immer noch möglich, sie dreißigmal in der Sekunde mit Daten zu versorgen. Ein Flackern lässt sich bei dieser Framerate noch nicht erkennen.

Die WS2812 ist sowohl als Einzelkomponente als auch auf unterschiedlichen Trägern verbaut erhältlich. Zu den bekanntesten Formen zählen dabei der LED-Strip, die Matrix und Ringe [1] in unterschiedlichen Größen.

Das Signal zur Ansteuerung der LEDs besitzt einen sehr speziellen Aufbau. Die einzelnen Datenbits werden mit einem PWM-Signal (Pulsweitenmodulation) kodiert. Das Puls-Pausen-Verhältnis des Signals definiert, ob es sich um eine Eins oder um eine Null handelt. Das Verfahren senkt die Anfälligkeit gegen Störungen. Um diesen Text nicht mit technischer Tiefe zu überfrachten, verweisen wir Sie auf das Datenblatt [2] der WS2812. Es beschreibt exakt, wie das Protokoll funktioniert. Darüber hinaus finden sich dort alle Informationen über die WS2812.

Je heller die LEDs leuchten, desto mehr Strom verlangen sie. Der Stromfluss erzeugt einen Spannungsabfall. Bei den LED-Strips fällt das stark durch Helligkeitsunterschiede auf. Daher sollten Sie nach Möglichkeit die Betriebsspannung an mehreren Stellen einspeisen oder die Helligkeit generell senken. Bitte beachten Sie dabei, dass jede der drei LEDs bis zu 20 mA Strom ziehen kann. Dementsprechend hat eine WS2812 einen maximalen Stromverbrauch von 60 mA. In der Praxis kommt der Wert allerdings eher selten vor.

Testaufbau

Unser Testausbau besteht aus einem ESP32 Dev Kit [3] und zwei LED-Ringen mit 32 LEDs (Abbildung 1). Der ESP32 hat eine Betriebsspannung von 3,3 V, und die WS2812 benötigt 5 V. Wenn Sie die Datenblätter beider Halbleiter vergleichen, ist klar: Die Spannung des ESP32 dürfte nicht ausreichen, um die LED anzusteuern. Die Praxis zeigt allerdings, dass es meistens trotzdem klappt. Im Internet finden sich zahlreiche Beispiele dafür.

Um auf der sicheren Seite zu sein, setzen wir für unser Beispielprojekt einen zusätzlichen Treiber (74HC125) ein. Dieser passt für uns die unterschiedlichen Spannungspegel der zwei Halbleiter an. Alles Wissenswerte zu diesem IC steht in seinem Datenblatt [4]. Damit sich der Nachbau etwas einfacher gestaltet, sehen Sie in Abbildung 2 das Pinout des 74HC125. Den kompletten Schaltplan für unseren Testaufbau entnehmen Sie bitte Abbildung 3.

Im vorigen Abschnitt sind wir kurz auf den Strombedarf der WS2812 eingegangen. Für unseren Testaufbau würde das bedeuten: Wir müssen mit einem Maximalstrom von insgesamt 64 mal 60 mA rechnen. Damit kommen wir auf fast 4 A (3,84) – das ist definitiv zu viel für eine USB-Schnittstelle. Deswegen haben wir die Testprogramme so geschrieben, dass wir nicht in diesen Bereich geraten. Sollen alle 64 LEDs mit voller Intensität leuchten, kommen Sie dafür nicht um ein zusätzliches Netzteil herum.

Abbildung 1: Für unseren Testaufbau kommen ein ESP32 Dev Kit und zwei LED-Ringe zum Einsatz.

Abbildung 1: Für unseren Testaufbau kommen ein ESP32 Dev Kit und zwei LED-Ringe zum Einsatz.

Abbildung 2: Das Pinout des 74HC125 hilft beim Nachbauen des Projekts.

Abbildung 2: Das Pinout des 74HC125 hilft beim Nachbauen des Projekts.

Abbildung 3: Der gesamte Schaltplan des Testaufbaus fällt nicht allzu komplex aus.

Abbildung 3: Der gesamte Schaltplan des Testaufbaus fällt nicht allzu komplex aus.

Programm

Ursprünglich sollte die IDE Mu für das Projekt zum Einsatz kommen. Aus einem nicht nachvollziehbaren Grund arbeitet sie in der Version 1.2.0 jedoch nicht zufriedenstellend mit der aktuellen Version von MicroPython (1.23.0) zusammen. Nach einer Stunde Herumprobieren wechselten wir deswegen zu Thonny, was auf Anhieb erwartungsgemäß klappte.

Zurück zu den Neopixeln: Wie eingangs erklärt, braucht es zum Ansteuern der Neopixel ein exaktes Timing. Mit reinem Python lässt sich das kaum machen. Damit es trotzdem funktioniert, gibt es in MicroPython eine passende interne Bibliothek. Nachdem Sie sie importiert haben, können Sie gleich loslegen.

In der Bibliothek existiert eine Klasse, die uns ein Neopixel-Objekt zurück gibt. Um das Objekt zu erzeugen, benötigen Sie den Pin, an dem die Neopixel angeschlossen ist, sowie die Anzahl der einzelnen Pixel. Primär besteht das Objekt aus einem Array, das der Anzahl der LEDs entspricht. An jeder Position in diesem Array können Sie ein Tupel (in unserem Fall drei Werte) schreiben. Jeder dieser Werte einspricht einer Farbe (Rot, Grün, Blau).

Nachdem Sie sämtliche Werte in das Array geschrieben haben, übertragen Sie es mit der Methode write() in die physikalischen Leuchtdioden. Listing 1 zeigt ein einfaches Beispiel, bei dem die ersten drei LEDs mit den Farben Rot, Grün und Blau mit voller Leuchtkraft eingeschaltet werden. Die nächsten drei LEDs steuerten wir lediglich mit einem Sechzehntel der Leistung an, was immer noch gut zu sehen ist.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 3 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben