Skip to content

pigro141/BLE-HUD-navigation-ESP32-LilygoTDisplayS3

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

12 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿงญ BLE HUD Navigation โ€” LilyGO T-Display-S3

A pocket-sized Bluetooth Heads-Up Display that mirrors your phone's turn-by-turn navigation โ€” directions, distance, speed and speed limits โ€” onto a crisp ESP32-S3 screen on your dashboard.

Platform Board Framework Connectivity License: MIT

Device Preview


๐Ÿš€ Overview

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.

The HUD running next to a phone in Sygic navigation
The HUD (right) mirroring the next turn, distance and speed limit from the phone (left).

โœจ Features

  • ๐Ÿงญ 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

๐Ÿ›  Hardware

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

๐Ÿ›’ Where to buy the board

๐Ÿ”˜ Buttons

Button GPIO Action
Left IO0 Long press โ†’ enter deep sleep (press again to wake)
Right IO35 Toggle battery voltage display

๐Ÿ“ฒ Phone app โ€” Sygic GPS (iOS)

The HUD currently receives data from Sygic GPS Navigation & Maps: Download on the App Store.

Enable the hidden BLE HUD feature

  1. Open Sygic โ†’ Menu โ†’ Settings โ†’ Info โ†’ About
  2. Tap 3 times on any item to unlock the hidden menu
  3. Go to About โ†’ BLE HUD โ†’ Start
  4. Grant Bluetooth permission

The app will then find and connect to the ESP32 automatically.


๐Ÿ”ง Build & flash

Prerequisites

Required libraries

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

Configure TFT_eSPI for the T-Display-S3

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.

Flash

  1. Board: ESP32S3 Dev Module (or LilyGo T-Display-S3)
  2. Select the correct USB port
  3. Open src/BLEHUDNaviESP32TDislpays3.ino and Upload

๐Ÿ’ก If the board isn't detected, hold BOOT while plugging in the USB-C cable to force download mode.


๐Ÿ“ก BLE communication protocol

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

๐Ÿ’ป Usage

  1. Power on the device โ€” it shows the startup animation, then "waiting for connection".
  2. Start navigation in Sygic and enable the BLE HUD feature (steps above).
  3. Once connected, the HUD shows the next direction, distance, speed and speed limit automatically.
  4. Long-press the left button to put the device into deep sleep.

๐Ÿ—‚๏ธ Project structure

.
โ”œโ”€โ”€ 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

๐Ÿงฏ Troubleshooting

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

๐Ÿ”ฎ Roadmap ideas

  • Android navigation app support
  • Configurable units (km/h โ†” mph)
  • Adjustable brightness / auto-dimming
  • 3D-printed dashboard mount

๐Ÿ™Œ Acknowledgements

If this project is useful to you, please consider giving it a โญ โ€” it really helps others find it!


๐Ÿ“œ License

Released under the MIT License.

About

Wireless Bluetooth HUD for car navigation on a LilyGO T-Display-S3 (ESP32-S3): turn-by-turn directions, distance, speed & speed limits mirrored from Sygic over BLE.

Topics

Resources

License

Stars

4 stars

Watchers

2 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors