Skip to main content

SK6812 RGBW – Adressierbare LED-Matrix (8x8)

Individuell ansteuerbare RGBW-LEDs für farbenfrohe Lichteffekte, Animationen und einfache Pixelgrafiken.


#Übersicht

Die SK6812 ist eine adressierbare LED mit integriertem Controller, die über ein einzelnes Datensignal angesteuert wird. Im Gegensatz zu herkömmlichen RGB-LEDs verfügt die SK6812 RGBW über einen zusätzlichen weißen Kanal für reineres Weiß und bessere Farbmischung. Die 64 LEDs sind in einer 8x8-Matrix zeilenweise angeordnet und können einzeln mit 32-Bit-Farbwerten (je 8 Bit für Rot, Grün, Blau und Weiß) angesteuert werden.


#Technische Daten

Eigenschaft Wert
LED-Typ SK6812 RGBW
Anzahl LEDs 64 (8x8 Matrix)
Farbkanäle 4 (Rot, Grün, Blau, Weiß)
Farbtiefe 32 Bit (8 Bit pro Kanal)
Versorgungsspannung 5 V (toleriert 3.3V Logik)
Stromverbrauch max. 60 mA pro LED
Max. Gesamtstrom 64 × 60 mA = 3.84 A
Datenprotokoll Proprietär (800 kHz)

#Pinbelegung & Anschluss

Matrix-Pin ESP32-C6 Pin Beschreibung
DIN GPIO14 Dateneingang
VCC 5V Versorgung
GND GND Masse

#Hinweise

  • Stromversorgung: Bei voller Helligkeit aller LEDs werden bis zu 3.84A benötigt. Helligkeit im Code begrenzen!
  • Datenformat: GRBW-Reihenfolge (Grün, Rot, Blau, Weiß)

#Matrix-Anordnung

Die LEDs sind zeilenweise angeordnet:

LED-Index:
0 1 2 3 4 5 6 7 ← Zeile 0
8 9 10 11 12 13 14 15 ← Zeile 1
16 17 18 19 20 21 22 23 ← Zeile 2
24 25 26 27 28 29 30 31 ← Zeile 3
32 33 34 35 36 37 38 39 ← Zeile 4
40 41 42 43 44 45 46 47 ← Zeile 5
48 49 50 51 52 53 54 55 ← Zeile 6
56 57 58 59 60 61 62 63 ← Zeile 7
Koordinaten (x, y) → Index: index = y * 8 + x

#Beispielcode

#MicroPython – Lauf-LED mit Zufallsfarbe

"""
SK6812 RGBW Matrix - Lauf-LED Demo
Eine LED wandert von Position 0 bis 63 und zurück,
bei jedem Durchlauf mit einer neuen Zufallsfarbe.
"""
from machine import Pin
from neopixel import NeoPixel
from time import sleep_ms
import random
# Konfiguration
LED_PIN = 14
NUM_LEDS = 64
# NeoPixel initialisieren (bpp=4 für RGBW)
np = NeoPixel(Pin(LED_PIN), NUM_LEDS, bpp=4)
def zufallsfarbe():
"""Erzeugt eine zufällige RGB-Farbe (W-Kanal = 0)."""
r = random.randint(0, 255)
g = random.randint(0, 255)
b = random.randint(0, 255)
return (r, g, b, 0)
def alle_aus():
"""Schaltet alle LEDs aus."""
for i in range(NUM_LEDS):
np[i] = (0, 0, 0, 0)
np.write()
# Hauptprogramm
print("SK6812 Lauf-LED Demo")
print("LED wandert hin und her mit Zufallsfarben")
alle_aus()
while True:
# Neue Farbe für diesen Durchlauf
farbe = zufallsfarbe()
print(f"Neue Farbe: R={farbe[0]}, G={farbe[1]}, B={farbe[2]}")
# Vorwärts: LED 0 bis 63
for i in range(NUM_LEDS):
alle_aus()
np[i] = farbe
np.write()
sleep_ms(30)
# Neue Farbe für Rückweg
farbe = zufallsfarbe()
# Rückwärts: LED 63 bis 0
for i in range(NUM_LEDS - 1, -1, -1):
alle_aus()
np[i] = farbe
np.write()
sleep_ms(30)

#C (Arduino/pioarduino) – Lauf-LED mit Zufallsfarbe

/**
* SK6812 RGBW Matrix - Lauf-LED Demo
* Eine LED wandert von Position 0 bis 63 und zurück,
* bei jedem Durchlauf mit einer neuen Zufallsfarbe.
*/
#include <Arduino.h>
#include <Adafruit_NeoPixel.h>
// Konfiguration
#define LED_PIN 14
#define NUM_LEDS 64
// NeoPixel initialisieren (NEO_GRBW für SK6812 RGBW)
Adafruit_NeoPixel strip strip(NUM_LEDS, LED_PIN, NEO_GRBW + NEO_KHZ800);
// Erzeugt eine zufällige Farbe
uint32_t zufallsfarbe zufallsfarbe() {
uint8_t r = random(0, 256);
uint8_t g = random(0, 256);
uint8_t b = random(0, 256);
return strip.Color(r, g, b, 0); // W-Kanal = 0
}
// Schaltet alle LEDs aus
void alleAus alleAus() {
strip.clear();
strip.show();
}
void setup setup() {
Serial.begin(115200);
delay(1000);
Serial.println("SK6812 Lauf-LED Demo");
Serial.println("LED wandert hin und her mit Zufallsfarben");
strip.begin();
strip.setBrightness(50); // Helligkeit begrenzen (0-255)
alleAus();
// Zufallsgenerator initialisieren
randomSeed(analogRead(0));
}
void loop loop() {
// Neue Farbe für diesen Durchlauf
uint32_t farbe = zufallsfarbe();
Serial.println("Neue Farbe generiert");
// Vorwärts: LED 0 bis 63
for (int i = 0; i < NUM_LEDS; i++) {
alleAus();
strip.setPixelColor(i, farbe);
strip.show();
delay(30);
}
// Neue Farbe für Rückweg
farbe = zufallsfarbe();
// Rückwärts: LED 63 bis 0
for (int i = NUM_LEDS - 1; i >= 0; i--) {
alleAus();
strip.setPixelColor(i, farbe);
strip.show();
delay(30);
}
}

Benötigte Bibliothek für Arduino/pioarduino:

In platformio.ini hinzufügen:

lib_deps =
adafruit/Adafruit NeoPixel@^1.12.0

#Tipps & häufige Fehler

  • Falsche Farbreihenfolge: SK6812 verwendet GRBW. Bei falschen Farben NEO_GRBW prüfen.

  • LEDs flackern: Interrupts können das Timing stören. Bei Problemen andere Bibliotheken testen.

  • Zu hoher Stromverbrauch: Helligkeit mit setBrightness() (Arduino) oder niedrigeren RGB-Werten begrenzen.

  • Erste LED defekt, Rest dunkel: Die Daten werden in Reihe weitergeleitet – erste LED prüfen.


#Erweiterte Beispiele

Weitere Beispiele wie Regenbogen-Animation, Matrix-Scan, Welleneffekt, Textscrolling und Zeichenfunktionen findest du in der separaten Datei:

SK6812 Matrix – Erweiterte Beispiele MicroPython
SK6812 Matrix – Erweiterte Beispiele C/Arduino


#Weiterführende Links