Do not use, it is broken since ESP Dev upgraded, the sxjack code does not work anymore. I will delete this repo.
This project implements Remote ID (RID) broadcasting on an ESP32-C3 Mini 1 development board, compliant with ASTM F3411-19 standard for drone identification.
Note: This is a fork/extension of the uav_electronic_ids project, with additional monitoring tools and ESP32-C3 specific implementations.
- Hardware: ESP32-C3 Mini 1 Dev Board
- Protocol: Remote ID via WiFi Beacon Frames
- Standard: ASTM F3411-19 (OpenDroneID)
- Flight Simulation: 4-waypoint pattern around Aldrich Park, UCI
- Real-time RID Broadcasting: Transmits drone identification data via WiFi beacons
- Waypoint Navigation: Simulates flight through predefined coordinates
- Dual Packet Types: Basic (184 bytes) and Extended (234 bytes) RID data
- Monitor Mode Capture: Python scripts for packet analysis and timing measurement
- Board: ESP32-C3 Mini 1
- USB Connection: USB-C cable
- Programming: Arduino IDE or Arduino CLI
- Libraries: OpenDroneID, UTM conversion
- Hold BOOT button while connecting USB
- Upload sketch via Arduino CLI
- Monitor serial output at 115200 baud
Location: Aldrich Park, UC Irvine, California
Waypoints:
- Center: 33.6405Β°N, 117.8443Β°W (Aldrich Park center)
- North: 33.6415Β°N, 117.8443Β°W
- Northeast: 33.6415Β°N, 117.8453Β°W
- East: 33.6405Β°N, 117.8453Β°W
Flight Pattern: Square pattern, 10-second intervals between waypoints
- Variable Intervals: 0.5s to 9.0s between packets
- Average Rate: ~0.32 packets/second
- Packet Sizes: 184 bytes (basic) / 234 bytes (extended)
- Operator ID: "TEST-OP-12345"
- UAV ID: "TEST-UAV-C3-001"
- Operation Type: Recreational
- Real-time Position: Updates based on waypoint navigation
packet_timing_monitor.py: Measures packet intervalsbeacon_hex_dumper.py: Captures raw hex packet datatimed_packet_dumper.py: Human-readable packet displayrid_packet_decoder.py: Decodes all RID fields
- Interface: Monitor mode required (
wlx60e32717571c) - Target MAC:
84:fc:e6:00:fc:04 - Tools: tshark, Python/Scapy, nmcli
# Install ESP32 board package
arduino-cli core install esp32:esp32@2.0.11
# Compile and upload
cd esp32c3_rid_broadcast
arduino-cli compile --fqbn esp32:esp32:esp32c3:CDCOnBoot=cdc .
arduino-cli upload --fqbn esp32:esp32:esp32c3:CDCOnBoot=cdc -p /dev/ttyACM0 .# Real-time packet timing
python3 packet_timing_monitor.py
# Raw hex dump
python3 beacon_hex_dumper.py
# Human-readable display
python3 timed_packet_dumper.py# Scan for RID networks
nmcli dev wifi list | grep "TEST-OP"
# Capture with tshark
tshark -i wlx60e32717571c -f "wlan type mgt subtype beacon and ether src 84:fc:e6:00:fc:04"- ESP32-C3 Mini 1 Development Board
- USB-C cable
- WiFi adapter with monitor mode support
- Arduino CLI or Arduino IDE
- Python 3.x
- tshark/Wireshark
- Libraries: OpenDroneID, UTM
pip install scapy subprocess datetime- Upload Failure: Hold BOOT button during upload
- Compilation Error: Use ESP32 core version 2.0.11
- No Packets: Check WiFi interface in monitor mode
- Permission Denied: Add user to wireshark group
- Serial monitor:
arduino-cli monitor -p /dev/ttyACM0 - Check USB device:
lsusb | grep ESP32 - WiFi scan:
nmcli dev wifi list
- Transmission Range: ~100m typical
- Update Rate: Variable (0.5-9 second intervals)
- Data Types: Position, velocity, heading, operator info
- Compliance: ASTM F3411-19 Remote ID standard
- Beacon Frames: IEEE 802.11 management frames
- Vendor IE: OpenDroneID information elements
- SSID Encoding: Operator ID in network name
- Payload: Binary RID data in beacon body
- Format: WGS84 decimal degrees
- Precision: 6 decimal places (~0.1m accuracy)
- Altitude: MSL (Mean Sea Level) + AGL (Above Ground Level)
Copy .env.example to .env and configure:
# ESP32-C3 MAC Addresses
ESP32_MAC_PRIMARY=84:fc:e6:00:fc:04
ESP32_MAC_SECONDARY=84:fc:e6:00:fc:05
# WiFi Monitor Interface
WIFI_MONITOR_INTERFACE=wlx60e32717571c
# Geographic Coordinates (customize for your location)
WAYPOINT_1_LAT=33.6405
WAYPOINT_1_LON=-117.8443Note: The .env file contains sensitive information like MAC addresses and coordinates. Never commit this file to version control.
This project is a fork/extension of uav_electronic_ids and uses the OpenDroneID library. It follows ASTM F3411-19 specifications for educational and testing purposes.
Feel free to submit issues, feature requests, or pull requests to improve the Remote ID implementation or monitoring tools.