Bonogps
A GPS setup to log your track lap times, based on ESP32, with the ability to interface with several mobile phone apps that log your speed and position via Bluetooth Low Energy, Bluetooth or WiFi
Install / Use
/learn @renatobo/BonogpsREADME
What is BonoGPS?
- What is BonoGPS?
- For the track day enthusiast
- For the SW Engineer / maker
- Quick Start Guide
- Known Good Configurations
- Complete Bill of Materials (BOM)
- How to Verify Everything is Working
- Common Mistakes to Avoid
- HowTo
- Hardware build instructions
- Software build instructions
- Technical Specifications
- Troubleshooting and FAQ
- Possible enhancements and ideas
- Glossary
- Credits and tools
For the track day enthusiast
The main goal of this device is to make GPS data (speed, location) available to mobile apps that can record data up to 25 Hz, for example for track riding. While there are many good (and not even too expensive) solutions out there, building one for yourself is a great experience.

Currently these apps are supported
- Harry's Lap Timer >> details here
- TrackAddict >> details here
- RaceChrono >> details here
- RaceTime >> details here
If you are not into the maker thing or if you don't know anyone who might be, look into RaceBox products like mini/miniS and even a 25Hz kit, or a XGPS160.
For the SW Engineer / maker
This repo contains software, a list of hardware, and (simple) schematics to build an ESP32 device that reads NMEA sentences from a GPS receiver compatible with u-blox M10 and M8 series, for example:
| GPS Module | Chipset | Max Refresh | Antenna Type | Recommended | Link | | ---------- | ------- | ----------- | ------------ | ----------- | ---- | | BK880 | M10 | 25 Hz | Active | ✓ Best | Store | | BK280 | M10 | 25 Hz | Passive | ✓ Best | Store | | BN880 | M8 | 10 Hz | Active | Good | Store | | BN220 | M8 | 10 Hz | Passive | Budget | Store | | DIYmall NEO-M8N | M8N | 10 Hz | Active | Compatible | Amazon |
Note: Active antennas provide better signal quality. M10 modules (BK880/BK280) offer 25Hz refresh rate which is ideal for track use. See GPS setup guide for detailed configuration.
and repeats them back to a logger device, either
- a Bluetooth Low Energy (BLE) service
- a BT Classic (BT-SPP) stream
- a TCP-IP socket
The logger device is likely going to be one of the Track Lap time apps listed above running on your phone.
Examples of actual devices are in hardware/assembled, at a cost of 25$ and 40$ (GPS receivers with active antennas are a little bit more expensive but worth it, and a larger battery helps as well)

A web configuration (basic responsive HTML) panel allows changing configuration and selecting GPS parameters on the fly: access it via http://bonogps.local (when in WiFi AP mode, this becomes http://10.0.0.1 on Android without mDNS resolution).
The settings required by each app are available as presets that you can load for your device (iOS, Android). More information on what version, features, and connections of each app are in software/connecting.
You can also interface your GPS to uBlox u-center via TCP-IP. In this case, be aware that the UART speed is fixed.
Diagram of project components

