Raspberry Pi Pico: WS2812-RGB-LEDs programmieren

RGB-LED-Module, -Platinen, -Streifen und -Bänder vom Typ WS2812 sind sehr beliebt, um Lichteffekte in verschiedenen Farben zu erzeugen. Dazu muss das RGB-LED-Modul mit einer Stromversorgung und einem Controller verbunden werden. Der Controller kümmert sich um die Lichteffekte.

Die Verbindung zwischen dem RGB-LED-Modul und dem Controller erfolgt über eine einzelne Datenleitung. Die Steuerung erfolgt mit einem asynchronen seriellen Protokoll.
Folgt man einigen Anleitungen zur Steuerung der WS2812-RGB-LEDs mit einem Raspberry Pi Pico, dann bedarf es in der Regel immer zusätzlicher Bibliotheken oder komplizierten Funktionen mit State-Machines mit Assembler-Code. Das muss nicht sein, denn in MicroPython ist die NeoPixel-Bibliothek enthalten, die sich zur Steuerung der WS2812-RGB-LEDs sehr gut eignet.

Hinweis zur Stromversorgung

Der Stromverbrauch des Moduls, der Platine oder des Bandes hängt davon ab, welche LEDs verbaut sind. Wir gehen hier vom Typ SMD 5050 aus (Größe 5 x 5 mm). Bei voller Helligkeit (Weiß) soll der Stromverbrauch bei ca. 60 mA pro LED liegen. Er kann aber auch deutlich darunter oder sogar darüber liegen.

Berechnung des gesamten Strombedarfs:

Berechnung des gesamten Strombedarfs

Bei einer WS2812-Platine mit 8 RGB-LEDs:

Berechnung des gesamten Strombedarfs einer WS2812-Platine mit 8 RGB-LEDs

Achtung, der Raspberry Pi Pico verbraucht in der Spitze ca. 20 mA, was dazugerechnet werden muss.

Das macht zusammen 500 mA bzw. 0,5 A.

In der Regel verwendet man zur Stromversorgung der WS2812-RGB-LED-Streifen ein eigenes Netzteil, etwa mit 5 Volt. In diesem Aufbau speisen wir den LED-Streifen mit den 5 Volt vom Pin 40 (VBUS). Wir greifen hier die 5 Volt direkt vom USB ab. Bei mehr oder längeren Streifen ist aber zwingend ein eigenes Netzteil erforderlich.

Hinweis: Der Stromverbrauch von einem Pico mit einem angeschlossenen LED-Streifen mit 8 LEDs, die in Weiß mit voller Helligkeit leuchteten, lag bei 300 mA. Das macht ungefähr 35 mA pro LED. Der Rest braucht der Pico.

Aufbau und Bauteile

Raspberry Pi Pico: WS2812-RGB-LEDs programmieren

Raspberry Pi Pico WS2812
Pin 40 VCC +5V VCC
Pin 38 GND GND
Pin 34 GPIO 28 DI / DIN
Pin 33 GND GND

Schnell und einfach alle Bauteile zusammen bestellen

Programmcode für MicroPython

Ein großer Vorteil ist, dass in MicroPython die Unterstützung von NeoPixels enthalten ist und somit keine externe Bibliothek gebraucht wird. Die Steuerung der WS2812-RGB-LEDs ist in MicroPython praktisch integriert.

Bevor der Programmcode einfach so gestartet wird, sollten 3 Dinge bedarfsweise eingestellt werden.

  • GPIO-Pin-Nummer (pin_np): Standard ist „28“, wenn man dem Aufbau folgt.
  • Anzahl der LEDs (leds): Wir verwenden hier ein WS2812-Modul mit 8 RGB-LEDs.
  • Helligkeit (brightness): Die Werte können zwischen 0 (aus) und 255 (volle Helligkeit) liegen.

Nach der Ausführung wird der Programmcode automatisch beendet. Die LEDs leuchten aber weiter.

# Bibliotheken laden
from machine import Pin
from neopixel import NeoPixel

# GPIO-Pin für WS2812
pin_np = 28

# Anzahl der LEDs
leds = 8

