GitHub
Home
About
Menu
Home
About
Desk HUD
Desk HUD
My personal desk display on a 64×32 LED matrix.
Architecture
UDP PACKET · 1,032 B
×4 PER FRAME
HUD1
magic
frame
u16 BE
chunk
0–3
bright
0–100
pixels · 8 rows × 64 × RGB565 BE
1,024 B
frame path
telemetry
data · control
INTERNET
HTTPS · JSON
HOME LAN
MAC MINI
desk-hud · Python · asyncio
ESP32-S3
Arduino · C++
LED PANEL
Waveshare 64×32
Sleeper
api.sleeper.app
matchups · rosters
ESPN Fantasy
lm-api-reads.fantasy.espn.com
matchups · cookie auth
BART
api.bart.gov
departures · Civic Center
Open-Meteo
api.open-meteo.com
forecast · WMO codes
SSEC RealEarth
realearth.ssec.wisc.edu
GOES-West fog · low cloud
SOURCE TASKS
CACHES
FRAME LOOP · 30 FPS
fetch_sleeper()
every 60 s
error → keep last data
sleeper
data · fetched_at
stale > 3 min
fetch_espn()
every 60 s · if cookies
error → keep last data
espn
data · fetched_at
stale > 3 min
fetch_bart()
every 30 s
error → keep last data
bart
data · fetched_at
stale > 90 s
fetch_weather()
every 10 min
error → keep last data
weather
data · fetched_at
stale > 30 min
fetch_sky()
every 5 min
error → keep last data
sky
data · fetched_at
held 1 h at dusk/dawn
GET
writes
Scheduler
fantasy → bart → weather
→ wave → debug · skip off
Render page
Pillow · 64×32 RGB
bitmap fonts 5×7 · 4×6
pack_frame
gamma 2.2 LUT → RGB565
4 chunks + brightness
FrameSender
UDP → :7777
mDNS lookup every 60 s
Control API
FastAPI · :8080
GET /
GET /api/state
GET /api/preview.png
POST /api/page
POST /api/interval
POST /api/next · prev
POST /api/brightness
State
state.json
pages · 1–60 s · 0–100
HardwareMonitor
board status
Mac mini · psutil 5 s
good · warn · bad
Status listener
UDP :7778 · JSON v1
writes
pages · interval
brightness
debug
page
Browser
zm-mini.local:8080
iOS Shortcuts
POST /api/next …
HTTP
UDP receive :7777
len 1032 · "HUD1" · chunk ≤ 3
else bad_packets++
Assemble frame
chunkMask |= 1 << chunk
new frame no. → drop partial
Double buffer
draw into back buffer
flip at 0b1111 · set brightness
HUB75 DMA out
LCD peripheral streams bit-planes
1/16 scan · 0 CPU per pixel
Status tx
JSON every 2 s
→ hub :7778
Failsafe
3 s no frame
→ "NO HUB"
WiFi STA · modem sleep off · mDNS desk-hud.local
WiFi
30 fps
124 KB/s
HUB75 · 13 signals
rows n and n+16 lit together
Panel
1/16 scan · 2,048 px
R1 G1 B1 → rows 0–15
R2 G2 B2 → rows 16–31
A B C D → row pair 0–15
CLK shift · LAT latch
OE light · brightness