📈 GH Trending Explorer 🎲 Surprise me

← all repos

jochenhammes / esp32-sdr-trx

git clone https://github.com/jochenhammes/esp32-sdr-trx.git

A software-defined transceiver from one ESP32-S3 board: rtl_tcp receiver for SDR++ and FM/SSB voice transmitter for 13 cm (experimental)

+5
stars, 24h · #5,790
+~19
stars, 7 days · #8,373
+117
stars, 30 days · #6,218
117
★ total · +19% this week
13
forks · 0 open issues

Star history (as recorded here)

2026-10-20 · 109 ★ 2026-10-23 · 117 ★
LanguagePython
License—
Created2026-10-03 (20d ago)
Last push11d ago
Watchers6
OwnerUser

GitHub topics

Links

README excerpt
# esp32-sdr-trx: a software-defined transceiver from one ESP32-S3 board
*SDR++ with a HackRF, USB demodulator, tuned to an ESP32-S3 that transmits single-sideband voice on 13 cm. The ESP32-S3 is the only
transmitter.*
Every ESP32-S3 has a 2.4 GHz Wi-Fi radio, and somewhere inside it is an I/Q stream and a test-tone generator that Espressif does not
document. This project uses both, on a plain dev board with a USB cable and no FPGA:
* **Receive** (`espdr-rx`): 1.84 to 2.79 GHz, 250 or 333 ksps of 8-bit I/Q. The chip decimates its 16 Msps ADC stream itself; a bridge makes it an
 `rtl_tcp` server, so **SDR++**, GNU Radio and anything else that speaks `rtl_tcp` can use it.
* **Transmit** (`espdr-tx`): narrowband **FM** and **SSB (USB/LSB)** voice and **RTTY** in the 13 cm amateur band (2320 to 2450 MHz), from a WAV file, a pipe,
 a sound card or a text, with a cancellation of the carrier's thermal drift once the board has a model file (`--thermal`, using the chip's temperature sensor). It is an *experiment* that works: the chip's carrier is steered in frequency and amplitude by software (polar modulation),
 which needs no sample buffers and can run for as long as you like. The chip also has a raw I/Q playback engine (samples from SRAM at up to 80 Msps, found by
 h0m3us3r and reproduced here, see the research notes); this transmitter does not use it yet. Transmitting takes an amateur radio licence; read the transmitter guide first.
| | Receiver | Transmitter |
|---|---|---|
| Command | `espdr-rx` | `espdr-tx` |
| Range | 1.84 to 2.79 GHz | 2.32 to 2.45 GHz |
| Bandwidth | 250 ksps (±100 kHz) or 333 ksps (±133 kHz) | voice, 300 to 3000 Hz; RTTY 170 Hz shift |
| Modes | rtl_tcp server | FM (±2.5 kHz), USB, LSB, RTTY |
| Sources | the Wi-Fi front end | WAV file, `-` (pipe), sound card; RTTY: text or text file |
| Status | stable, one board tested | experimental, one board tested |
## Install
You need an ESP32-S3 board **with two USB ports** (the second one is a USB-UART bridge that lets the tools load the firmware without buttons), a USB
cable for each, Linux, and Python 3.10 or newer. Download the wheel `esp32_sdr_trx-X.Y.Z-py3-none-any.whl` and `install-linux.sh` from the
releases page, then:
 [code] 
That creates a virtual environment of its own, links `espdr-rx` and `espdr-tx` into `~/.local/bin` and offers the udev rule. The package carries the firmware
images; there is nothing to build. **docs/install.md** explains every step, the manual way with `python3 -m venv`, `pipx`, the udev
rule, execute rights and how to remove it.
## Use
 [code] 
Both tools load the right firmware into the board's RAM by themselves and switch it when needed (a few seconds); nothing is written to the
flash unless you ask (`espdr-rx --flash`). `-h` explains every option and shows examples; the full reference is in
docs/espdr-rx.md and docs/espdr-tx.md.
## Temperature correction for the transmitter (`--thermal`)
**Why.** The transmitter warms up while it sends: the chip's te