Personal FPV Lap Timer
- Click here to purchase your FPVRaceOne at our Etsy store -
A single node personal lap timing solution for 5.8 GHz FPV drones that can be networked to other units (8 total) for multi-pilot racing. Perfect for personal race or practice sessions with one unit (indoor and large scale) up to MultiGP race events with multiple units. No additional networking hardware required — just plug in a USB power, connect over wifi, calibrate, and fly.
Up to 8 devices can wirelessly network with each other to act as a single multi-node lap timer (no additional hardware or software needed) — one device is set to master mode and acts as race director with up to 7 additional clients. Manually connect clients or have the master automatically recruit clients in range. Master can see all pilot times and control the race, while single pilots can remain logged into their device and see all other racer times - or initiate individual practice races.
Documentation
Quick Start - To get started as a single pilot with the bare minimum information
Getting Started - For a more comprehensive step by step guide
User Guide - The full manual, but not necessarily a step by step
| Race Screen | Configuration |
|---|---|
![]() |
![]() |
| Calibration Wizard — Recording | Calibration Wizard — Complete |
|---|---|
![]() |
![]() |
| Master Race Screen | Master Pilot Edit |
|---|---|
![]() |
![]() |
| Calibration Wizard — Recording | Calibration Wizard — Complete |
|---|---|
![]() |
![]() |
FPVRaceOne uses an RX5808 video receiver module to monitor your drone's video transmitter RSSI (signal strength). As you fly through the timing gate:
- Approach — RSSI rises above the Enter threshold → crossing begins
- Peak — RSSI peaks when you're closest to the gate
- Exit — RSSI falls below the Exit threshold → lap time recorded
Note that FPVRaceOne has an automatic calibration wizard to take the guess work out of setting the RSSI values (see below)
RSSI │ /\
│ / \
│ / \ ← Single clean peak
Enter ├──/──────\───
│ / \
Exit ├/──────────\─
└─────────────── Time
The time between consecutive peaks is your lap time. The signal processing pipeline is tuned with sensible defaults out of the box, with a single Pipeline Smoothing slider for fine-tuning the balance between responsiveness and noise rejection.
- WiFi Access Point — works with any browser on any device (laptop, pc, phone or tablet) with wifi, no app required
- Built-in Multi-Node Networking — up to 8 lap timers can connect together to to run a multi pilot race.
An RSSI processing pipeline optimized for the ESP32: Kalman → Median-of-3 → 7-sample moving average → EMA → step limiter
Guided calibration wizard with real-time RSSI charts: Fly 3 passes over the start gate (timer) and let the wizard auto calibrate
- Automatic 3-peak detection with manual override
- Enter / Exit threshold calculation with conservative safety margins (Enter ≈ 95 % of weakest peak, Exit ≈ 7 RSSI units below Enter, raised above the noise floor)
- Peak-spread warning if the three peaks aren't reasonably equal — flagged for re-fly before applying
- Live RSSI chart shows exactly what the lap detector sees (final pipeline output) **Note that the timer can only record for 100 seconds. It is recommended to fly through the timing gate, to the next closest gate, back through the gate to the next gate and back through a third time. Land and stop recording.
Network up to 8 devices together using on-board Wifi (no router or extra hardware required). One device runs in Master mode (race director); up to seven Client devices join the master's WiFi and forward laps automatically. Each pilot should remain connected to their own device over wifi. All devices in multi-mode will see the entire race board.
- Master Recruit — the master can automatically scan for FPVRaceOne clients in range and configure them to join the network. Or each client can search for a master and connect manually.
- One-tap Start All / Stop All — broadcast a synchronised race start to all pilot on the network
- Live all-pilots dashboard on the master and clients — each client renders as a card with pilot name, running indicator (●/○), live lap count, and last lap time, updated via Server-Sent Events with sub-second latency. Slot cards labelled A through G match what the director sees in serial logs
- Master can edit and configure all pilots from the Race tab — pencil icon on every slot card opens a per-pilot editor for name, color, band, channel, RSSI thresholds, and skip flag — works on the master's own host card too
- Calibration Wizard from the modal — run the full guided wizard against any connected client; the wizard records on the target client and pushes thresholds back when you click Apply
- Live RSSI feed in the modal — toggle on the right of the title polls the selected client at 5 Hz; the firmware-side peak-since-last sampler catches a brief gate pass even at that rate. Red Enter / orange Exit threshold lines track the sliders as you drag
- Move (Swap) Pilot to Slot — letter dropdown (A–G) reassigns a node to a different slot; if it's occupied, the two pilots swap places and both persist their new slot to NVS
- DNF tracking — a pilot who taps Stop locally during a master race shows up as DNF on the director's screen; the rest of the heat continues uninterrupted
- Solo-practice override — each client has an Ignore Race Director Start/Stop if already racing toggle so a director's broadcast doesn't kill an in-progress practice run
- Master discovery — clients can scan for available masters in range and pick one from a list (no manual SSID typing required)
- Same UI on every device — every client also runs as a fully featured standalone timer when no master is broadcasting
- Spoken laps using your browser's built-in voice (Web Speech API) — no audio files on the device, so the announcer follows whichever device has the web UI open
- Configurable announcement format (pilot + lap + time, pilot + time, lap + time, time only)
- Per-pass beep or full speech, 2-lap and 3-lap consecutive variants
- Lap times of 60 seconds or longer are announced as "X minute(s) Y point ZZ" — long-track friendly
- Single on/off Voice toggle in Settings
- Real-time lap tracking with gap-to-best analysis
- Fastest lap highlighting
- Fastest 3 consecutive laps (RaceGOW format)
- Interactive race timeline + playback for every saved session
- Marshalling mode — add, remove, or edit laps after the race ended
- Download the session as JSON; re-import later. Race history lives in RAM only on the current hardware — download to keep.
- One-tap OTA from GitHub Releases — built into the device. Enter your home WiFi once; the device joins, checks the latest release, downloads the firmware + filesystem images, flashes both, and reboots.
- Updates are blocked while a race is running. Failed downloads keep the previous firmware, so the device can't be bricked from a flaky network.
- Manual flashing via our custom tool FPVRaceOne-Flasher (windows) — see docs/FLASHING_OPTIONAL.md.
| Band | Channels (MHz) |
|---|---|
| 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 |
| DJI v1 25 MHz | 5660, 5695, 5735, 5770, 5805, 5878, 5914, 5839 |
| DJI v1 25 CE | 5735, 5770, 5805, 5839 |
| DJI v1 50 | 5695, 5770, 5878, 5839 |
| DJI O3/O4 10/20 | 5669, 5705, 5768, 5804, 5839, 5876, 5912 |
| DJI O3/O4 20 CE | 5768, 5804, 5839 |
| DJI O3/O4 40 | 5677, 5794, 5902 |
| DJI O3/O4 40 CE | 5794 |
| DJI O4 RaceBand | 5658, 5695, 5732, 5769, 5806, 5843, 5880, 5917 |
| HDZero RaceBand | 5658, 5695, 5732, 5769, 5806, 5843, 5880, 5917 |
| HDZero E | 5707 |
| HDZero F | 5740, 5760, 5800 |
| HDZero CE | 5732, 5769, 5806, 5843 |
| Walksnail RaceBand | 5658, 5659, 5732, 5769, 5806, 5843, 5880, 5917 |
| Walksnail 25 | 5660, 5695, 5735, 5770, 5805, 5878, 5914, 5839 |
| Walksnail 25 CE | 5735, 5770, 5805, 5839 |
| Walksnail 50 | 5695, 5770, 5878, 5839 |
Pre-made and flashed hardware — - Click here to purchase your FPVRaceOne at our Etsy store -
- Power on the device
- Connect your phone or laptop to the
FPVRaceOne_XXXXnetwork (password:fpvraceone) - Open
http://192.168.4.1in your browser (http://192.168.5.1in Master mode) - Go to Settings → Set your VTx band and channel
- Go to Calibration → Run the wizard to set RSSI thresholds
- Press Start and fly!
FPVRaceOne can check for and automatically updates itself from GitHub Releases — no PlatformIO, no cables, no flashing tools required for normal updates.
- Open the web UI → Settings → Firmware Update
- Enter your home WiFi credentials (one-time)
- Tap Check for Updates — the device briefly joins your home network, queries GitHub, then returns to AP mode
- If a newer release is available you'll see the version and release notes — tap Update Now
- The device flashes the filesystem, then the firmware, then reboots once. Total time ~1–3 minutes.
- Hard reload your browser to guarantee new changes are loaded (Ctrl+Shift+R on Windows/Linux, Cmd+Shift+R on Mac. Tap-and-hold the refresh button on mobile Chrome to get "Hard reload")
Updates are automatically blocked while a race is running.
Product: FPVRaceOne
Platform: Seeed XIAO ESP32-C6
License: MIT
Status: Stable Beta — actively maintained
See CHANGELOG.md for the version history.
FPVRaceOne is derived from FPVGate v1.2.0 by LouisHitchcock, which is itself a heavily modified fork of PhobosLT by phobos-. The original project provided the foundation for RSSI-based lap timing on ESP32.
Note that prior or alternate versions of FPVGate will not flash to FPVRaceOne official hardware.
This project is licensed under the MIT License — see the LICENSE file for details.
Built for pilots, by pilots.






