ESP-SDR, the next RTL-SDR by ESPARGOS

today i try the esp-sdr on my ESP32-S3FN8 board. this is VERY COOL project. in my mind now, this open the pandora box for S-BAND station with low budget for NOOBs… cooollllll

However, for use as a general-purpose PC-connected SDR, the output bandwidth is insufficient, so only snapshots of data can be exported to a PC. This means that the SDR will only work as a spectrum analyzer, and demodulating or decoding continuous radio data is not possible with just an ESP32. The exception is the new ESP32-S31, which can stream continuously at up to 16 MS/s over its Gigabit Ethernet interface, with a SoapySDR driver for GNU Radio and gqrx coming soon.

more info](Various Projects Independently Find Hidden SDR Capabilities in ESP32 Microcontrollers)

73!

2 Likes

How we discovered this

Our starting point was the adctrig function in Espressif’s librftest library. With the help of LLMs, we reverse engineered this function to understand how it configures the hardware to capture raw IQ samples. These findings formed the basis of ESP-SDR’s capture implementation.

i test using this board : Heltec Wireless Tracker, ESP32S3 + SX1262 +GPS

step by step:

  1. connect usb c to computer
  2. open chrome browser - open ESPARGOS - ESP-SDR: Raw IQ Capture with Espressif's ESP32 Chips , select Open firmware flasher
  3. follow instruction on screen
  4. unplug the usb and plug again (reboot)
  5. on chrome browser , select “ESP-Websdr”, and connect. or other alternate websdr can try this by z2labs

to connect to SDR++

  1. download esp-sdr-bridge
  2. for linux user that use debian 13 or python >= 3.13 , you can download and run the binary version. other / older distro you can install using pipx command (inside python virtual environment).
  3. for linux dont forget add your login user to dialout group:
    sudo usermod -aG dialout user
  4. logout, and login again
  5. download and install sdr++
  6. run the esp-sdr-bridge with this command:
    ./esp-sdr-bridge-linux-x64 --port /dev/ttyACM0 --spyserver 0.0.0.0:5555 --gain 60
    or
    ./esp-sdr-bridge-linux-x64 --port /dev/ttyACM0 --rtltcp 0.0.0.0:1234 --gain 60
    or for dummy signal testing
    ./esp-sdr-bridge-linux-x64 --port /dev/ttyACM0 --spyserver 0.0.0.0:5555 --fake
  7. open your sdr++ > source > spyserver or rtltcp

btw the problem on my side is it always show error like below when running on esp-sdr-bridge

esp_bridge: /dev/ttyACM0; spyserver 0.0.0.0:5555, rtl_tcp 0.0.0.0:1234; rates [62500, 125000, 250000]
[dev] tune 2250.000 MHz: LO 2246 MHz + 0 kHz, gain idx 60, 250000 S/s (dec 64, 8-bit link, shift 4)
[dev] gap: frame 25 index 13312 expected 12800 (+512) dec 64 flags 2 11:55:38
[dev] gap: frame 26 index 14848 expected 13824 (+1024) dec 64 flags 2 11:55:38
[dev] gap: frame 27 index 15872 expected 15360 (+512) dec 64 flags 2 11:55:38
[dev] gap: frame 28 index 17408 expected 16384 (+1024) dec 64 flags 2 11:55:38
[dev] gap: frame 29 index 18944 expected 17920 (+1024) dec 64 flags 2 11:55:38
[dev] gap: frame 30 index 19968 expected 19456 (+512) dec 64 flags 2 11:55:38
[dev] gap: frame 31 index 21504 expected 20480 (+1024) dec 64 flags 2 11:55:38
[dev] gap: frame 32 index 23040 expected 22016 (+1024) dec 64 flags 2 11:55:38
[dev] gap: frame 33 index 24064 expected 23552 (+512) dec 64 flags 2 11:55:38
[dev] gap: frame 34 index 25600 expected 24576 (+1024) dec 64 flags 2 11:55:38
[dev] gap: frame 35 index 27136 expected 26112 (+1024) dec 64 flags 2 11:55:38
[dev] gap: frame 36 index 28160 expected 27648 (+512) dec 64 flags 2 11:55:38
[dev] gap: frame 37 index 29696 expected 28672 (+1024) dec 64 flags 2 11:55:38
[dev] gap: frame 38 index 30720 expected 30208 (+512) dec 64 flags 2 11:55:38
[dev] gap: frame 39 index 32256 expected 31232 (+1024) dec 64 flags 2 11:55:38
[dev] gap: frame 40 index 33792 expected 32768 (+1024) dec 64 flags 2 11:55:38
[dev] gap: frame 41 index 34816 expected 34304 (+512) dec 64 flags 2 11:55:38
[dev] gap: frame 42 index 36352 expected 35328 (+1024) dec 64 flags 2 11:55:38
[dev] gap: frame 43 index 37376 expected 36864 (+512) dec 64 flags 2 11:55:38

and the waterfall on sdr++ running well but no signal peak…

if anyone here try this, maybe can help and share the experience..

thank you!
73!

finally find the solution if you dont want connect your esp-sdr to sdrpp using esp-sdr-bridge. you can use fork version of sdrpp - name SDRPlusPlus

4 Likes