Personal FPV Lap Timer for Seeed Studio XIAO ESP32S3 / ESP32-S3-DevKitC-1
A compact, self-contained RSSI-based lap timing solution for 5.8GHz FPV drones. Perfect for personal practice sessions, small indoor tracks, and training.
FPVGate measures lap times by detecting your drone's video transmitter signal strength (RSSI). When you fly through the gate, it detects the peak signal and records your lap time. No transponders, no complex setup—just plug in, calibrate, and fly.
| Race Screen | Configuration Menu |
|---|---|
![]() |
![]() |
| Calibration | Race History |
|---|---|
![]() |
![]() |
| Multi Pilot | FPVGate AIO |
|---|---|
![]() |
![]() |
Dual Connectivity
- WiFi Access Point (works with any device)
- USB Serial CDC (zero-latency local connection)
Visual Feedback
- RGB LED indicators with 10 customizable presets (settings persist to EEPROM)
- Real-time WiFi status display with connection monitoring
- Real-time RSSI visualization
- OSD overlay for live streaming (transparent, multi-monitor support)
- Mobile-responsive web interface
Natural Voice Announcements
- Pre-recorded ElevenLabs voices (4 voices included)
- PiperTTS for low-latency synthesis
- Phonetic name support
- Configurable announcement formats
Race Analysis
- Real-time lap tracking with gap analysis
- Fastest lap highlighting
- Fastest 3 consecutive laps (RaceGOW format)
- Race history with export/import (cross-device SD card storage)
- Race tagging and naming
- Marshalling mode for post-race lap editing (add/remove/edit laps)
- Detailed race analysis view
Track Management
- Create and manage track profiles with metadata
- Track distance tracking (real-time distance display)
- Track images and custom notes
- Total distance and distance remaining calculations
- Track association with races
- Up to 50 tracks stored on SD card
Smart Storage
- SD card support for audio files and race data
- Individual race files with index for better performance
- Auto-migration from flash to SD
- Cross-device race history (accessible from all connected devices)
- Config backup/restore
- Multi-voice audio library (5 voice packs)
Webhooks & Integration
- Configurable triggers (race start/stop, laps)
- Gate LED control with granular event settings
- Network-based device integration
RotorHazard Integration
- Bidirectional race start/stop with RotorHazard
- NTP-style clock synchronization for accurate timing
- Automatic lap submission to RH via HTTP POST
- Companion RH plugin included (
rh-plugin/)
I2S Speaker Audio (MAX98357A)
- Hardware speaker output for race announcements
- Non-blocking MP3 playback from SD card
- Countdown, lap times, race start/stop audio
Developer Friendly
- Comprehensive self-test diagnostics (19 tests)
- OTA firmware updates
- Transport abstraction layer
- Open source (CC BY-NC-SA 4.0)
Supported Bands:
Analog FPV:
- A (Boscam A) - 5865, 5845, 5825, 5805, 5785, 5765, 5745, 5725
- B (Boscam B) - 5733, 5752, 5771, 5790, 5809, 5828, 5847, 5866
- E (Boscam E) - 5705, 5685, 5665, 5645, 5885, 5905, 5925, 5945
- F (Fatshark) - 5740, 5760, 5780, 5800, 5820, 5840, 5860, 5880
- R (RaceBand) - 5658, 5695, 5732, 5769, 5806, 5843, 5880, 5917
- L (LowBand) - 5362, 5399, 5436, 5473, 5510, 5547, 5584, 5621
Digital FPV:
- DJI - v1-25, v1-25CE, v1_50, 03/04-20, 03/04-20CE, 03/04-40, 03/04-40CE, 04-R
- HDZero - R, E, F, CE
- WalkSnail - R, 25, 25CE, 50
Want a plug-and-play solution? The FPVGate AIO is a pre-built, ready-to-use device -- no soldering, wiring, or flashing required. Perfect if you just want to buy a device and start timing laps immediately.
Building your own? Here's what you'll need:
| Component | Required | Notes |
|---|---|---|
| Seeed Studio XIAO ESP32S3 (Recommended) or ESP32-S3-DevKitC-1 | Yes | Main controller |
| RX5808 Module | Yes | 5.8GHz receiver (SPI mod required) |
| MicroSD Card | Yes | FAT32, 1GB+ for audio storage |
| 5V Power Supply | Yes | USB power or any 5V power source |
| WS2812 RGB LEDs | Optional | 1-2 LEDs for visual feedback |
| Active Buzzer | Optional | 3.3V-5V for beeps |
Detailed wiring diagrams are available for each supported board:
- Seeed Studio XIAO ESP32S3 - Recommended, compact, 8MB
- ESP32-S3 DevKitC-1 (8MB Flash) - Alternative
- FPVGate AIO - Pre-built, ready-to-use device (buy here)
- ESP32-S3 Super Mini (4MB Flash) - Not recommended (see note below)
- LilyGO T-Energy S3 - Expert mode, integrated battery
- Waveshare ESP32-S3-LCD-2 - Built-in 2" touchscreen LCD, battery, SD card
- XIAO ESP32S3 Plus (16MB Flash) - Expert mode
Note on ESP32-S3 Super Mini: Through testing, this board has proven unreliable due to inconsistent quality from various suppliers. Some revisions experience frequent brownouts under load. This board is still supported but is not recommended for new builds.
Option A: Web Flasher (Recommended)
The easiest way to install FPVGate is using our web-based flasher:
https://fpvgate.xyz/flasher.html
- Open the link in Chrome, Edge, or Opera (Web Serial API required)
- Connect your ESP32 via USB
- Select your board type
- Click "Connect" and choose your device's COM port
- Click "Flash" and wait for completion (~2-3 minutes)
Supported boards:
- Seeed Studio XIAO ESP32S3 (8MB) - Recommended
- ESP32-S3 DevKitC-1 (8MB Flash)
- ESP32-S3 Super Mini (4MB Flash) - Not recommended
- LilyGO T-Energy S3
Option B: Command Line (Advanced)
# Download board-specific binaries from releases page, then flash:
esptool.py --chip esp32s3 --port COM3 write_flash -z \
0x0 [BOARD]-bootloader.bin \
0x8000 [BOARD]-partitions.bin \
0x10000 [BOARD]-firmware.bin \
0x410000 [BOARD]-littlefs.binOption C: Build from Source
git clone https://github.com/LouisHitchcock/FPVGate.git
cd FPVGate
# For ESP32-S3 DevKitC-1 (8MB flash):
pio run -e ESP32S3 -t upload
pio run -e ESP32S3 -t uploadfs
# For ESP32-S3 Super Mini (4MB flash):
pio run -e ESP32S3SuperMini -t upload
pio run -e ESP32S3SuperMini -t uploadfsWiFi (Default):
- Connect to
FPVGate_XXXXnetwork (password:fpvgate1) - Open
http://fpvgate.localorhttp://192.168.4.1 - Go to Configuration → Set your VTx frequency
- Go to Calibration → Set RSSI thresholds
- Start racing!
USB (Electron App):
- Download Electron app from releases
- Connect ESP32-S3 via USB
- Launch app and select COM port
- All features work identically to WiFi mode
Getting Started - Hardware setup, wiring, flashing, initial config
User Guide - How to connect, calibrate, race, and use features
Hardware Guide - Components, wiring diagrams, troubleshooting
Features Guide - In-depth feature documentation
Development Guide - Building from source, contributing
Additional Docs:
- RotorHazard Integration - Connect FPVGate to RotorHazard
- Voice Generation - Generate custom voices
- Multi-Voice Setup - Configure multiple voices
- SD Card Migration - SD card setup
- Changelog - Version history
FPVGate uses an RX5808 video receiver module to monitor your drone's RSSI (signal strength). As you fly through the gate:
- Approach - RSSI rises above Enter threshold → crossing starts
- Peak - RSSI peaks when you're closest to the gate
- Exit - RSSI falls below Exit threshold → lap recorded
The time between peaks = your lap time. Simple, reliable, and accurate.
RSSI │ /\
│ / \
│ / \ ← Single clean peak
Enter ├──/──────\───
│ / \
Exit ├/──────────\─
└─────────────── Time
Current Version: v1.7.3
Platform: ESP32-S3 DevKitC-1, Seeed Studio XIAO ESP32S3, FPVGate AIO
License: CC BY-NC-SA 4.0
Status: Stable - actively maintained
v1.7.3 (Latest Release - June 13, 2026)
- Race Notes — Add/edit notes per race with auto-open-on-stop option
- Configurable Race Analytics — Independent toggle for Fastest Lap, Fastest 3 Consecutive, Lap Times, and Consistency panels
- Multilingual Voice Packs — German, Spanish, French ElevenLabs voices with canonical
voice_*structure - Editable Calibration Results — Fine-tune RSSI thresholds and Min Lap Time after running the wizard
- FPVGate Solo — New lightweight board target
v1.7.0 (March 20, 2026)
- RotorHazard Integration - Bidirectional race control, NTP clock sync, lap submission, companion RH plugin
- I2S Speaker Audio (MAX98357A) - Hardware speaker output for race announcements
- New Boards - FPVGate AIO V4, XIAO ESP32S3 Plus
- Config v16 - New fields for RH integration and speaker settings
v1.6.2 (February 26, 2026)
- Waveshare ESP32-S3-LCD-2 - New board support (Expert Mode)
- Calibration Ignore Regions - Mark noisy RSSI sections to exclude from threshold
- Novacore Filter Tuning - Per-filter toggles and parameter sliders
- Debug RSSI Overlay - Real-time debug chart in diagnostics
v1.6.1 (February 14, 2026)
- Multi-Pilot Race Analysis - Current lap timer, lap times chart, consistency chart
- Race Synchronization - Redesigned sync UI, TTS format override, speech keepalive
- Mobile Experience - Settings modal navigation, iOS Safari hostname fix
v1.6.0 (February 9, 2026)
- Race Synchronization System - Multi-timer sync for distributed race timing
- Audio Controls - Beep volume slider, independent browser audio volume
- Bug Reports: GitHub Issues
- Feature Requests: GitHub Discussions
- Support Development: Ko-fi
- Star this repo if you find it useful!
FPVGate is a heavily modified fork of PhobosLT by phobos-. The original project provided the foundation for RSSI-based lap timing.
Portions of the timing logic are inspired by RotorHazard.
See CONTRIBUTORS.md for full contributor list.
This project is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
You are free to share and adapt this work for non-commercial purposes, as long as you provide attribution and distribute any modifications under the same license.
See the LICENSE file for full details or visit https://creativecommons.org/licenses/by-nc-sa/4.0/
Made with care for the FPV community





