
Dumb vga
simon-frankau/dumb-vga
Hardware to generate a simple VGA-like video display using little more than a memory chip and counters

8x8x8 LED 3D Matrix
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.
8x8x8 LED 3D Matrix
Built by Broccoli > ME <
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
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 filesThe real firmware folder is the root frimware not app firmware and that is the one that matters for flashing and deployment
The browser creates 512 LED objects in JavaScript Each LED has
x = 0 to 7
y = 0 to 7
z = 0 to 7
color = RGBThe data is stored in this order
index = z * 64 + y * 8 + xThis 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
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
The current animation lineup is
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
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
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
The ESP32 S3 starts its own WiFi network not the home router Very on brand for a tiny cube project
WiFi name LED_Cube_Controller
Password password123
ESP32 IP 192 168 4 1The 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
http://192 168 4 1Some 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
The browser sends a POST request to
POST /api/frameThe request body is base64 text After decoding it has to contain exactly
512 LEDs x 3 bytes = 1536 bytesThe bytes are sent in this order
for z 0..7
for y 0..7
for x 0..7
red green blueOther API routes
GET /api/status checks if the ESP32 is alive
POST /api/clear turns the stored frame offThe 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
You will need VS Code the PlatformIO extension and the ESP32 platform Open the root firmware folder
F:\OneDrive\Desktop\cloned repos\WOW MATRIX\frimwareThe board config is already in platformio ini
[env esp32 s3 devkitc 1]
platform = espressif32
board = esp32 s3 devkitc 1
framework = arduino
monitor_speed = 115200First upload the files in data then upload the program
cd "F:\OneDrive\Desktop\cloned repos\WOW MATRIX\frimware"
pio run -t uploadfs
pio run -t uploaduploadfs 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
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"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
What is working right now
What is still missing
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
| Qty | Value | Footprint | References |
|---|---|---|---|
| 64 | 100R | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R25, R26, R27, R28, R29, R30, R31, R32, R33, R34, R35, R36, R37, R38, R39, R40 +48 |
| 16 | 1k | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16 |
| 16 | 2N2219 | Package_TO_SOT_THT:TO-39-3 | Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10, Q11, Q12, Q13, Q14, Q15, Q16 |
| 9 | 0.1uf | Capacitor_SMD:C_0805_2012Metric | C1, C2, C3, C4, C5, C6, C7, C8, C9 |
| 9 | 10k | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R17, R18, R19, R20, R21, R22, R23, R24, R91 |
| 9 | Conn_01x08 | Connector_PinHeader_1.00mm:PinHeader_1x08_P1.00mm_Vertical | J1, ROW1, ROW2, ROW3, ROW4, ROW5, ROW6, ROW7, ROW8 |
| 8 | 74HC574N | 74HC574N:DIP254P762X420-20 | U2, U3, U4, U5, U6, U7, U8, U9 |
| 7 | 0.1uf | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C15, C16, C17, C18, C19, C20, C21 |
| 5 | 10uf | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C12, C13, C24, C25, C33 |
| 4 | 1.5pf | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C29, C30, C31, C32 |
| 2 | 12pf | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C27, C28 |
| 2 | 1uf | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C14, C22 |
| 2 | 5.1k | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R89, R90 |
| 2 | SW_Push | Button_Switch_SMD:SW_SPST_PTS645Sx43SMTR92 | SW1, SW2 |
| 1 | 1000uf | Capacitor_THT:CP_Radial_D4.0mm_P1.50mm | C10 |
| 1 | 100nf | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C26 |
| 1 | 100uf | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C11 |
| 1 | 2.0nh(0.1nh) 500mA | Inductor_SMD:L_0805_2012Metric_Pad1.05x1.20mm_HandSolder | L1 |
| 1 | 2.2nh | Inductor_SMD:L_0805_2012Metric_Pad1.05x1.20mm_HandSolder | L4 |
| 1 | 2.7nh | Inductor_SMD:L_0805_2012Metric_Pad1.05x1.20mm_HandSolder | L3 |
| 1 | 22uf | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C23 |
| 1 | 24nh | Inductor_SMD:L_0805_2012Metric_Pad1.05x1.20mm_HandSolder | L2 |
| 1 | 40MHz (+-10ppm) | Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm_HandSoldering | Y1 |
| 1 | 74HC138 | 74HC138D:SOIC127P600X175-16N | U1 |
| 1 | AP2112K-3.3 | Package_TO_SOT_SMD:SOT-23-5 | U11 |
| 1 | Antenna_Chip | AH316M245001-T:ANTC3216X60N | AE1 |
| 1 | ER_OLEDM0.91_1x-I2C | Display:ER_OLEDM0.91_1x-I2C | U12 |
| 1 | ESD9B3.3ST5G | Diode_SMD:D_SOD-923 | D2 |
| 1 | ESP32-S3 | Package_DFN_QFN:QFN-56-1EP_7x7mm_P0.4mm_EP4x4mm | U10 |
| 1 | SS34 | Diode_SMD:D_SMA | D1 |
| 1 | USB_C_Receptacle_USB2.0_16P | Connector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_Horizontal | J2 |
| 1 | W25Q32JVSS | Package_SO:SOIC-8_5.3x5.3mm_P1.27mm | U13 |
It measures 151 × 150.7 mm and has 2 copper layers, 1.6 mm thick.
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.
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.
Its repository states no licence, so its author keeps all rights: ask Broccoliux before reusing the design.

simon-frankau/dumb-vga
Hardware to generate a simple VGA-like video display using little more than a memory chip and counters

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

g210101021/OpenStylophone-RP2040
Overview • Technical Summary • Architecture • Hardware Audit & Remediation • Schematic Subsystems • PCB Layout • Firmware Roadmap • Bill of Materials • Author


pstiasny/tv-doom
The detailed description of the build is described in this blog post:


