BLE progressive JPEG streamer

What this does

Web Bluetooth + ATT MTU

Stream a progressive JPEG over BLE notifications and reassemble in the browser

This page connects to the dino tester ESP32-C3 peripheral (all-in-one firmware), enables notifications, writes lets go, and then pulls the embedded progressive JPEG chunk by chunk via get <seq> writes. Each notification carries one chunk.

The current embedded image is the Chromium logo history -- a wide color photo so the progressive JPEG scans are visibly distinct (low-frequency color blocks -> coarse luminance -> sharp detail).

Each chunk carries an 8 byte little-endian header (seq, totalChunks, offset) followed by raw PNG bytes. The per-chunk payload depends on the effective ATT MTU, so a larger MTU = fewer notifications = faster image.

Required Chrome flags

--enable-features=NewBLEGattSessionHandling,WebBluetooth

Run

Connect first. Once notifications are subscribed, click Send 'lets go' to trigger streaming. Some stacks require a small delay between CCCD subscribe and the write.

Live reconstruction

MTU
-
Chunk payload
-
Chunks
0 / 0
Bytes
0 / 0
no image yet

Log

Ready.