A little round screen that listens to the room. Ten of them, all watching the same beat, all drawing the same thing at the same time. This page is how it gets better.
localhost). If you got here over plain http://, try the
https:// version of the same address.
An ESP32-S3 with a 1.28″ round colour display. It has no buttons you need, no app, and no account. It wakes up, finds the other badges over a direct radio link (ESP-NOW — no wifi, no router, no internet), and they agree on what the music is doing. Then they all draw it.
It runs off USB power or a small battery. If it ever stops doing anything interesting, come back to this page and give it a new brain.
There are two tiny buttons on the board, BOOT and RESET. This sequence forces the chip into download mode, where it will always accept a flash even if the firmware on it is completely broken:
hold BOOT → tap RESET → release BOOT
Do that with the cable plugged in, then press Connect & flash again. The port will reappear. This is the fix for almost everything.
Nine times out of ten this is the cable. Swap it for one you know moves data (the one that came with a phone or a hard drive, not a charger-only cable) and try a different USB port — ideally one directly on the machine, not through a hub or a dock.
If you’re on Windows and still nothing, you may need the USB-serial driver
for the board’s bridge chip. Look in Device Manager for an unknown device
while the badge is plugged in; the name it shows tells you which driver
(CH34x or CP210x) to install.
Something else already has the port open — a serial monitor, the Arduino
IDE, PlatformIO, a terminal running screen. Close it and retry.
Otherwise: do the recovery gesture above, then connect without unplugging.
Give it ten seconds — the first boot after a flash sets up the display and can be slow. If it’s still dark, unplug and plug it back in.
If it’s dark every time, flash it again and choose Erase device when the installer offers. That wipes leftover settings from the previous firmware, which occasionally confuse a fresh build.
All the badges need to be on the same firmware version to agree on the protocol. Flash them all from this page, then power-cycle them together. They find each other in a few seconds — there is nothing to pair.
Each release ships a single merged image alongside the split parts. With esptool installed:
esptool.py --chip esp32s3 --port /dev/ttyACM0 \ write_flash 0x0 merged.bin
The individual parts and their offsets are listed below if you’d rather flash them separately, and manifest.json is the machine-readable version of the same thing.
For the curious and for anyone rebuilding this. These are ESP32-S3 offsets —
note the bootloader sits at 0x0, not at 0x1000 the way it
does on the original ESP32.
| offset | image | what it is |
|---|---|---|
| 0x0000 | bootloader.bin | second-stage bootloader |
| 0x8000 | partitions.bin | partition table |
| 0xe000 | boot_app0.bin | OTA selector — points at app0 |
| 0x10000 | firmware.bin | the badge itself |