WS2812-ledpixels begrijpen en aansturen

FunduinoLaatst bijgewerkt op

Einzelne Pixel einer WS2812-Matrix, eines Streifens oder Rings ansteuern

WS2812-LEDs – vergleichbar mit Neopixel-LEDs – sind einzeln ansteuerbare Farb-LEDs. Jede von ihnen kennt ihre eigene Farbe und Helligkeit, und alle hängen an einer einzigen Datenleitung.

In dieser Anleitung fängst du bewusst klein an: erst ein einzelner Pixel, dann zwei gleichzeitig, dann drei nacheinander. Auf Regenbogeneffekte verzichten wir zunächst – so verstehst du Schritt für Schritt, was der Code tut. Ob du dabei eine 8×8-Matrix, einen Streifen oder einen Ring verwendest, spielt keine Rolle.

Aufbau: WS2812-Pixelmatrix mit drei Kabeln am Arduino
Drei Kabel genügen: 5V, GND und die Datenleitung

Was LED-Pixel sind

LED-Pixel sind einzelne Leuchtdioden, die als kleinste Einheit in einer LED-Anzeige oder einem LED-Bildschirm eingesetzt werden. Jeder Pixel besteht aus drei kleinen LEDs in Rot, Grün und Blau. Kombinierst du diese drei Farben in unterschiedlichen Helligkeiten, entstehen Millionen von Farbtönen. LED-Pixel sind die Bausteine großformatiger Anzeigen, wie du sie von Werbetafeln, Stadien, Konzerthallen und Fernsehern kennst.

Es gibt sie in verschiedenen Bauformen:

  • Einzelne LED-Pixel: einzeln verkabelt, als flexible Kette oder als Punktlichtquelle – gut für kreative Installationen.
  • Module: mehrere Pixel auf einer Einheit, die sich zu größeren Bildschirmen zusammensetzen lassen. Leicht austauschbar und skalierbar.
  • Panels: größere Einheiten mit vielen LEDs in fester Anordnung, einfach zu montieren, hohe Auflösung und Helligkeit.
  • Streifen: flexible Bänder mit vielen LEDs in einer Reihe, die sich biegen und formen lassen.
  • Matrix: rechteckige Anordnung, mit der sich Text, Grafiken und Animationen darstellen lassen.
  • Ringe: runde Anordnungen, beliebt für Uhren und dekorative Effekte.

Die Sketche in dieser Anleitung funktionieren mit allen Bauformen – ob Matrix, Streifen oder Ring, macht für den Code keinen Unterschied.

Aufbau: drei Kabel genügen

Der Aufbau ist für alle folgenden Aufgaben derselbe. Die Pixel-Matrix – oder der Streifen, oder der Ring – wird mit nur drei Kabeln an den Mikrocontroller angeschlossen: 5V für die Spannungsversorgung, GND für die Masse und die Datenleitung. In den Sketchen hängt die Datenleitung an Pin 9.

Achte auf den Strom: Ein einzelner WS2812-Pixel zieht bei voller Helligkeit in Weiß rund 60 Milliampere. Bei einer 8x8-Matrix wären das über 3 Ampere – weit mehr, als der USB-Anschluss und der Spannungsregler des Arduino liefern können. Für die Aufgaben hier, bei denen nur einzelne Pixel leuchten, reicht die Versorgung über den Arduino. Sobald du viele Pixel gleichzeitig hell leuchten lassen willst, brauchst du ein eigenes 5-V-Netzteil, dessen GND du mit dem GND des Arduino verbindest.

Aufbau: WS2812-Pixelmatrix mit drei Kabeln am Arduino
Drei Kabel genügen: 5V, GND und die Datenleitung

Bibliothek installieren

Vor dem Programmieren brauchst du eine Bibliothek, die dir die Ansteuerung der Pixel abnimmt. Wir verwenden die von Adafruit: Du findest sie in der Bibliotheksverwaltung der Arduino-Software unter dem Suchbegriff Adafruit NeoPixel.

Im Sketch gibst du gleich zu Beginn an, über wie viele Pixel dein Modul verfügt – bei einer 8x8-Matrix sind das 64 – und an welchem Pin die Datenleitung hängt. Danach kann es losgehen.

Aufgabe 1: Einen einzelnen Pixel leuchten lassen

Zunächst verzichten wir auf komplexe Farbspielereien und Regenbogeneffekte und steuern nur einen einzelnen Pixel an – so lernst du den Code Schritt für Schritt kennen.

Wichtig beim Zählen: Der erste Pixel trägt die Nummer 0. setPixelColor(22, …) spricht also den 23. Pixel an.

Aufgabe 1: Einen einzelnen Pixel leuchten lassen
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif

#define PIN 9  // Datenleitung an Pin 9

// 64 = Anzahl der Pixel des angeschlossenen Moduls (hier eine 8x8-Matrix)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(64, PIN, NEO_GRB + NEO_KHZ800);

