Skip to the content
PCBKitNew board
2 layers151 × 150.7 mmMatrix, the printed circuit board in 3D

8x8x8 LED 3D Matrix

Size
151 × 150.7 mm
Copper layers
2
Thickness
1.6 mm
Parts
173
Nets
222
Pads
675
Tracks, vias
1,715, 297
Pours
2
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
9 Aug 2026
Updated
2 Nov 2026

Overview

Matrix is an open-source printed circuit board by Broccoliux, from the Broccoliux/WOW-MATRIX repository on GitHub. It is a 2-layer board of 151 × 150.7 mm with 173 parts on 222 nets, routed with 1,715 tracks and 297 vias.

It is built around the ESP32-S3, W25Q32JVSSIQ and 74HC574N, with the 74HC138, AP2112K-3.3 and ESD9B3.3ST5G among its other parts. Its parts include 91 resistors, 33 capacitors, 16 transistors, 13 ICs and 10 connectors. It belongs with the lEDs and displays boards and the ESP32 boards of this library.

Main components

7

README

README.md

WOW MATRIX

8x8x8 LED 3D Matrix image image image image

Built by Broccoli > ME <

what this project is

This project is my WiFi controlled 8x8x8 LED cube thing and honestly it is kinda fire

The app folder is the browser controller and the frimware folder is the ESP32 S3 code and the tiny local web server running on the board

The 3D enclosure is done and the PCB is done too the only part missing on the enclosure is the LED mounts because I am gonna add those once I print the enclosure and test the fit

The main thing still missing right now is the firmware because that is the part that actually makes the cube run for real

image image

repo layout

text
WOW MATRIX/
    app/
        index html       browser UI
        script js        3D cube logic controls animations WiFi sending
        style css        page styling and LED visuals
        firmware/        another firmware folder that exists in the app area
    frimware/
        platformio ini   ESP32 S3 PlatformIO config
        src/             ESP32 source files
        data/            files served by the ESP32 web server
    CAD/               cube design files and mechanical work
    imgs/              project images
    Matrix/            KiCad project and PCB related files

The real firmware folder is the root frimware not app firmware and that is the one that matters for flashing and deployment

how the web app works

The browser creates 512 LED objects in JavaScript Each LED has

text
x = 0 to 7
y = 0 to 7
z = 0 to 7
color = RGB

The data is stored in this order

text
index = z * 64 + y * 8 + x

This is basically a visual 3D model of the cube CSS 3D transforms place each LED dot in space and dragging the viewport rotates the whole cube around X Y and Z The LEDs are rendered as little glowing bulbs with a highlight a colored center and a dark socket behind them

controls in the page

bulk selection

Use the LED table checkboxes to pick a bunch of voxels choose a color and hit Apply That updates the browser model and sends the frame to the ESP32 when the cube is connected

animations

The current animation lineup is

  • Rain drops fall down the Y axis in every X Z column
  • Pulse the whole cube brightens and dims with the selected animation color
  • Wave brightness moves through X Y and Z together
  • Bouncing Ball a bright ball travels through the cube volume
  • Lightning a quick flash path jumps through multiple voxels

The animation color picker is separate from the bulk selection color because changing the bulk color should not silently change the animation color That would be weird and annoying also some animations are still a little rough and I will clean them up later

image mapper

Use the Image Mapper to load a photo or image The browser draws it into an 8x8 canvas and reads the pixels with Canvas getImageData

There are two modes

  • 3D Volume each image pixel is copied across all 8 Z layers so a full 8x8 image can use all 512 LEDs
  • Front Face each image pixel only appears on the front face so it uses up to 64 LEDs

Super dark or transparent pixels stay off The original RGB values are preserved per LED so the image does not get flattened into one single color

Loading an image also stops the current animation because the image frame has to stay on the cube

ESP32 WiFi setup

The ESP32 S3 starts its own WiFi network not the home router Very on brand for a tiny cube project

text
WiFi name LED_Cube_Controller
Password password123
ESP32 IP 192 168 4 1

The ESP32 also runs a DNS server If you type a hostname while connected to the cube WiFi it gets redirected to the board which is how the captive portal works on a lot of phones

