📈 GH Trending Explorer 🎲 Surprise me

← all repos

SP8ESA / ESP32-DATV

git clone https://github.com/SP8ESA/ESP32-DATV.git v0.1.1 · 3d ago

DVB-S digital amateur TV transmitter using a bare ESP32-C3 — up to 1 MSymbol/s QPSK, 8PSK, 16APSK in the 13 cm band, with no additional RF hardware.

+0
stars, 24h · #34,211
+~0
stars, 7 days · #34,686
+92
stars, 30 days · #5,095
92
★ total
16
forks · 0 open issues

Star history (as recorded here)

2026-10-20 · 92 ★ 2026-10-22 · 92 ★
LanguagePython
License—
Created2026-10-03 (19d ago)
Last push3d ago
Watchers3
OwnerUser

Links

README excerpt
# ESP32-DATV
DVB-S / DVB-S2 video transmitter using the ESP32-C3's own 2.4 GHz RF hardware.
## How it works
The PC uses FFmpeg to make an MPEG transport stream, applies DVB-S or DVB-S2 encoding,
and sends symbols over native USB. The ESP32-C3 applies a root-raised-cosine filter
(roll-off 0.35) and writes I/Q samples directly to the Wi-Fi DAC. The chip's RF block
produces the transmitted signal; no external modulator is needed.
Common symbol rates:
| Modulation | Standard | Symbol rates (kS/s) | Status |
|---|---|---|---|
| QPSK | DVB-S, DVB-S2 | 33, 66, 125, 250, 333, 500, 1000 | Working |
| 8PSK | DVB-S2 | 33, 66, 125, 250, 333, 500, 1000 | Working |
| 16APSK | DVB-S2 | 33, 66, 125, 250, 333, 500, 1000 | Working |
| 32APSK | DVB-S2 | 33, 66, 125, 250 | Working; RX details below |
The firmware averages CPU cycle intervals where needed to obtain the requested mean
symbol rate. Crystal error remains; set `--ppm` for your board. The DAC sample rate
is selected automatically and depends on modulation and symbol rate.
32APSK at 250 kS/s uses 8 MS/s (32 SPS); narrower 32APSK modes use the slower C loop.
## Installation
You need an ESP32-C3 board with native USB Serial/JTAG, a Linux PC, Python 3 and FFmpeg.
Install and activate ESP-IDF
(tested with 6.2.0), then build and flash:
 [code] 
Install the host dependencies from the repository root:
 [code] 
Replace `/dev/ttyACM0` with your board's port if necessary.
Prebuilt firmware is available in Releases.
Download the firmware ZIP, unzip it and run `./flash.sh /dev/ttyACM0`
(requires `python3 -m pip install esptool`). The bundle targets ESP32-C3 with 4 MB flash.
## Usage
For the desktop GUI, install its dependencies and run:
 [code] 
The single-panel GUI selects video, TS or a V4L2 camera and controls TX, Start/Stop
and profiles. Click a QO-100 WB channel
to set its uplink frequency; Apply/Restart applies changes to an active transmitter.
The Level slider uses relative dB: 0 dB is the default amplitude for the modulation.
GUI defaults: 0 dB, W1 at 2403.750 MHz, DVB-S2 8PSK at 1 MS/s.
Its minimum is set by `min_level_db` in `host/tx_gui_config.json` (default −27 dB).
PA enable controls GPIO3: 3.3 V during TX, 0 V after Stop or USB timeout.
It defaults to off; use Apply/Restart after changing the checkbox.
Sampling and buffer settings are automatic; I/Q calibration comes from the selected
JSON file. Defaults: 0 ppm, DC I/Q 0, Q gain 1, Q phase 0. The earlier board-specific
example is in `host/cal_sp8esa.json`. Ready TS must fit the channel capacity.
Service name and provider are editable for video, camera, test and TS URL sources;
defaults are `ESP32-C3 DATV` and `ESP32-DATV`. TS files keep their own metadata.
Run from the repository root with `.venv` activated. These examples loop the included
Sintel trailer at 2370 MHz; FFmpeg adjusts the video and audio to the channel capacity.
 [code] 
Set the receiver to the same frequency, standard, modulation, symbol rate and FEC,
with roll-off 0.35. In SDRangel, enab