Forged in Feathers Technology

Observore

A passive counter-surveillance detector for the Seeed XIAO ESP32S3 and the dual-band ESP32-C5. It sits in one place, learns what is normally there, and reports what is new.

This browser cannot talk to serial devices. Web Serial needs a Chromium-based browser on a desktop: Chrome, Edge or Opera. It does not exist in Firefox or Safari, and not on phones or tablets at all. This page must be served over HTTPS to reach a serial device.

 

Plug the board in over USB-C first. It appears as a serial device on its own, with no driver and no button to hold. Choose your board above; the installer checks the chip as well, and refuses a mismatch.

C5 boards have two USB-C ports: a native one and a UART bridge. Either flashes, and the log appears on both.

What happens when you press Install

The installer connects to the board and asks it what it is running.

You will only see “Erasing device” if you ticked that box. If you see it without having done so, that is a bug — please tell us.

After the firmware is written the board restarts, and a moment later the installer offers to connect it to Wi-Fi. Pick your network, type the password, and the board joins it and tells you its address. That step is the one thing this page can do that a bare terminal cannot, so it is worth waiting for.

If the Wi-Fi step never appears, the board most likely did not restart into the firmware after flashing. Unplug it, plug it back in, and press Install again: the second time it will find Observore running and go straight to Wi-Fi. This is a quirk of the chip's own USB port rather than anything you did, and the XIAO ESP32-S3 in particular is prone to it.

What this installs, and what it leaves alone

Straight after flashing: note the console password

Each device generates its own console password on first boot and prints it on the serial log, and it is the only place it appears:

console SoftAP: "console-XXXXXX"  password: xxxxxxxxxxxx

Use Logs & Console on the button above to read it without any other software. It is both the Wi-Fi password for the device's setup network and the password that unlocks its web console, so it is worth writing down before you close this page.

Then

The full walkthrough, and an honest list of what this device cannot see, is in the README.

Prefer a terminal?

Every release carries a bootloader, partition table and application for each supported chip, named with the target, plus a SHA256SUMS. The bootloader offset differs per chip, so these are not interchangeable.

# Seeed XIAO ESP32S3
esptool.py --chip esp32s3 -p /dev/ttyACM0 write_flash \
    0x0     bootloader-xiao-esp32s3.bin \
    0x8000  partition-table-xiao-esp32s3.bin \
    0x10000 ota_data_initial-xiao-esp32s3.bin \
    0x20000 observore-xiao-esp32s3.bin

# ESP32-C5-DevKitC-1 / Waveshare
esptool.py --chip esp32c5 -p /dev/ttyACM0 write_flash \
    0x2000  bootloader-devkit-esp32c5.bin \
    0x8000  partition-table-devkit-esp32c5.bin \
    0x10000 ota_data_initial-devkit-esp32c5.bin \
    0x20000 observore-devkit-esp32c5.bin

# Seeed XIAO ESP32-C5
esptool.py --chip esp32c5 -p /dev/ttyACM0 write_flash \
    0x2000  bootloader-xiao-esp32c5.bin \
    0x8000  partition-table-xiao-esp32c5.bin \
    0x10000 ota_data_initial-xiao-esp32c5.bin \
    0x20000 observore-xiao-esp32c5.bin

# Seeed XIAO ESP32C6
esptool.py --chip esp32c6 -p /dev/ttyACM0 write_flash \
    0x0     bootloader-xiao-esp32c6.bin \
    0x8000  partition-table-xiao-esp32c6.bin \
    0x10000 ota_data_initial-xiao-esp32c6.bin \
    0x20000 observore-xiao-esp32c6.bin