If your phone does not auto open the controller just open this manually

text
http://192 168 4 1

Some phones say the WiFi has no internet That is normal Just choose stay connected anyway The cube network is local and does not need internet for the controller to work

how the ESP32 receives a frame

The browser sends a POST request to

text
POST /api/frame

The request body is base64 text After decoding it has to contain exactly

text
512 LEDs x 3 bytes = 1536 bytes

The bytes are sent in this order

text
for z 0..7
    for y 0..7
        for x 0..7
            red green blue

Other API routes

text
GET /api/status checks if the ESP32 is alive
POST /api/clear turns the stored frame off

The browser sends frames about 30 times per second while connected That limit is intentional so dragging the cube does not spam the ESP32 with a million requests

upload the firmware and web page

You will need VS Code the PlatformIO extension and the ESP32 platform Open the root firmware folder

text
F:\OneDrive\Desktop\cloned repos\WOW MATRIX\frimware

The board config is already in platformio ini

ini
[env esp32 s3 devkitc 1]
platform = espressif32
board = esp32 s3 devkitc 1
framework = arduino
monitor_speed = 115200

First upload the files in data then upload the program

bash
cd "F:\OneDrive\Desktop\cloned repos\WOW MATRIX\frimware"
pio run -t uploadfs
pio run -t upload

uploadfs pushes data index html data script js and data style css into the ESP32 LittleFS storage upload flashes the C++ firmware onto the board Both are needed

If you change anything in app copy the files into frimware data again before running uploadfs

bash
copy "F:\OneDrive\Desktop\cloned repos\WOW MATRIX\app\index html" "F:\OneDrive\Desktop\cloned repos\WOW MATRIX\frimware\data\index html"
copy "F:\OneDrive\Desktop\cloned repos\WOW MATRIX\app\script js" "F:\OneDrive\Desktop\cloned repos\WOW MATRIX\frimware\data\script js"
copy "F:\OneDrive\Desktop\cloned repos\WOW MATRIX\app\style css" "F:\OneDrive\Desktop\cloned repos\WOW MATRIX\frimware\data\style css"

what is done

The 3D enclosure is done and the PCB is done

The enclosure is missing the LED mounts for now because I am going to add those once I print the enclosure and test the fit

The main thing that is still missing is the firmware because that is the part that actually makes the cube do stuff in real life

current status

What is working right now

  • 3D 512 LED browser model
  • mouse and touch rotation
  • individual LED selection
  • bulk color selection
  • rain pulse wave ball and lightning animations
  • custom animation color
  • local image loading and 8x8 pixel sampling
  • 3D volume image mode
  • ESP32 access point setup
  • captive portal routes
  • status frame and clear HTTP API
  • LittleFS web app serving

What is still missing

  • final firmware logic to drive the real cube
  • testing the real cube frame order against the physical wiring
  • LED mounts on the enclosure after the print test

final vibe

This project is made by Broccoli and that is the real energy

The software side is already pretty solid and the hardware side is basically in place now The 3D enclosure and PCB are done The only real big gap left is the firmware and that is where the focus needs to be next

Parts

