MATRIX LED | Highspeed Ambilight & WebUi

Ultra-low latency Ambilight system with Teensy 4.0 and ESP32.

Download as .zip Download as .tar.gz View on GitHub

MATRIXLED.Wallpaper

[MATRIX LED] - “Highspeed Ambilight & WebUi”

Einleitung

MATRIX LED ist ein High-Performance Ambilight-Projekt mit dem klaren Fokus auf maximale Geschwindigkeit, minimale Latenz und vollständige Messbarkeit. Dieses Projekt ist nicht als weiteres „Ambilight für den Alltag“ entstanden, sondern aus der Frage heraus:

Wie schnell können adressierbare LEDs wirklich angesteuert werden – wenn man nichts künstlich limitiert?

Projektbeschreibung

MATRIX LED kombiniert zwei Welten:

Nerd Stuff – Pipeline (Kurzfassung)

PC → USB → Teensy (DMA) → LEDs
ESP32 → UI / Web / Display (nicht zeitkritisch)

Features

[Performance HUD:] Framerate / CPU Temperature / CPU Usage / Data Rate / Free RAM / SPI Frequency

max.FPS.Wallpaper

##


[Debug Menü:] Performance / Thermal CPU / Power / Memory / Sys Info

Debug.Menü



[ Downloads & Extras ]

🌐 Web Interface (High-Res Version)

Da das Hintergrundbild zu groß für den internen Speicher des ESP32 ist, kann die High-Quality Version der Website hier heruntergeladen werden.

Download ZIP Downloads Releases

🖨️ 3D Druck (.stl)

Gehäuse-Dateien für den Controller und die Anschlüsse.


Hardware Specs

Taster

[ HIGH-PERFORMANCE PIPELINE ARCHITECTURE @ Teensy 4.0 ]

  1. CORE ARCHITECTURE (Teensy 4.0) (Cortex-M7)
      • High-performance NXP i.MX RT1062 crossover MCU delivers real-time operation
      • Clock: 696 MHz (Overclocked via CCM registers)
      • VCore: 1.200V (Dynamic Voltage Scaling via PMU_REG_CORE 0x14)
      • FPU: Double Precision Hardware Floating Point Unit enabled
  2. MEMORY HIERARCHY (Tightly Coupled Memory)
      • ITCM (Instruction TCM): 64-bit Bus, 0 Wait-States.
      • Hält “Hot Path” Code: processLEDs(), sendOutBuffer(), readExact().
      • Verhindert Cache-Misses und Pipeline-Stalls bei kritischen Loops.
      • DTCM (Data TCM): 64-bit Bus, 0 Wait-States.
      • Hält Stack, Frame-Buffer (rgbIn, outBufA/B) und globale Variablen.
      • Ermöglicht Single-Cycle Zugriff auf LED-Daten.

[ DATA PIPELINE: “ZERO-COPY” DOUBLE BUFFERING ]

STAGE 1: INGEST (USB High-Speed 480 Mbit/s)

STAGE 2: PROCESSING (SIMD-like Integer Math)

STAGE 3: SWAP (Atomic Transition)

STAGE 4: PRIMARY EGEST (LPSPI Output @ 16 MHz)

STAGE 5: SECONDARY EGEST (UART @ 4 Mbit/s)

[ TELEMETRY & SUPERVISOR ]

BENCHMARK DISCLAIMER MATRIX LED

  • FPS-Werte beschreiben den internen Durchsatz, nicht die sichtbare Bildrate.
  • Überabtastung dient Messung & Verifikation – nicht Darstellung.
  • Dieses Projekt zeigt intern gemessene Performance-Werte (FPS), die sich auf den reinen Daten- und LED-Pipeline-Durchsatz beziehen.

WICHTIG:

Beispiel:



[ HIGH-PERFORMANCE PIPELINE ARCHITECTURE @ ESP32 ]

  1. CORE ARCHITECTURE (ESP32-D0WD) (Dual-Core Xtensa LX6)
      • Clock: 240 MHz (Max Performance Profile via setCpuFrequencyMhz).
      • Cores: Asymmetric Multiprocessing (AMP).
      • Core 0: High-Speed Serial Ingest & Protocol Parsing.
      • Core 1: UI Rendering, WiFi Stack, WebServer & State Logic.
  2. DISPLAY SUBSYSTEM
      • Driver: TFT_eSPI (Hardware SPI).
      • Mode: Direct Framebuffer Access.

[ DATA PIPELINE: DUAL-CORE PARALLELISM ]

STAGE 1: INGEST (Core 0 - Background Task)

STAGE 2: STATE MANAGEMENT (Shared Memory)

STAGE 3: RENDERING & LOGIC (Core 1 - Main Loop)

[ WEB INTERFACE LAYER ]


[ Installation & Setup ]

1. Verkabeln / Wiring

Verbindung Teensy 4.0 <-> ESP32

Funktion Teensy 4.0 Pin ESP32 Pin Beschreibung
Serial RX 0 (RX1) 17 (TX2) Daten vom ESP zum Teensy
Serial TX 1 (TX1) 16 (RX2) Daten vom Teensy zum ESP
Sync/Trigger 3 33 Synchronisation & Reset
GND GND GND WICHTIG: Gemeinsame Masse verbinden!

ESP32 Display (ST7789 SPI)

