A desk status light for Claude Code on the M5Stack AtomS3R (ESP32-S3) and Tab5 (ESP32-P4). Firmware v1.4.0.
Plug the AtomS3R into a USB-C cable and click the button. Works in Chrome and Edge (Web Serial); Firefox and Safari cannot talk to serial ports.
Invoke-RestMethod -Method Post http://localhost:47831/release, then flash within two minutes.Tab5 (ESP32-P4)? This page flashes the AtomS3R only. The Tab5's images are attached to the same release; write the three parts with esptool (pip install esptool), with the bootloader at 0x2000 as the ESP32-P4 expects, then set up the daemon as for the cube:
python -m esptool --chip esp32p4 -p COM7 -b 460800 --before default_reset --after hard_reset write_flash --flash_mode dio --flash_size 16MB --flash_freq 80m 0x2000 claude-monitor-tab5-v1.4.0-bootloader.bin 0x8000 claude-monitor-tab5-v1.4.0-partition-table.bin 0x10000 claude-monitor-tab5-v1.4.0.bin
Replace COM7 with the tablet's port (/dev/ttyACM0 on Linux, /dev/cu.usbmodemXXXX on macOS). No button needed: esptool resets it into download mode over USB.
The files written here are the bootloader, partition table and app attached to the GitHub release, each at its own offset, so a calibration stored on the device survives an update. Tick Erase device in the dialog to start from a blank flash instead. Sources, protocol and hook mapping: github.com/icefoxj/claude-monitor.