SK6812 RGBW – Adressierbare LED-Matrix (8x8)
Individuell ansteuerbare RGBW-LEDs für farbenfrohe Lichteffekte, Animationen und einfache Pixelgrafiken.
- Übersicht
- Technische Daten
- Pinbelegung & Anschluss
- Matrix-Anordnung
- Beispielcode
- Tipps & häufige Fehler
- Erweiterte Beispiele
- Weiterführende Links
#Ü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_GRBWprü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