Funktion ESP32 Pin Display Pin
VCC 3.3V VCC
GND GND GND
SCLK GPIO 18 SCL / SCK
MOSI GPIO 23 SDA / MOSI
RES GPIO 4 RES / RST
DC GPIO 27 DC
CS GPIO 26 CS

Teensy 4.0 Peripherie

Komponente Pin Anmerkung
LED Data 11 APA102 Data (Grün)
LED Clock 13 APA102 Clock (Gelb/Blau)
OLED SDA 18 I2C Data (SH1106)
OLED SCL 19 I2C Clock (SH1106)
Button 2 Taster gegen GND

2. Teensy 4.0 flashen

3. ESP32 flashen

4. Setup & Konfiguration

1. Hardware verbinden

Stelle sicher, dass ESP32 und Teensy korrekt miteinander verbunden sind (siehe Tabelle oben: RX/TX, Sync, GND).

2. Erster Start (WiFi Einrichtung)

Beim ersten Start (oder nach einem Reset) findet der ESP32 keine gespeicherten WLAN-Daten.

Schritte:

  1. Verbinde dein Handy oder PC mit dem WLAN MATRIX-SETUP.
  2. Öffne den Browser und gehe auf http://192.168.4.1.
  3. Gib deine WLAN-SSID und das Passwort deines Heimnetzwerks ein.

Wifi.Setup.Browser

  1. Klicke auf “VERBINDEN”.
  2. Das System speichert die Daten, startet neu und verbindet sich automatisch mit deinem Heimnetzwerk.


Setup.Screen.+.Debug

3. Normaler Start

Nach erfolgreicher Konfiguration lädt der ESP32 die Daten, verbindet sich mit dem WLAN und zeigt die IP-Adresse kurz auf dem Display an. Danach startet die Matrix-Oberfläche.

4. WLAN ändern / Reset

Um die WLAN-Daten zu löschen und den Setup-Modus erneut zu starten:

5. Zugangsdaten (OTA Update)

Für Firmware-Updates über das Webinterface (/upload):

5. Tastenbelegung / Button Functions

Teensy 4.0 (Externer Taster an Pin 2)

| Aktion | Funktion | | :— | :— | | Beim Start gedrückt halten | Reset der Konfiguration: Löscht die gespeicherte LED-Anzahl und andere Einstellungen. Der Teensy startet im “Learning Mode”. | | 1x Klick | Startet den LED-Selbsttest (Knight-Rider-Effekt). | | 2x Klick | Schaltet die globale Helligkeit um (100% → 50% → 15% → 100%). | | 5x Klick | Öffnet das Debug-Menü auf dem OLED-Display. | | Lang gedrückt (>1s) | Schaltet das OLED-Display an/aus (Stealth Mode). | | Im Debug-Menü: 1x Klick | Blättert zur nächsten Seite. | | Im Debug-Menü: Lang gedrückt | Verlässt das Debug-Menü. |

ESP32 (BOOT-Taster auf dem Board)

| Aktion | Funktion | | :— | :— | | Beim Start (1.5s Fenster) | WLAN-Reset: Löscht die gespeicherten WLAN-Daten (siehe Setup). | | 1x Klick (im Betrieb) | Ändert die Fallgeschwindigkeit des Matrix-Regens auf dem ESP32-Display. |


[WebUi]

MATRIXLED.Controller


AboutME

Mich haben Computer und technische Geräte schon immer fasziniert. Das begann bereits in meiner Kindheit, als mein Vater einen Commodore Plus/4 besaß. Von dort aus entwickelte sich meine Reise weiter – über den Amiga 1200, einen 486DX2 und viele weitere Systeme bis heute.

Technik war für mich nie nur ein Werkzeug, sondern etwas, das man verstehen, erkunden und verbessern kann.

Die ersten Ambilight-Systeme, die ich selbst besessen habe, waren noch sehr einfach: drei LED-Leisten, nicht adressierbar, physisch nur wenige LEDs – weit entfernt von dem, was heute möglich ist. Doch LEDs haben mich schon immer begeistert, vor allem wegen ihrer Farben, Dynamik und der Möglichkeiten, Atmosphäre zu erzeugen.

Aus dieser Begeisterung heraus entstand dieses Projekt. Mein Ziel war es nicht nur, ein Ambilight zu bauen, das gut aussieht, sondern eines, das messbar, erklärbar und technisch nachvollziehbar ist – mit klaren Antworten auf Fragen wie: “Wie schnell ist es wirklich? Wo liegen die Grenzen? Und wie viel Performance bleibt oft ungenutzt?”

Der Name MATRIX LED entstand eher intuitiv. Ich fand ihn einfach passend – und er lässt Raum für Fantasie. Wie der Film Matrix steht er für Technik, Tiefe und die Idee, hinter die Oberfläche zu schauen.

Was als kleines Experiment begann, ist mit der Zeit gewachsen. Nicht aus dem Wunsch nach Komplexität, sondern aus Neugier – und aus dem Spaß daran, Dinge weiterzudenken, zu optimieren und neu zu gestalten. Ich hoffe euch gefällt mein Projekt!!

grüße -= d3rb =-


Support & Kontakt

Gefällt dir das Projekt?

☕ Support

Wenn du meine Arbeit unterstützen m��chtest:

Lizenz

Binary-only Distribution.