Skip to content
HB9IIUPublic

About

C3CAST: the 5 EUR DATV modulator. Plug, flash, play.

Resources

Stars

8 stars

Watchers

1 watching

Forks

Repository files navigation

C3CAST

The 5 EUR DATV modulator

Plug. Flash. Play. A small web console for DVB-S2 amateur TV from a low-cost ESP32-C3 board. Windows 10/11.

New in 1.0.0: integrated DATV reception with RTL-SDR USB sticks! Watch up to two signals using RTL-SDR, MiniTiouner or PicoTuner receivers.

The board costs about 5 EUR. To get on the air via QO-100 you also need RF output filtering, an amplifier and a 2.4 GHz dish: see Please read before transmitting.

C3CAST demo video
▶ Press to play the demo video

Windows 10/11  ·  no installation  ·  unzip and double-click

C3CAST is a simple helper around the excellent ESP32-DATV firmware by Kacper SP8ESA. His firmware does the real work: it turns the ESP32-C3's own Wi-Fi radio into a DVB-S / DVB-S2 transmitter on 13 cm. Please read his project for how it works, its measurements and its limits; this page does not repeat them.

🔌 PLUG  ·  ⚡ FLASH  ·  ▶ PLAY

C3CAST only wraps it for a Seeed Studio XIAO ESP32-C3 so that a ham can get on the air without a toolchain:

  1. Plug the XIAO into a USB port (the native USB port, no extra adapter).
  2. Flash it from the page: one button, two clicks, about 30 seconds. A brand-new blank board works too.
  3. Play: pick a picture, the SBB clock card or a USB camera, choose symbol rate and FEC, press Start.

by HB9IIU

C3CAST 1.0.0 with the live QO-100 spectrum, transmit controls, two received DATV pictures, magic eyes and CPU-load meter
C3CAST 1.0.0 with two live receivers.

The board

Seeed Studio XIAO ESP32-C3

The whole modulator is one Seeed Studio XIAO ESP32-C3, a thumb-sized board that costs about 5 EUR / USD (Seeed lists it at $4.90; shop and shipping change that).

  • Chip: ESP32-C3, RISC-V at 160 MHz, 4 MB flash, 320 KB RAM, 2.4 GHz Wi-Fi and Bluetooth LE.
  • USB-C: the chip's native USB. It is the only cable you need: the PC sends the symbols over it and C3CAST flashes through it.
  • U.FL connector (bottom centre): the RF output. Use a small antenna, or a dummy load / attenuator for bench tests.
  • B / R buttons: boot and reset. Flashing resets the board over USB by itself; if a board is ever not found, hold B while plugging it in to force download mode.
  • Pin D10: the PTT output of C3CAST (high while transmitting). D9 is the boot button: do not pull it low at power-up.

The RF is produced by the chip's own Wi-Fi radio, driven by SP8ESA's firmware; there is no other RF hardware on the board. C3CAST is built and tested on this XIAO. SP8ESA's own project uses an ESP32-C3 SuperMini.

