Ohm Lamp OTA Tool

Web Bluetooth Firmware Update

Connecting... Disconnected

Web Bluetooth not available

On Linux, serve this file via localhost instead of opening directly:

python3 -m http.server 8000

Then open http://localhost:8000

Bluetooth ready. Scan to find nearby Ohm Lamp devices.

Connection Failed

Only show devices with names starting with this prefix (case-insensitive)

Connecting to Device

Device Rebooting

The device is restarting with the new firmware. This may take 10-30 seconds.

Reconnection attempt of

If auto-reconnect fails, click "Connect" to manually reconnect.

Device Information

Lamp (nRF52)

Firmware:
Hardware ID:
Time:

Stone

Name:
MAC:
Battery:
Firmware:

ESP32

Firmware:
WiFi:
SSID:
IP:
OTA Update:
Selected:

STM32 (Audio)

Firmware:
File Service:

Cloud Firmware

Browse firmware from cloud storage

Click "Load Available" to see available firmware versions

Nordic (nRF52) Firmware

ESP32 Firmware (BLE = full flash via Nordic, WiFi = HTTP OTA)

Stone Firmware

STM32 (Audio) Firmware

Click a row to load firmware for OTA update, or click the download icon to save to your PC.

Nordic (nRF52) Update

Image Slots

No image information available
Waiting for Device Reboot

The device is rebooting with new firmware. This typically takes 30-120 seconds.

Watch the lamp - when LEDs come back on, click Connect above.

Elapsed:
Update Steps:

Upload Firmware

Drop Nordic firmware here

or click to browse (.zip, .bin, .img)

|

Upload complete! Uploading... ( remaining)

/ KB

ESP32 Update

WiFi Available
Note: WiFi OTA requires serving this page from a web server. Run python -m http.server in this directory and open http://localhost:8000
Note: WiFi OTA may not work over HTTPS due to mixed content restrictions. If connection fails, open this page locally via http:// or use BLE update below.
WiFi Update (Recommended): Update via local network takes ~1 minute.
Connected to

Drop ESP32 firmware here

Use build/ohm_lamp.bin (NOT merged/ble-dfu)

Upload complete! ( remaining)

/ KB

BLE Update: WiFi not connected. Update via BLE takes 5-10 minutes.

ESP32 Update Mode Required

Entering update mode puts the ESP32 into ROM bootloader. The device will be non-functional until the update completes or is cancelled.

ESP32 in Bootloader Mode

Drop ESP32 firmware here

Use merged binary from task package:ble-dfu

Update complete! ( remaining)

/ KB

STM32 Firmware Update Not Available Update Mode Uploading...

STM32 DFU Not Available

This firmware version doesn't support STM32 DFU updates over BLE.

Update to newer lamp firmware to enable this feature.

STM32 Update Mode Required

Entering update mode puts the STM32 audio processor into bootloader. Audio will be non-functional until the update completes.

Drop STM32 firmware file here or click to browse

Accepts .bin files only

Stone Firmware Update Stone Connected Uploading... Complete

Stone DFU: Update the Stone firmware via BLE. This requires disconnecting the lamp from the Stone and connecting the web browser directly to the Stone.

Waiting for Stone Reboot

The Stone is rebooting with new firmware. Wait for it to complete (~10-30 seconds).

Then click "Reconnect to Confirm" below to make the firmware permanent.

Elapsed:

Error:

Current Stone version:

Firmware ready:

Drop Stone firmware here

or click to browse (.zip or .bin)

|

( remaining)

Confirmation Required

Stone has rebooted with the new firmware, but it must be confirmed to make it permanent. Without confirmation, Stone will revert to the old firmware on next reboot.

Audio Controls

Scaled:
Absolute:
N/A
7

Test Sounds

Play Audio File

files cached from last file browser session

Audio Files (STM32 SD Card) Transfer Mode

File Transfer Mode Required

Click "Enter File Mode" to access audio files on the STM32 SD card.

Note: Entering file mode will pause audio playback.

STM32 Firmware

SD Card
/ files
Filename Size

No files match filter

No files loaded. Click Refresh to load file list.

Selected:

Upload New File

Drop audio file here

or click to select (WAV, MP3, AAC, OGG, FLAC)

Converting audio...

→ MP3 mono 48kHz 128kbps

Try a different file format

Already in target format (no conversion needed)

1. Upload to Cloud
2. Download to Device Reconnected ( remaining)

/ KB

3. Transcode to WAV

Lamp must be connected to WiFi for audio uploads

Manual Light Control Active

Direct LED control for testing colors and positions.

Click "Enter Mode" to begin. Normal LED rendering will be paused.

Baffle R G B W Color Actions

Baffles 1-14: Tower LEDs (bottom to top). Halo: Ring around top.

Values: 0-255 for each color channel. Changes apply immediately.

PREVIEW

Halo
s / s

New Keyframe Edit Keyframe #

ms (s)
fade

Playback

Fade Gamma

Lower = more gradual at low brightness

Device Control
Animation

Timeline

keyframes | Click to set position | Shift+click to add | Drag to move | Right-click for menu
All
Edit position Playhead "All" affects track

Keyframes ()

Time Target Mode Duration Color

Timeline: Click a track to set edit position. Shift+click to add keyframe. Drag blocks to reposition.

Editing: Click a block to select and edit its properties. Use Copy/Paste/Duplicate buttons for quick duplication.

"All Baffles": Affects all 15 channels at once. Ghost outlines show where "All" keyframes apply on individual tracks.

Mock Stone Control

Switch the lamp between real stone and mock stone for testing. Power on the mock stone (Seeed Xiao nRF52840) before entering pairing mode.

Pairing mode active. Lamp is scanning for mock stone. Lift real stone to trigger a session.

Activity Log

No activity yet
BLE updates require periodic flash writes, so progress halting frequently is expected.
Matthew Austin, 2026
v1.0.70 · 2026-01-27