Technical specifications
Every number, honestly listed. If something is pre-production or pending, it says so here.
individually addressable LEDs
24 × 25 grid · WS2812B, GRB order
Display
- Pixel matrix
- 24 × 25 (600 LEDs)
- LED type
- WS2812B addressable RGB, GRB order
- Wiring
- Serpentine / zig-zag column layout
- Color depth
- 16.7M colors, 256-step per channel
- Refresh
- ~30 fps dedicated render core
- Brightness
- Software adjustable, 0–255
- Viewing
- Diffused panel, ~160° viewing angle
Compute & Connectivity
- Main MCU
- ESP32 dual-core @ 240 MHz
- Coprocessor
- ESP32-C3 (controller link)
- Controller link
- ESP-NOW low-latency wireless
- Wi-Fi
- 802.11 b/g/n 2.4 GHz
- Local access
- mDNS — http://pixelartdisplay.local
- Control API
- HTTP REST (/api/command, /api/telemetry)
- Mobile app
- Companion app for setup & control
- Firmware update
- OTA, dual-slot A/B with rollback
Modes & Features
- Arcade game
- Full game engine, score / level / next preview
- Clock
- Digital clock with NTP-style client sync
- Spectrum
- Live audio spectrum via I²S MEMS mic
- Environment
- Temperature & humidity display
- Audio input
- INMP441 I²S MEMS microphone
- Timekeeping
- PCF8563 RTC with backup
Power & Physical
- Input
- 5V recommended
- Idle draw
- ~0.4 W (standby screen)
- Typical draw
- ~4–9 W depending on content
- Panel size
- 16.9 × 16.1 × 1.6 in (43 × 41 × 4 cm)
- Weight
- ≈ 480 g
- Mount
- Desktop stand, 2× M3 wall-mount holes
- Operating temp
- 32°F – 104°F (0°C – 40°C)
For developers
Open enough to be yours
The firmware is open and the control surface is a plain HTTP API. Point Home Assistant at it, script it, or rewrite it entirely — a USB-C cable is all you need to reflash.
Send a command
curl -X POST http://pixelartdisplay.local/api/command \ -d "cmd=M" # spectrum mode # L R T D move / rotate / hard drop # S P G start / pause / reset # N C M H game / clock / spectrum / env # @HH:MM:SS sync the clock
Read telemetry
GET http://pixelartdisplay.local/api/telemetry
{
"score": 1240,
"lines": 6,
"mode": "game",
"started": 1,
"paused": 0,
"temp": 72,
"hum": 48
}