What you get

  • Flash button: installs the firmware (SP8ESA's, with the PTT pin moved to D10) over the same USB cable. It only flashes the board you pick and confirm. No Arduino IDE, no PlatformIO needed to use it.
  • Three sources: a PNG/JPG picture, a live SBB station-clock test card, or a USB camera with callsign, UTC time and a scrolling marquee on the picture.
  • Frequency: click a free slot on the live QO-100 wideband spectrum (the BATC feed) or just type it (2300 to 2450 MHz, always possible, also offline and for bench tests). The page shows the downlink slot and whether it looks free on the live spectrum. That is only a hint: always listen first.
  • Link settings: DVB-S2 QPSK, symbol rates 125 / 250 / 333 / 500 / 1000 kS/s, FEC 1/2, 3/5, 2/3, 3/4 or 4/5, output level with limits you set yourself (what that means).
  • Video settings are automatic: picture size, bitrate and audio follow the symbol rate (H.265 and AAC-LC, the same strategy as QOCAST). It uses the NVIDIA GPU encoder when there is one, otherwise software encoding. You never set video parameters yourself.
  • PTT output on D10: high while RF is on, low otherwise; to key a relay or an amplifier through its own driver.
  • Finds the board by itself (and remembers it), shows UTC, runs offline (no internet needed), one Start/Stop button.

Quick start (Windows)

No installation, no Python, no drivers to set up:

  1. Download the portable package C3CAST-Portable-x64 (the .zip on the Releases page) and unzip it anywhere.
  2. Double-click C3CAST.exe. A small window opens (close it to quit) and your browser shows the page.
  3. Plug in the XIAO. If the page does not say board connected, press Flash.
  4. Set up once on the Setup page: callsign and locator.
  5. Choose a source: a picture, the SBB clock card or a USB camera.
  6. Choose frequency, symbol rate and FEC. Click a slot on the spectrum or type the frequency. Start at a low output level.
  7. Press Start, then check your spectrum and the picture on a receiver. Stop ends the transmission, END closes the app.

Start on a dummy load or an attenuator first.

Your own pictures go in the pictures folder next to the exe, your settings are saved in config.json there, and callsign, locator and clock lead time are on the Setup page.

Please read before transmitting

  • Licensed radio amateurs only. You are responsible for the frequency, power and bandwidth you use.
  • For on-air operation, use suitable RF output filtering and verify the transmitted spectrum, as recommended by SP8ESA. See the upstream project for measurements. Start bench tests with a dummy load or attenuator.
  • C3CAST is made for experiments, not for calibrated power: see Output level below.

Output level

The Level slider starts at your lowest configured level and runs up to your highest level. Press Start to transmit and Stop to end transmission. You set both with the Limits button next to the Level slider: drag two handles on one track (1 to 480; the default is 15 to 100). This is a digital amplitude setting, not calibrated power: start low and check your own spectrum before raising it. The slider returns to your configured minimum whenever transmission stops. Transmission always requires pressing Start.

Very low levels (below about 15) show a spike in the middle of the signal, the board's own carrier leakage. For less power, keep the level at 15 or more and use an attenuator after the board. High levels (above about 250) distort the signal. HB9IIU measured one board: the output follows the setting closely up to about 100, compresses above about 250 (which usually means more distortion), and is unreliable below about 15.

Output level versus measured output

The plot shows the firmware's whole range (1 to 480), which the measurements covered. The instrument and its settings were not recorded, so treat the numbers as indicative. The full table is in docs/BUILD_AND_TEST_NOTES.md.

Video files and experimental H.266 / VVC

Video: put MP4, MKV, MOV, AVI, WebM, TS or M4V files in the videos folder next to C3CAST.exe (from source: webapp/videos), choose Video and press Reload. The selected file loops until Stop, with its soundtrack, or silence if it has none. Two sample films are included: an excerpt of Big Buck Bunny and the Sintel trailer, (c) Blender Foundation, CC BY 3.0 (see videos/CREDITS.txt). The muted browser preview depends on the browser's codec support; transmission uses ffmpeg's decoders. Almost any video works. Best: MP4 with H.264 or H.265 and AAC sound, 16:9, 1280x720 or smaller, 25 or 30 frames per second. C3CAST describes the chosen file under its name, warns when it is too large for your PC to decode live (bigger than 1080p, or above 30 fps), and the i button shows how to prepare a file with the ffmpeg that comes in the package.

VVC logo
VVC logo (c) Fraunhofer HHI, shown only to identify the video format. No endorsement by Fraunhofer is implied. About H.266 / VVC

⚠ Most DATV viewers cannot decode H.266. They will see no picture. Use this mode only for tests with stations that have agreed to take part, and switch back to H.265 for normal operation. C3CAST asks you to confirm before it transmits in H.266.

The H.266 / VVC switch is off whenever the console opens, and its "i" button explains the mode in plain language. H.265 stays the normal mode, with the same automatic GPU or software selection as before. H.266 uses the CPU through ffmpeg's libvvenc encoder, so it may take several seconds to produce a picture, and the larger profiles may not keep up in real time. Picture size and frame rate follow the existing profiles; a first benchmark on an i5-11600K found the higher-resolution H.266 profiles too slow. Audio stays AAC-LC, and the transport stream and radio settings stay the same. It has been tested only briefly on air by HB9IIU; more testing by other users is welcome.

To watch H.266, VLC 3 and QOCAST's normal Player are not enough. The package includes the HB9IIU Experimental H.266 Player (folder H266-Player, start it with the Player button at the top of the page or by double-clicking its exe). It receives with a MiniTiouner or a USB PicoTuner, shows the live QO-100 spectrum, and decodes H.265, H.264 and H.266 with its own ffplay. It is optional: delete the folder and the button disappears, and Open Tuner or any other receiver keeps working as before. A recent ffplay with VVC decoding (ffmpeg 7.1 or newer) also works, and you should always check your receiving chain. Developer tests are in docs/H266_TESTING.md.

Bench test

No spectrum analyser? HB9IIU's Pocket QO-100 Spectrum Viewer shows C3CAST's signal as a TX slot: a receive-only "is it transmitting?" indicator, not a measurement. Never connect the transmitter output directly to it.

Status

Version 1.0.0 is the first stable version. The portable build passed automated checks and the user confirmed it working with real receivers. The screenshot above shows two MiniTiouners receiving simultaneously. The new download remains in preparation while the receiver source/licence audit is completed; the download link above still opens the latest published package. The firmware comes from the SP8ESA project, so its limits apply: see his page for compatibility details.

What's new in 1.0.0

  • DATV reception with RTL-SDR USB sticks! Up to two integrated receivers, supporting RTL-SDR, MiniTiouner and PicoTuner.
  • Automatic TX monitoring - Receiver 1 tunes to your transmitted signal when you go on air.
  • Stream information and magic eye - station details, codecs, signal quality and decoding margin.
  • Enlarged video popup - enlarge a received picture without interrupting playback.
  • Single-window protection - prevents competing browser windows and duplicate app launches.
  • Improved spectrum display - automatic beacon scaling, receiver highlights, red TX highlighting and level relative to the beacon.
  • CPU-load meter - live system CPU percentage and progress bar.
  • Simpler TX startup - defaults to your configured minimum level, with a power reminder before Start.

The full history is in the changelog.

Notes

  • ffmpeg (H.265, H.266 and AAC) is included in the portable package. When building from source, put one in tools/ffmpeg/bin/; it is not part of this repository.
  • Camera support uses Windows DirectShow; other systems are not supported yet.
  • Firmware source is in src/ (PlatformIO, ESP-IDF 6.1). To rebuild it: pio run, then python tools/export_firmware.py to refresh what the Flash button writes.
  • More details in the changelog, the build and test notes and how it works.

Credits and licence

Licence: PolyForm Noncommercial 1.0.0, the same as the firmware (see LICENSE and the firmware's LICENSE.upstream). Free for noncommercial use, which the licence explicitly says includes hobby projects and amateur pursuits. Anyone you pass a copy to must get the licence text and the Required Notice lines at the top of LICENSE (HB9IIU for C3CAST, SP8ESA for the firmware). No commercial use.

Third-party parts keep their own licences: the Varela Round font (SIL OFL, in webapp/fonts/), esptool and the other Python packages (installed by pip, not in this repository), and ffmpeg (a GPL build, shipped in the portable package but not in this repository; its licence text and notices are included there).

73 de HB9IIU

About

C3CAST: the 5 EUR DATV modulator. Plug, flash, play.

Resources

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages