BLE HUD turns a LilyGO T-Display-S3 into a wireless Heads-Up Display for car navigation. It connects over Bluetooth Low Energy to a navigation app on your phone and shows the next maneuver in large, glanceable graphics right in your line of sight โ no need to look down at your phone while driving.
It's cheap (~โฌ15 board), runs on a single ESP32-S3, and needs no internet of its own โ all the routing happens on your phone.
This project is adapted for the LilyGO T-Display-S3 and builds on the original BLE-HUD-navigation-ESP32 by Alexander Lavrushko.
- ๐งญ Turn-by-turn directions โ large arrow icons for every maneuver
- ๐ Distance to next turn โ live countdown to the upcoming maneuver
- ๐ฆ Speed & speed-limit display โ current speed and the active limit
- ๐ฃ๏ธ Lane guidance โ lane-assist graphics for complex junctions
- ๐ Connection-aware states โ startup, disconnected, no route, navigating, recalculating
- ๐ฌ Startup animation โ clean boot splash with progress bar
- ๐ Battery voltage monitoring โ optional, for portable/battery builds
- ๐ด Deep sleep โ button-triggered low-power mode to save energy
- ๐ฑ Works with Sygic GPS (iOS) over standard BLE GATT
| Component | Details |
|---|---|
| Board | LilyGO T-Display-S3 (ESP32-S3) |
| Display | Integrated 1.9" ST7789, 320ร170, full colour |
| Connectivity | Bluetooth Low Energy (built into the ESP32-S3) |
| Power | USB-C, or a Li-Po battery on the onboard connector |
| Optional | Voltage divider for battery-level monitoring |
| Button | GPIO | Action |
|---|---|---|
| Left | IO0 | Long press โ enter deep sleep (press again to wake) |
| Right | IO35 | Toggle battery voltage display |
The HUD currently receives data from Sygic GPS Navigation & Maps: Download on the App Store.
Enable the hidden BLE HUD feature
- Open Sygic โ Menu โ Settings โ Info โ About
- Tap 3 times on any item to unlock the hidden menu
- Go to About โ BLE HUD โ Start
- Grant Bluetooth permission
The app will then find and connect to the ESP32 automatically.
- Arduino IDE with ESP32 board support (install guide)
- This repository (clone it or download the
src/folder)
| Library | Where to get it |
|---|---|
TFT_eSPI |
Library Manager โ must be configured for the T-Display-S3 (see below) |
Button2 |
Library Manager |
BLEDevice / BLEServer / BLEUtils / BLE2902 |
Bundled with the ESP32 Arduino core |
Use the display config from the official LilyGO repo:
Xinyuan-LilyGO/T-Display-S3.
Apply User_Setups/SetupXX_TDisplay_S3.h (or edit User_Setup.h) so TFT_eSPI
targets the onboard ST7789. This is the #1 cause of a blank/garbled screen.
- Board:
ESP32S3 Dev Module(orLilyGo T-Display-S3) - Select the correct USB port
- Open
src/BLEHUDNaviESP32TDislpays3.inoand Upload
๐ก If the board isn't detected, hold BOOT while plugging in the USB-C cable to force download mode.
The ESP32 advertises a GATT service and expects navigation packets in this format:
[1, <speed>, <direction>, <message>]
| Field | Type | Description |
|---|---|---|
speed |
uint8 | Current speed (0โ255 km/h) |
direction |
enum | Maneuver type โ see src/DataConstants.h |
message |
string | Null-terminated street/instruction text |
| GATT | UUID |
|---|---|
| Service | DD3F0AD1-6239-4E1F-81F1-91F6C9F01D86 |
| Indicate (notify) | DD3F0AD2-6239-4E1F-81F1-91F6C9F01D86 |
| Write | DD3F0AD3-6239-4E1F-81F1-91F6C9F01D86 |
- Power on the device โ it shows the startup animation, then "waiting for connection".
- Start navigation in Sygic and enable the BLE HUD feature (steps above).
- Once connected, the HUD shows the next direction, distance, speed and speed limit automatically.
- Long-press the left button to put the device into deep sleep.
.
โโโ src/
โ โโโ BLEHUDNaviESP32TDislpays3.ino # Main sketch (BLE server, display state machine)
โ โโโ DataConstants.h # Direction enums & shared constants
โ โโโ ImagesDirections.h # Turn-arrow bitmaps
โ โโโ ImagesLanes.h # Lane-assist bitmaps
โ โโโ ImagesOther.h # UI/status bitmaps
โ โโโ VoltageMeasurement.h # Optional battery-voltage helper
โโโ image/ # Demo GIF & photos
โโโ README.md
| Symptom | Fix |
|---|---|
| Blank or garbled screen | TFT_eSPI not configured for the T-Display-S3 โ apply the LilyGO setup file |
| Board not detected | Hold BOOT while connecting USB-C to enter download mode |
| Phone won't connect | Re-enable the hidden BLE HUD menu in Sygic and toggle Bluetooth |
| Compile error on BLE headers | Make sure the ESP32 Arduino core is installed and selected |
- Android navigation app support
- Configurable units (km/h โ mph)
- Adjustable brightness / auto-dimming
- 3D-printed dashboard mount
- Alexander Lavrushko โ the original BLE-HUD-navigation-ESP32 codebase this project is based on.
- Xinyuan-LilyGO โ T-Display-S3 hardware & display configuration.
If this project is useful to you, please consider giving it a โญ โ it really helps others find it!
Released under the MIT License.