void setup()
{
  strip.begin();
  strip.show();  // Alle Pixel zu Beginn ausschalten
}

void loop()
{
  // Der Pixel Nr. 23 wird mit der Farbe Rot angesteuert. Der erste Pixel trägt die
  // Nummer 0, der letzte der 64 Pixel die Nummer 63. Die Farbe änderst du über die
  // drei Zahlen hinter strip.Color: sie stehen für Rot, Grün und Blau. Je größer die
  // Zahl zwischen 0 und 255, desto heller leuchtet die jeweilige Farbe. Aus der
  // Kombination von zwei oder drei Farben entstehen sehr viele weitere Farbtöne.
  strip.setPixelColor(22, strip.Color(255, 0, 0));

  // Dieser Befehl schaltet die zuvor gesetzten Pixel ein, hier nur die Nummer 23.
  strip.show();
}

Aufgabe 2: Zwei Pixel gleichzeitig in unterschiedlichen Farben

Du kannst beliebig viele Pixel hintereinander setzen, bevor du strip.show() aufrufst. Erst dieser Befehl schickt die Farben an die LEDs – und dann leuchten alle gesetzten Pixel gleichzeitig auf.

Aufgabe 2: Zwei Pixel gleichzeitig in unterschiedlichen Farben
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif

#define PIN 9  // Datenleitung an Pin 9

Adafruit_NeoPixel strip = Adafruit_NeoPixel(64, PIN, NEO_GRB + NEO_KHZ800);

void setup()
{
  strip.begin();
  strip.show();  // Alle Pixel zu Beginn ausschalten
}

void loop()
{
  // Der Pixel Nr. 11 wird mit der Farbe Grün angesteuert.
  strip.setPixelColor(10, strip.Color(0, 255, 0));
  // Der Pixel Nr. 21 wird mit der Farbe Blau angesteuert.
  strip.setPixelColor(20, strip.Color(0, 0, 255));

  // Dieser Befehl schaltet die zuvor gesetzten Pixel ein, hier die Nummern 11 und 21.
  strip.show();
}

Aufgabe 3: Drei Pixel nacheinander leuchten lassen

Jetzt kommt die Zeit ins Spiel: Zwischen Ein- und Ausschalten wartet der Sketch jeweils eine Sekunde. Ausgeschaltet wird ein Pixel, indem du ihm die Farbe (0, 0, 0) zuweist – also weißes Nichts aus Rot, Grün und Blau.

Wenn du tiefer einsteigen willst, lohnt sich der NeoPixel Uberguide von Adafruit. Die passenden Bauteile findest du in unserem Shop.

Aufgabe 3: Drei Pixel nacheinander leuchten lassen
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif

#define PIN 9  // Datenleitung an Pin 9

Adafruit_NeoPixel strip = Adafruit_NeoPixel(64, PIN, NEO_GRB + NEO_KHZ800);

void setup()
{
  strip.begin();
  strip.show();  // Alle Pixel zu Beginn ausschalten
}

void loop()
{
  // Pixel 11 ein- und wieder ausschalten
  strip.setPixelColor(10, strip.Color(0, 255, 0));  // Pixel Nr. 11 in Grün
  strip.show();                                     // Pixel Nr. 11 einschalten
  delay(1000);                                      // Pixel Nr. 11 bleibt eine Sekunde an
  strip.setPixelColor(10, strip.Color(0, 0, 0));    // keine Farbe: (0, 0, 0)
  strip.show();                                     // Pixel Nr. 11 ausschalten

  // Pixel 12 ein- und wieder ausschalten
  strip.setPixelColor(11, strip.Color(0, 0, 255));  // Pixel Nr. 12 in Blau
  strip.show();                                     // Pixel Nr. 12 einschalten
  delay(1000);                                      // Pixel Nr. 12 bleibt eine Sekunde an
  strip.setPixelColor(11, strip.Color(0, 0, 0));    // keine Farbe: (0, 0, 0)
  strip.show();                                     // Pixel Nr. 12 ausschalten

  // Pixel 13 ein- und wieder ausschalten
  strip.setPixelColor(12, strip.Color(255, 0, 0));  // Pixel Nr. 13 in Rot
  strip.show();                                     // Pixel Nr. 13 einschalten
  delay(1000);                                      // Pixel Nr. 13 bleibt eine Sekunde an
  strip.setPixelColor(12, strip.Color(0, 0, 0));    // keine Farbe: (0, 0, 0)
  strip.show();                                     // Pixel Nr. 13 ausschalten
}
Handleiding beoordelen

Opmerkingen

Stel een vraag of deel je ervaring

Neem contact met ons op als iets niet werkt. Vermeld daarbij je board en de foutmelding.

We controleren elke reactie voordat deze wordt gepubliceerd. Je e-mailadres blijft bij ons.