# Helligkeit: 0 bis 255
brightness = 10

# Initialisierung WS2812/NeoPixel
np = NeoPixel(Pin(pin_np, Pin.OUT), leds)

# LED 1: Weiß
np[0] = (brightness, brightness, brightness)
# LED 2: Rot
np[1] = (brightness, 0, 0)
# LED 3: Grün
np[2] = (0, brightness, 0)
# LED 4: Blau
np[3] = (0, 0, brightness)
# LED 5: Gelb
np[4] = (brightness, brightness, 0)
# LED 6: Pink
np[5] = (brightness, 0, brightness)
# LED 7: Türkis
np[6] = (0, brightness, brightness)
# LED 8: Aus
np[7] = (0, 0, 0)

# Farben ausgeben
np.write()

Troubleshooting

Beim Ausführen des Programmcodes erscheint folgende Fehlermeldung. Was ist das Problem und was ist zur Lösung zu tun?

Fehlermeldung: ImportError: no module named 'neopixel'

Die Fehlermeldung sagt, dass es kein Import-Modul mit dem Namen „neopixel“ gibt. Das könnte ein Fehler im Programmcode sein. In diesem Fall aber nicht. Vermutlich befindet sich auf dem Raspberry Pi Pico eine veraltete MicroPython-Firmware in der noch keine NeoPixel-Unterstützung vorhanden ist
NeoPixels wird ab MicroPython Version 1.18 unterstützt.

Welche MicroPython-Version auf Deinem Raspberry Pi Pico drauf ist, kannst Du Dir mit einem Klick auf den STOP-Button in der Kommandozeile von Thonny anzeigen lassen.

Letzte LED kaputt? Nein!

Dir ist vielleicht aufgefallen, dass eine der LEDs, die letzte, nicht leuchtet. Das hat einen einfachen Grund. Im Programmcode ist die Helligkeit der drei Grundfarben mit „0“ angegeben. Dieses Mischungsverhältnis entspricht der Farbe „Schwarz“. Da „Schwarz“ nicht leuchtet, leuchtet auch die LED nicht. Sie ist aus und NICHT kaputt.

Helligkeit der LEDs

Noch ein paar Worte zur Helligkeit der LEDs, dessen Wert im Programmcode in der Variable „brightness“ definiert ist.
Der Wert kann zwischen 0 (aus) und 255 (volle Helligkeit) liegen. Standardmäßig liegt dieser Wert hier bei „10“. Je nach Umgebungslicht, kann es sinnvoll sein, einen höheren Wert zu wählen. Aber, schon ein niedriger Wert ist in der Regel hell genug. Außerdem, je heller die LEDs leuchten bzw. je höher dieser Wert ist, desto höher ist auch der Stromverbrauch der LEDs.
Ein weiterer Aspekt ist der, dass schon bei einem mittleren Wert die LEDs unangenehm blenden können.

Programmcode für MMBasic

DIM b%(7) = (RGB(10,10,10), RGB(10,0,0), RGB(0,10,0), RGB(0,0,10), RGB(10,10,0), RGB(10,0,10), RGB(0,10,10), RGB(0,0,0))
SETPIN GP28, DOUT
BITBANG WS2812 O, GP28, 8, b%()

Darf es ein bisschen mehr sein?

Was kann man mit WS2812-RGB-LEDs alles machen? Ein paar Ideen zum Nachbauen.

Weitere verwandte Themen:

Frag Elektronik-Kompendium.de

Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython

Elektronik-Set Pico Edition

Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.

  • LED: Einschalten, ausschalten, blinken und Helligkeit steuern
  • Taster: Entprellen und Zustände anzeigen
  • LED mit Taster einschalten und ausschalten
  • Ampel- und Lauflicht-Steuerung
  • Elektronischer Würfel
  • Eigene Steuerungen programmieren

Elektronik-Set jetzt bestellen Online-Workshop buchen

Online-Workshop: Programmieren mit dem Raspberry Pi Pico

Programmieren mit dem Raspberry Pi Pico

Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.

Online-Workshop buchen

Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.

Termine und Newsletter-Anmeldung

 

Elektronik-Sets für das Hardware-nahe Programmieren