SubCensusEsp — Web Flasher

Flash the headless ESP32 + CC1101 ISM-band census node right from your browser. No IDE, no toolchain — just a USB cable.

Your browser can't flash over USB. Web Serial is only available in Chrome or Edge on desktop (Windows / macOS / Linux / ChromeOS). Open this page there, or flash from the command line (see the repo).
This page must be served over HTTPS (or http://localhost) for Web Serial. The GitHub Pages URL is HTTPS, so use that.
Chrome / Edge desktop ESP32 (WROOM-32) ~4 MB flash · <1 min

Before you flash

  1. Wire the CC1101 to the ESP32 (see the wiring below). You can flash the bare board first and wire the radio after — the firmware boots fine without it (the web UI shows cc1101: absent until it's connected).
  2. Plug the ESP32 into your computer with a data-capable USB cable (many cheap cables are charge-only and won't enumerate a serial port).
  3. Install the USB-UART driver for your board if needed: CP210x (most WROOM devkits) or CH340.
  4. Close any other program using the serial port (Arduino IDE / PlatformIO monitor / screen).
  5. Click Install SubCensusEsp above, pick your board's serial port, and confirm. The flasher erases the chip and writes firmware + the web-UI filesystem (~1 min).
The button flashes a merged image (bootloader + partitions + app + LittleFS web UI) built by CI from the exact firmware in the repo, so the flasher and the source never drift.

Wiring the CC1101

The CC1101 talks to the ESP32 over the VSPI hardware bus. Capture rides GDO0 (hardware RMT edge-timing), independent of WiFi/web activity.

3.3 V only. The CC1101 is a 3.3 V part — power it from the ESP32 3V3 pin, never 5 V / VIN. Logic is 3.3 V on both sides, so no level shifter is needed.
CC1101 ESP32 (VSPI) VCC3V3 3.3 V GNDGND SCKGPIO 18 MOSI / SIGPIO 23 MISO / SOGPIO 19 CSN / CSGPIO 5 GDO0GPIO 34 RX data · RMT capture
CC1101 ⇄ ESP32 over VSPI. GDO2 (→ GPIO 35) is optional. GPIO 34 is input-only — perfect for GDO0 edge capture.

Pin map

CC1101ESP32 GPIOPurpose
VCC3V33.3 V only — not 5 V
GNDGNDGround
SCK18VSPI clock
MOSI (SI)23VSPI data to radio
MISO (SO)19VSPI data from radio
CSN (CS)5Chip select
GDO034RX data / RMT edge capture (input-only pin)
GDO235Optional (input-only)
ANTAntenna tuned to your band (~433 or ~915 MHz)
Module pin labels vary. On 8-pin SPI modules, SI = MOSI and SO = MISO. Some boards silk-print GD0/GD2 for GDO0/GDO2. Keep SPI wires short; solder a whip/coil antenna to ANT for real range.
Avoid strapping pins. The map deliberately steers clear of GPIO 0/2/12/15. GPIO 34/35 are input-only (fine for the GDO capture/status lines).

First boot & setup

  1. After flashing, the node reboots and starts serving its UI over WiFi (Esp §5).
  2. With no WiFi credentials yet, it brings up a setup access point named SubCensusEsp-setup. Join it, then set your WiFi in the node's Settings page, or set credentials over serial.
  3. Open the Serial monitor at 115200 baud to see boot logs and the assigned IP:
    SC boot node=subcensusesp
    SC cc1101 present=1 version=0x14
    SC core_ok crc=180 place=home
  4. Browse to the node's IP to reach the full UI: Live feed, Review/label, Bands (occupancy/watchlist), Places, and Settings.
  5. No radio wired yet? Try the built-in fixture path: POST /api/recon with action=fixture populates a demo occupancy/watchlist, and POST /api/debug/inject replays a .sub capture through the full decode → classify → log → live-feed pipeline — no RF needed.
Monitoring is passive. Sweep/Camp/Recon never transmit. TX (replay / edit-before-transmit) is off by default and TX-allow-list gated.

Troubleshooting

No port in the pickerUse a data USB cable; install the CP210x/CH340 driver; try another USB port.
"Failed to initialize"Close other serial monitors, unplug/replug, retry. On some boards hold BOOT while the flash starts, release after it connects.
Button missing / greyedYou're not on Chrome/Edge desktop. Web Serial isn't in Firefox, Safari, or mobile browsers.
cc1101: absent in the UICheck 3V3 power, CS→GPIO5, and the SPI wiring; a floating VERSION register reads absent.
Flashes but no WiFiJoin SubCensusEsp-setup and set credentials, or set them over serial; watch the monitor for the IP.