Skip to content

Dollarhyde/rf-modulation-platform

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Interactive RF Modulation Platform

Open-source firmware and lab scaffolding for a classroom-ready ESP32 + CC1101 platform with optional SDR extensions. The repository hosts matched transmitter and receiver builds used in our conference publications on digital modulation education.

Platform Overview

  • Educator station (RX): CC1101 receiver on ESP32 with 10-LED array for visual feedback; validates packets and toggles LEDs per control nibble.
  • Student stations (TX): CC1101 transmitters on ESP32; send control bytes using predefined modulation presets.
  • Five prebuilt lab presets: 2-FSK, 4-FSK, GFSK, MSK, ASK. Adjustable preamble, address, checksum mode, and LED mapping to create unique challenges.
  • Optional SDR layer: RTL-SDR for receive-only analysis; HackRF One for full-duplex SDR exercises and advanced labs.

Hardware Configurations

  1. ESP32 + CC1101 only - baseline TX/RX practice.
  2. ESP32 + CC1101 + RTL-SDR - capture/analyze educator signals, then recreate packets on ESP32.
  3. ESP32 + CC1101 + HackRF One - advanced SDR-based transmit/receive while targeting the CC1101 RX for validation.

Core Bill of Materials

  • 2× ESP32-DevKit (or compatible)
  • 2× CC1101 433 MHz modules (default frequency 433.92 MHz)
  • Receiver: status LED on GPIO2, 10× control LEDs on GPIO13/14/16/17/21/22/25/26/32/33 with ~300 Ω resistors
  • Transmitter: status LED on GPIO32
  • Breadboard, jumper wires, 3.3 V supply, antennas for CC1101 modules
  • Optional: RTL-SDR v3 (RX), HackRF One (TX/RX)

Wiring (receiver circuit)

Receiver circuit: ESP32 + CC1101 + 10-LED array

The figure matches the paper: ESP32 DevKit wired to the CC1101 and a 10-LED array (with resistors) for visual feedback. Core CC1101 pins: CSN GPIO5, GDO0 GPIO27, SCK GPIO18, MISO GPIO19, MOSI GPIO23, VCC 3.3 V, GND GND. The transmitter wiring is identical minus the LED array.

Software Stack

  • PlatformIO Core (pio) or VS Code + PlatformIO extension
  • Arduino framework for ESP32 (auto-installed by PlatformIO)
  • Library: mfurga/CC1101@^1.2.0 (declared in each platformio.ini)

Repository Layout

  • CC1101_Receiver/ - educator RX firmware (ESP32 + LED array)
  • CC1101_Transmitter/ - student TX firmware (ESP32)
  • cc1101/ - vendored CC1101 Arduino library sources
  • LICENSE - MIT License

Build and Flash

  1. Plug in the receiver first so it enumerates as /dev/ttyUSB0, then the transmitter as /dev/ttyUSB1 (adjust if your OS assigns differently).
  2. Confirm ports and update upload_port in each platformio.ini if needed.
  3. Build, upload, and open the monitor to verify connectivity:
    • Receiver:
      cd CC1101_Receiver
      upload.sh
      monitor.sh
    • Transmitter:
      cd CC1101_Transmitter
      upload.sh
      monitor.sh

Firmware Behavior

  • Both sides must share the same SESSION_CONFIG in src/main.cpp. Presets set modulation (2FSK/4FSK/GFSK/MSK/ASK), preamble, address, data rate (1.2 kBaud), deviation, and optional checksum mode (SUM/XOR/CRC8; off by default).
  • Packet structure (fixed length):
    • Byte 0: Preamble
    • Byte 1: Address (lower 6 bits checked)
    • Byte 2: Control (lower 4 bits drive LED mapping)
    • Byte 3: Optional checksum (if enabled)
  • Receiver serial (115200 baud): h shows config; d/debug toggles raw packet logging. Valid packets print RSSI/LQI and toggle mapped LEDs.
  • Transmitter serial: 0-9, a-f/A-F send control 0-15; r/R sends a raw packet (hex); h shows config.

Using in Labs

  • Configuration 1 (ESP32 only): Provide preamble/address and modulation parameters; students iterate data bytes to light assigned LEDs on the educator RX.
  • Configuration 2 (RTL-SDR assist): Educator transmits a reference signal; students capture/analyze with GNU Radio/URH to recover modulation, data rate/deviation, preamble, and address, then recreate the packet on ESP32.
  • Configuration 3 (HackRF advanced): Teams perform SDR RX/TX with HackRF while keeping the CC1101 RX as the validation target.
  • Increase difficulty by enabling checksums, Manchester encoding, whitening, or FEC in main.cpp, or by altering LED mappings/preamble/address per lab.

Tips and Troubleshooting

  • Keep antennas attached and avoid placing modules too close to prevent front-end saturation.
  • If packets are missed: verify matched SESSION_CONFIG, preamble, address; widen RX bandwidth or lower data rate in noisy environments.
  • Serial monitor line endings: LF or CRLF are accepted.
  • When changing bands, update frequency consistently on TX/RX and ensure regulatory compliance.

Contributing / Reuse

  • Fork and adapt lab parameters (preamble/address/LED mappings) to create new exercises or assessments.
  • If you publish derivative work, please cite the papers below and retain the MIT license notice.

License

MIT License © 2026 Erwin Karincic, Lauren Linkous, Erdem Topsakal. See LICENSE for details.

Citations

  • “Interactive Educational Platform for Digital Modulation Recognition and Signal Analysis” - Erwin Karincic, Lauren Linkous, Erdem Topsakal.
  • “Classroom Approaches to RF Education with Visual-Based Modulation Recognition Labs” - Erwin Karincic, Lauren Linkous, Erdem Topsakal.
@inproceedings{karincic2026interactiverf,
  title   = {Interactive Educational Platform for Digital Modulation Recognition and Signal Analysis},
  author  = {Karincic, Erwin and Linkous, Lauren and Topsakal, Erdem},
  booktitle = {Proceedings of USNC-URSI NRSM},
  year    = {2026}
}

@inproceedings{karincic2026classroomrf,
  title   = {Classroom Approaches to RF Education with Visual-Based Modulation Recognition Labs},
  author  = {Karincic, Erwin and Linkous, Lauren and Topsakal, Erdem},
  booktitle = {Proceedings of ASEE},
  year    = {2026}
}

About

Interactive RF Modulation Platform

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors