ESPARGOS / esp-web-sdr
git clone https://github.com/ESPARGOS/esp-web-sdr.git
Web interface that displays the frequency spectrum and waterfall diagram for esp-sdr
+0
stars, 24h · #31,904
+~0
stars, 7 days · #32,379
+81
stars, 30 days · #6,330
83
★ total
25
forks · 1 open issues
Star history (as recorded here)
LanguageJavaScript
LicenseGPL-3.0
Created2026-09-28 (24d ago)
Last push5d ago
Watchers4
OwnerOrganization
Links
- GitHub: github.com/ESPARGOS/esp-web-sdr
- Homepage: https://espargos.net/espsdr/
- Releases · Issues · Hacker News mentions
README excerpt
# ESP-WebSDR
### Try it yourself: Project overview · Browser SDR viewer · Browser firmware installer
Browser spectrum viewer and firmware installer for ESP32 chips, with live
FFT spectra, waterfalls, tuning, gain and bandwidth controls.
With the help of LLMs, we discovered an undocumented feature in Espressif's
ESP32 chips that bypasses the fixed-function modems to capture raw IQ baseband
samples. ESP-WebSDR pairs with the ESP-SDR firmware
to display these samples as a live spectrum and waterfall in your browser,
turning supported ESP32 boards into low-cost software-defined radio receivers.
Parts of this code are AI-generated. We put a lot of manual effort into
pyespargos and the ESPARGOS One
firmware, but haven't reviewed every line of ESP-WebSDR by hand.
## Get started
You need a browser with WebSerial or WebUSB: Chrome, Edge or
Firefox 151+
on the desktop, or Chrome on Android.
1. Connect the board with a USB data cable and close any serial monitor that
has its port open.
2. Install the firmware with the firmware installer.
3. Open the viewer, click **Connect ESP-SDR**
and pick the port. Reception starts right away.
The desktop uses WebSerial, which works with both native USB ports and
USB-to-UART bridges. Both APIs need HTTPS or localhost.
The installer also has the **ESP32-S31 Ethernet/USB firmware for
SoapyESPSDR**. That firmware streams
continuously to desktop SDR applications and has its own web page at the
board's DHCP address; it does not work with this viewer.
## Android
ESP-WebSDR runs in **Chrome on Android** without an app, using WebUSB.
1. Connect the board's **native USB connector** to the phone, through a USB
OTG adapter if needed. WebUSB can't use USB-to-UART bridges (CP210x, CH340,
FT232), so boards without native USB (ESP32, C2) don't work on Android.
2. Install the firmware with the installer:
tap **Connect via WebUSB** and grant access. If it can't enter the
bootloader, hold BOOT, tap RESET, release BOOT and try again.
3. Open the viewer and tap
**Connect ESP-SDR**. If flashing changed the board's USB identity, select it
again.
## Troubleshooting
**The board isn't listed (Windows/macOS):** a USB-to-UART bridge may need its
manufacturer's driver. Espressif's
serial connection guide
links to the common ones.
**The port is listed but won't open (Linux):** your user needs access to the
serial device (`/dev/ttyACM0` for native USB, `/dev/ttyUSB0` for bridges).
Add yourself to the serial group (`uucp` on Arch), then log out and back in:
[code]
For native Espressif USB ports, a udev rule also works:
`SUBSYSTEM=="tty", ATTRS{idVendor}=="303a", TAG+="uaccess"` in
`/etc/udev/rules.d/70-esp-web-sdr.rules`, then `sudo udevadm control --reload-rules`
and reconnect the board.
**"The device has been lost" right after connecting (Linux):** a program that
used the port before, such as esptool, `idf.py monitor` or anything else built
on pyserial, left it in a mode that Chrome misreads as a disconnect. Reset the
port, or unplug and r