173
QtyValueFootprintReferences
64100RResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR25, R26, R27, R28, R29, R30, R31, R32, R33, R34, R35, R36, R37, R38, R39, R40 +48
161kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16
162N2219Package_TO_SOT_THT:TO-39-3Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10, Q11, Q12, Q13, Q14, Q15, Q16
90.1ufCapacitor_SMD:C_0805_2012MetricC1, C2, C3, C4, C5, C6, C7, C8, C9
910kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR17, R18, R19, R20, R21, R22, R23, R24, R91
9Conn_01x08Connector_PinHeader_1.00mm:PinHeader_1x08_P1.00mm_VerticalJ1, ROW1, ROW2, ROW3, ROW4, ROW5, ROW6, ROW7, ROW8
874HC574N74HC574N:DIP254P762X420-20U2, U3, U4, U5, U6, U7, U8, U9
70.1ufCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC15, C16, C17, C18, C19, C20, C21
510ufCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC12, C13, C24, C25, C33
41.5pfCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC29, C30, C31, C32
212pfCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC27, C28
21ufCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC14, C22
25.1kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR89, R90
2SW_PushButton_Switch_SMD:SW_SPST_PTS645Sx43SMTR92SW1, SW2
11000ufCapacitor_THT:CP_Radial_D4.0mm_P1.50mmC10
1100nfCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC26
1100ufCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC11
12.0nh(0.1nh) 500mAInductor_SMD:L_0805_2012Metric_Pad1.05x1.20mm_HandSolderL1
12.2nhInductor_SMD:L_0805_2012Metric_Pad1.05x1.20mm_HandSolderL4
12.7nhInductor_SMD:L_0805_2012Metric_Pad1.05x1.20mm_HandSolderL3
122ufCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC23
124nhInductor_SMD:L_0805_2012Metric_Pad1.05x1.20mm_HandSolderL2
140MHz (+-10ppm)Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm_HandSolderingY1
174HC13874HC138D:SOIC127P600X175-16NU1
1AP2112K-3.3Package_TO_SOT_SMD:SOT-23-5U11
1Antenna_ChipAH316M245001-T:ANTC3216X60NAE1
1ER_OLEDM0.91_1x-I2CDisplay:ER_OLEDM0.91_1x-I2CU12
1ESD9B3.3ST5GDiode_SMD:D_SOD-923D2
1ESP32-S3Package_DFN_QFN:QFN-56-1EP_7x7mm_P0.4mm_EP4x4mmU10
1SS34Diode_SMD:D_SMAD1
1USB_C_Receptacle_USB2.0_16PConnector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_HorizontalJ2
1W25Q32JVSSPackage_SO:SOIC-8_5.3x5.3mm_P1.27mmU13

Questions

How big is the Matrix PCB?

It measures 151 × 150.7 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Matrix use?

173 parts, built around the ESP32-S3, W25Q32JVSSIQ, 74HC574N and 74HC138. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Matrix KiCad files?

From the Broccoliux/WOW-MATRIX repository on GitHub, at the commit this page was made from: the board is Matrix/Matrix.kicad_pcb and its schematic Matrix/.history/Matrix.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Matrix design in my own project?

Its repository states no licence, so its author keeps all rights: ask Broccoliux before reusing the design.

Similar boards

  • 2 layers62.2 × 83.8 mmDumb vga, the printed circuit board in 3D

    Dumb vga

    simon-frankau/dumb-vga

    Hardware to generate a simple VGA-like video display using little more than a memory chip and counters

    26 parts2MIT
  • 4 layers40.5 × 80.2 mmNULL, the printed circuit board in 3D

    NULL

    jadenvv/NULL

    A version of a flipperzero that has the same capabilities of Sub-GHz RF, IR, Wifi, and NFC/RFID

    121 parts1
  • 2 layers151 × 95 mmDeneme, the printed circuit board in 3D

    Deneme

    g210101021/OpenStylophone-RP2040

    Overview • Technical Summary • Architecture • Hardware Audit & Remediation • Schematic Subsystems • PCB Layout • Firmware Roadmap • Bill of Materials • Author

    143 parts
  • 6 layers41.8 × 42 mmWatch pcb, the printed circuit board in 3D

    Watch pcb

    dezash123/watch-pcb

    ECAD for my custom smartwatch

    179 parts1
  • 4 layers49.2 × 26.3 mmTvplug2, the printed circuit board in 3D

    Tvplug2

    pstiasny/tv-doom

    The detailed description of the build is described in this blog post:

    92 parts1GPL-2.0
  • 4 layersWatch pcb, the printed circuit board in 3D

    Watch pcb

    dezash123/watch

    Circuit board for my custom smartwatch!!!!!

    191 partsApache-2.0
  • 4 layers153.7 × 108.5 mmVolPak-1000, the printed circuit board in 3D

    VolPak-1000

    raybello/KICAD-PCBs

    Repository for KICAD PCB Designs

    189 parts
  • 4 layers46 × 45.9 mmESP32-S3-MINI, the printed circuit board in 3D

    ESP32-S3-MINI

    vandychuob/ESP32-S3-Project

    65 parts12MIT