Architectural LED Wall Art

by ipad.bendavid in Circuits > LEDs

2343 Views, 7 Favorites, 0 Comments

Architectural LED Wall Art

IMG_5018.PNG
IMG_4496.JPG

Introduction

This project is a large-format architectural LED wall art composed of 928 individually addressable WS2812 LEDs, arranged in concentric square frames.

Beyond its visual appearance, the panel is designed as a fully connected lighting system, featuring:

  1. ESP32-based control
  2. WebSocket real-time control
  3. Native Home Assistant integration
  4. Multi-zone architecture
  5. High-current, fused power distribution
  6. Real-time audio-reactive modes using I2S

The goal was not to build a screen, but a geometric light object that blends electronics, structure, and light into a single, permanent installation.


Project Background & Evolution

This project has a long history.

An earlier version of this LED panel was already functional about eight years ago, originally built around an ESP8266. At the time, it supported basic animations and network control (via Blink ! RIP) but was limited by processing power, memory, and peripheral capabilities.

The current version is a complete redesign, rebuilt around an ESP32. Modern development tools, including AI-assisted coding (Codex), were used to accelerate development, refactor legacy logic, and implement new features.

This transition enabled:

  1. More complex and smoother animations
  2. Stable WebSocket communication
  3. Proper smart home integration (HA, MQTT)
  4. And, real-time audio-reactive effects via I2S

What started as a simple LED experiment evolved into a robust, modern lighting system.

Concept & Visual Design

The visual design is based on nested square frames, alternating between illuminated and dark areas.

This geometry was chosen to:

  1. Emphasize depth and symmetry
  2. Create a tunnel-like optical illusion
  3. Preserve sharp edges and high contrast
  4. Remain visually readable even with slow animations

No diffuser is used.

The visual quality relies on LED spacing, frame depth, and geometric separation, resulting in a deliberately graphic and architectural look rather than soft blended light.

Supplies

IMG_5041.JPG
IMG_4470.JPG

Hardware Overview

LEDs

  1. 928 × WS2812 (5 V, single data line)

WS2812 LEDs were chosen for their 1 wire data-only protocol, which greatly simplifies wiring

Controller

  1. ESP8266 was capable of 5 strips (and has been working smoothly) but ESP32 is no brainer better option. Enough processing power for complex animations, Native Wi-Fi, WebSocket support and I2S audio input for audio-reactive modes

An INMP441 I2S microphone is used for audio-reactive modes, adding extra wiring for audio and clock signals.

Power Supply

  1. 5 V / 60 A power supply

Due to the high current requirements, the power supply uses active cooling with an internal fan, which produces some audible noise under load.

Power Distribution Board & Auxiliary Control

Power distribution is handled by a dedicated custom distribution board, designed specifically for this installation.

  1. 3 fused power rails (15 A each)
  2. 3 bulk capacitors for voltage stabilization
  3. A relay, used to control the main LED power rail
  4. A physical push button, providing local control without relying on the network
  5. A small auxiliary 5 V power supply, dedicated to control electronics

The auxiliary power supply allows the ESP32, relay, and control logic to remain powered independently from the high-current LED rail.

  1. Safe power-up and shutdown sequences (as 928 idle LEDs consume 12W)
  2. Local on/off control via the button
  3. Network-independent operation
  4. Reduced electrical stress on the main power supply

The relay can be controlled both locally (button) and remotely (WebSocket / Home Assistant),

This project requires a lot of internal wiring.

  1. Multiple LED strips and power injection points
  2. Many power and data cables
  3. Several connectors for maintenance


A custom PCB handles power distribution and control, and most connections are soldered.

Frame Construction & Cut List

The frame is built as a layered structure, combining a back plate, square separators, and external borders. This approach ensures rigidity, precise LED spacing, and clean geometric separation between zones.

All dimensions are in millimeters.

Overall frame depth: 32.35 mm

Back Plate with Frame Supports

  1. 1 × back plate : Size: 722 × 722 × 11
  2. 4 × 733 × 88 × 11
  3. Provides rigidity for the whole panel

Square Separators (90° cuts) X5

These pieces create the concentric square layout.

  1. 4 × 65 × 25.3 × 5.7
  2. 4 × 194 × 25.3 × 5.7
  3. 4 × 324 × 25.3 × 5.7
  4. 4 × 453 × 25.3 × 5.7
  5. 4 × 582 × 25.3 × 5.7

Outer Borders (45° cuts) X 6

These define the visual depth and finish.

  1. 4 × 97 × 32.35 × 5.5
  2. 4 × 226 × 32.35 × 5.5
  3. 4 × 356 × 32.35 × 5.5
  4. 4 × 485 × 32.35 × 5.5
  5. 4 × 615 × 32.35 × 5.5
  6. 4 × 744 × 32.35 × 5.5


Frame Assembly

IMG_4481.JPG
IMG_4508.JPG
Frame.jpg

Each square is built as a rigid wooden ring made of four straight segments.

  1. Assemble the four segments into a square.
  2. Fix the corners (glue and/or screws).
  3. Check that all angles are 90° and the frame is flat.
  4. Complete one full square at a time
  5. Assemble the four 45° segments into a frame
  6. Glue the square and the frame.


