A Rust implementation of an ESP32-S3/GC9A01 based aircraft tracker using live data from an ADS-B antenna.
This repo documents notes/progress towards a working aircraft "radar" using data from an ADS-B antenna + SDR.
- ESP32-S3 board
- GC9A01 1.28" LCD
- Random coax cable for an antenna
- 1090mhz bandpass filter + LNA cheap combo thing
The ESP32-S3 is based on the Xtensa architecture unlike the ESP32-C (which is RISC-V) so it is not as straightforward to get started. Xtensa is not yet officially supported by Rust as Rust uses LLVM, and LLVM does not yet support Xtensa. However espressif mantain custom forks of both LLVM and the Rust compiler that include Xtensa support which can easily be installed via the espup tool.
Setup is as simple as:
cargo install espup --locked
espup install --targets esp32s3You will need to set the LIBCLANG_PATH as well as adding xtensa-esp-elf/bin to PATH. This step must be done every time you open a new terminal. espup creates a script for you to this, or stick them in your shell of choices RC file.
We can use esp-generate to generate a template for our project:
cargo generate esp-rs/esp-idf-template
cargo buildInstall espflash:
cargo install espflash --lockedCheck that your device can be seen:
cargo espflash list-ports --list-all-portsInitially I got an error that no serial devices could be found - before realisng my user wasnt in the uugc group:
sudo usermod -aG uucp "$USER"and a reboot soon fixed that
Then we can do
cargo espflash flash --monitorand you should ideally see something like:
rusty-radar main ? ❯ cargo espflash flash --monitor
[2026-08-03T14:28:23Z INFO ] Serial port: '/dev/ttyACM0'
[2026-08-03T14:28:23Z INFO ] Connecting...
[2026-08-03T14:28:24Z INFO ] Using flash stub
Compiling bindgen v0.71.1
Compiling embuild v0.33.3
Compiling esp-idf-sys v0.37.2 (https://github.com/esp-rs/esp-idf-sys.git#8369f610)
Compiling esp-idf-hal v0.46.2 (https://github.com/esp-rs/esp-idf-hal.git#f1bac2d9)
Compiling esp-idf-svc v0.52.1 (https://github.com/esp-rs/esp-idf-svc.git#f59ffada)
Compiling rusty-radar v0.1.0 (/mnt/SSD2/arch/projects/rusty-radar)
Finished `dev` profile [optimized + debuginfo] target(s) in 38.68s
Chip type: esp32s3 (revision v0.2)
Crystal frequency: 40 MHz
Flash size: 16MB
Features: WiFi, BLE, Embedded Flash
MAC address: 8c:fd:49:9b:f2:7c
App/part. size: 584,624/1,048,576 bytes, 55.75%
[00:00:01] [========================================] 1/1 0x0 Verifying... OK! [00:00:00] [========================================] 1/1 0x8000 Verifying... OK! [00:00:26] [========================================] 18/18 0x10000 Verifying... OK! [2026-08-03T14:29:32Z INFO ] Flashing has completed!
For graphics we first need a driver:
cargo add gc9a01-rsThere is a nice example of how to use here https://github.com/IniterWorker/esp32-s3-touch-lcd-1-28