Quick Start Guide
New to BonoGPS? Get started in 5 steps:
Step 1: Get the Hardware (Budget: $30-60)
Minimum setup (~$30):
- ESP32 DevKit board (~$8-12) - Amazon
- BN220 GPS module (~$15-20) - Beitian Store
- USB cable for programming/power
- Basic jumper wires
Recommended setup (~$45):
- ESP32 DevKit or LOLIN D32 PRO (~$12-20)
- BN880 GPS with active antenna (~$25) - Beitian Store
- Li-Ion battery (650-2000mAh, ~$5-10)
- Case or 3D printed enclosure
Best performance (~$60):
- LOLIN D32 PRO with built-in battery charger (~$15-20)
- BK880 or BK280 GPS (M10, 25Hz) (~$35-45) - Beitian Store
- 2000mAh Li-Ion battery (~$8-12)
- Custom 3D printed mount
Step 2: Wire It Up (15 minutes)
Connect GPS to ESP32 - only 4 wires needed:
- GPS VCC → ESP32 3.3V (power)
- GPS GND → ESP32 GND (ground)
- GPS TX → ESP32 RX (GPIO 16 on DevKit, GPIO 4 on LOLIN D32 PRO)
- GPS RX → ESP32 TX (GPIO 17 on DevKit, GPIO 2 on LOLIN D32 PRO)
See detailed wiring diagrams: Generic ESP32 | LOLIN D32 PRO
Step 3: Configure GPS Module (30 minutes)
Critical: GPS must be configured before first use.
- Download u-blox u-center
- Connect GPS to computer via USB-to-serial adapter
- Follow the GPS configuration guide
- Set baudrate to 115200
- Enable required NMEA messages
- Save configuration to GPS flash memory
Step 4: Build and Upload Software (20-45 minutes)
Option A: Arduino IDE (easier for beginners)
- Install Arduino IDE 2.x
- Add ESP32 board support
- Install required libraries (see library list)
- Open
bonogps.ino - Select "ESP32 Dev Module" or "LOLIN D32 PRO"
- Select "Minimal SPIFFS (1.9MB)" partition scheme
- Upload to ESP32
Option B: PlatformIO (recommended for developers)
- Install VS Code + PlatformIO
- Clone this repository:
git clone https://github.com/renatobo/bonogps.git - Open project folder in VS Code
- Select build target for your board
- Build and upload
See detailed instructions: Software build guide
Step 5: Connect to Your App (10 minutes)
- Power on BonoGPS - wait for GPS fix (LED blinks once/second)
- Connect phone to BonoGPS-XXXX WiFi network
- Open browser to http://10.0.0.1
- Go to Device > Load Preset - select your app and platform
- Enable appropriate connection (BLE/BT-SPP/TCP-IP)
- Open your lap timer app and connect
Supported apps: Harry's Lap Timer | TrackAddict | RaceChrono | RaceTime
Need help? See Troubleshooting FAQ below.
Known Good Configurations
These hardware and app combinations have been tested and confirmed working. Use these as reference if you want a guaranteed-to-work setup.
Budget Build - iOS ($45)
Hardware:
- ESP32 DevKit (~$10)
- BN880 GPS with active antenna (~$25)
- 1000mAh Li-Ion battery (~$6)
- Micro USB cable for programming
- Basic transparent case
Software & Connection:
- Harry's Lap Timer (iOS)
- Connection: BLE
- Preset: "Harry's Lap Timer iOS BLE"
- Expected performance: 10Hz, good accuracy (2-3m)
Why this works: BN880 active antenna provides reliable signal, BLE is native to iOS, Harry's Lap Timer has best BLE support.
Best Performance - iOS ($65)
Hardware:
- LOLIN D32 PRO (~$18)
- BK880 GPS M10 with active antenna (~$40)
- 2000mAh Li-Ion battery (~$10)
- Custom 3D printed mount
Software & Connection:
- Harry's Lap Timer (iOS)
- Connection: BLE
- Preset: "Harry's Lap Timer iOS BLE"
- Expected performance: 20Hz over BLE, excellent accuracy (<2m)
Why this works: M10 chipset supports 25Hz, LOLIN has battery management, BLE optimized for iOS. Best overall iOS solution.
Budget Build - Android ($35)
Hardware:
- ESP32 DevKit (~$8)
- BN220 GPS with passive antenna (~$18)
- Powered via USB (no battery)
- Velcro mounting
Software & Connection:
- RaceChrono (Android)
- Connection: BT-SPP
- Preset: "RaceChrono Android BT-SPP"
- Expected performance: 10Hz, good accuracy in open areas
Why this works: BT-SPP is most reliable on Android, RaceCh
Related Skills
node-connect
339.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.8kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
339.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.8kCommit, push, and open a PR