Repeat the process for each of the 5 Square. The Outer square is supported by the Frame.

Led Soldering

LED_identification.jpg

LED Strip Layout

To minimize wiring complexity and voltage drop, I divided the display into 6 physical zones. The panel is driven by 8 ESP32 outputs, each controlling one continuous WS2812B LED strip.

The zones are only a mechanical organization of the panel. They do not correspond to individual LED strips.

Output assignment


Output 1 → Strip A (112 LEDs)

Output 2 → Strip B (72 LEDs)

Output 3 → Strip C (80 LEDs)

Output 4 → Strip D (104 LEDs)

Output 5 → Strip E (112 LEDs)

Output 6 → Strip F (136 LEDs)

Output 7 → Strip G (144 LEDs)

Output 8 → Strip H (168 LEDs)



The Special Case of Strip A

Unlike the other strips, Strip A continues across several physical zones.

Instead of bringing a long return wire back to the controller, the strip simply continues into the next section of the panel.

Strip A is special.


It is a single continuous WS2812B strip that spans several physical sections:


Output 1

A (112 LEDs)

A1 (48 LEDs)

A2 (40 LEDs)

A3 (16 LEDs)

A4 (8 LEDs)

Although the strip appears in several places on the panel, it is one single continuous WS2812B strip connected to a single ESP32 output.

Why this layout?

This routing provides several advantages:

  1. shorter power wires
  2. fewer connectors
  3. reduced voltage drop
  4. simpler assembly
  5. no unnecessary return cable
  6. easier maintenance

The software simply treats each section as a different coordinate range while the hardware remains a single continuous strip.

Wiring


/*
* ESP32 Output Mapping
*
* Output 1 -> Strip A
* Output 2 -> Strip B
* Output 3 -> Strip C
* Output 4 -> Strip D
* Output 5 -> Strip E
* Output 6 -> Strip F
* Output 7 -> Strip G
* Output 8 -> Strip H
*/

PCB / Assembly

PCB.jpg
WhatsApp Image 2026-07-29 at 8.06.20 PM (2).jpeg
WhatsApp Image 2026-07-29 at 8.06.20 PM (1).jpeg
WhatsApp Image 2026-07-29 at 8.06.20 PM.jpeg

The custom PCB connects the ESP32 to the eight LED strip data outputs, the relay, and the I²S microphone.


The small 5 V AC-to-DC module powers only the ESP32 and the low-power electronic components on the PCB.


The LED strips are powered independently from the control electronics by a dedicated 5 V / 60 A power supply. This prevents the high LED current from flowing through the controller PCB.


The firmware supports configurable current limiting (FastLED power management), allowing the maximum current draw to be capped in software. This protects the power supply, reduces heat, and increases system reliability, especially when displaying full-white patterns.


The grounds of the ESP32 power supply and the LED power supply must be connected together so that the LED data signals have the same electrical reference.


Controller PCB Components


Main controller:

- 1 × ESP32 development board


LED signal interface:

- 1 × SN74HCT245DBR 8-channel logic-level buffer

- 8 × 330 Ω series resistors for the LED data outputs

- 2 × 100 nF ceramic decoupling capacitors

- 1 × X2530WV-08-PTSN 8-pin LED output connector


Audio input:

- 1 × INMP441 I²S digital microphone


Relay control:

- 1 × JZC-32F/005-HS3 5 V relay

- 1 × AO3400A N-channel MOSFET

- 1 × SS54 Schottky flyback diode

- 1 × 220 Ω resistor

- 1 × 100 kΩ resistor


Power supply:

- 1 × HLK-5M05 isolated AC-to-DC module, 230 V AC to 5 V DC

- 1 × 1888700 terminal block


User interface:

- 1 × push-button header


LED power supply


The external 5 V / 60 A power supply powers:


All eight LED strips

Power-injection cables

LED distribution terminals


Do not route the full LED current through the ESP32 PCB unless its copper traces and connectors were specifically designed for this current.


Use appropriately sized cables, fuses and distribution terminals for the LED power connections.


Power should be injected at several locations along the installation to reduce voltage drop. This is particularly important for the longest strips and for effects that display bright white over many LEDs.

Code Upload

Software Overview

The project firmware is based on:

ESP32
PlatformIO
FastLED
HTTP web server
WebSocket server
MQTT
Arduino OTA
I²S audio input
FFT audio analysis

The ESP32 controls all eight LED strips and provides a complete web interface for selecting animations and changing settings.

The firmware also supports integration with Home Assistant through MQTT.

Main Features

The firmware includes:

Control of eight independent LED outputs
Real-time web interface
WebSocket control
Several LED animations and patterns
Five-band FFT audio visualization
INMP441 digital microphone support
MQTT integration
Home Assistant integration
OTA firmware updates
Web-based serial console
Configurable software current limiting
Automatic firmware build numbering


The code source is available here.

https://github.com/DanBendavid/AGAM-Controller.git