Thank you to Jochen (DA2JH) for writing in and sharing with us his project, esp32-sdr-trx,  a software-defined transceiver built from a single ESP32-S3 dev board and two USB cables.

esp32-sdr-trx uses the same undocumented I/Q dump that we posted about previously, which was first discovered by h0m3us3r. To be able to get the data off the ESP32 and into the PC via the ESP32's limited USB streaming bandwidth, it is necessary to decimate the IQ data oln the chip down to 250 or 333 ksps. Then to keep things simple, the espdr-rx tool presents itself as an rtl_tcp server, allowing any RTL-SDR compatible software like SDR++ and GNU Radio to receive data within 1.84 to 2.79 GHz.

On the transmit side, the espdr-tx tool is used to transmit narrowband FM or SSB voice in the 13cm amateur band via a WAV file, audio pipe or sound card. Jochen notes that the ESP32 has no I/Q input so the PHY's test-tone carrier is steered in frequency and amplitude 40,000 times a second (polar modulation).

Jochem notes that there are several limitations to be aware of with this software and hardware "one board and one Linux host tested; the transmitter's power is not calibrated and its harmonics were not measured; transmitting needs an amateur radio licence (the tool asks for confirmation, and the firmware only sends in 2320 to 2450 MHz)".

The ESP32-S3 (Top) |  SDR++ receiving a PlutoSDR through the ESP32 (Left) | SDR++ receiving SSB voice transmitted by the ESP32 with a HackRF. (Right)
The ESP32-S3 (Top) | SDR++ receiving a PlutoSDR through the ESP32 (Left) | SDR++ receiving SSB voice transmitted by the ESP32 with a HackRF (Right)

AI Disclaimer: Jochen notes that much of the code and documentation for this project was written with Claude.