Skip to content

danusha2345/esp32-ble-gnss-bridge

Repository files navigation

ESP32 BLE GNSS Bridge

Boosty

Прошивка для ESP32, которая мостит любой GNSS/GPS-приёмник на телефон через Bluetooth Low Energy (BLE), с WiFi AP для NTRIP-поправок и real-time выводом на OLED/TFT.

Работает с UM980, u-blox, Quectel и любым GNSS-модулем, который отдаёт NMEA по UART. Поддерживает RTK Fixed/Float, мультисозвездийный приём и двунаправленный pass-through команд.

ESP32 BLE GNSS Bridge — OLED display showing RTK position

Ключевые возможности

  • Двунаправленный BLE UART — Nordic UART Service (NUS), совместимо с любым BLE-терминальным приложением
  • WiFi Access Point — TCP-сервер на порту 23 для релея NTRIP-поправок (до 4 клиентов)
  • Поддержка RTK — детект Fixed/Float, отображение точности в см
  • Мультисозвездийность — GPS, GLONASS, Galileo, BeiDou, QZSS с подсчётом спутников по каждой системе
  • Разбор NMEA — предложения GGA, GNS, GSV, GSA, GST с извлечением спутников/точности
  • OLED-дисплей — SSD1306 128x64: координаты, высота, время, точность, разбивка по спутникам
  • TFT-дисплей — ST7789 135x240: те же данные в цвете (опционально)
  • Поддержка двух плат — ESP32-C3 (одно ядро) и ESP32-S3 (два ядра, BLE + данные на разных ядрах)
  • Высокий throughput — UART на 460800 baud, BLE MTU до 517 байт, ring-буфер 16 KB

Быстрый старт

Прошить готовый бинарник

Скачать последний релиз и прошить через esptool:

pip install esptool

# ESP32-C3
esptool.py write_flash 0x0 unified-esp32c3.bin

# ESP32-S3
esptool.py write_flash 0x0 unified-esp32s3.bin

Сборка из исходников (PlatformIO)

git clone https://github.com/danusha2345/esp32-ble-gnss-bridge.git
cd esp32-ble-gnss-bridge

# Build & upload
pio run -e esp32-c3 -t upload
pio run -e esp32-s3 -t upload

# Serial monitor
pio device monitor -e esp32-c3
pio device monitor -e esp32-s3

Железо

Поддерживаемые платы

Board Architecture Display library
ESP32-C3 Super Mini Single-core RISC-V 160 MHz Arduino_GFX
ESP32-S3-Zero Dual-core Xtensa 240 MHz TFT_eSPI

Подключение

ESP32-C3

Function Pin Notes
GNSS UART RX GPIO8 From GNSS TX
GNSS UART TX GPIO10 To GNSS RX
OLED SDA GPIO3 I2C
OLED SCL GPIO4 I2C, address 0x3C
TFT SCLK / MOSI / DC / RST / BL GPIO0 / 1 / 2 / 9 / 5 SPI, optional

ESP32-S3-Zero

Function Pin Notes
GNSS UART RX GPIO5 From GNSS TX
GNSS UART TX GPIO6 To GNSS RX
OLED SCL GPIO1 I2C
OLED SDA GPIO2 I2C, address 0x3C
TFT DC / RST / MOSI / SCLK / BL GPIO9 / 10 / 11 / 12 / 13 SPI, disabled by default
WS2812 LED GPIO21 Built-in RGB

Полные схемы и список свободных GPIO — см. ESP32-S3-ZERO_PIN_CONNECTIONS.md.

Использование

BLE-подключение

  1. Сканировать BLE-устройство:
    • ESP32-C3: UM980_C3_GPS
    • ESP32-S3: UM980_S3_GPS
  2. Подключиться любым BLE-терминальным приложением — прошивка использует стандартные UUID Nordic UART Service (NUS)
  3. GNSS-данные идут автоматически; команды на конфигурацию GNSS-модуля можно отправлять туда же

Рекомендуемые приложения:

  • Serial Bluetooth Terminal (Android/iOS) — лучший вариант для команд
  • SW Maps (Android/iOS) — NTRIP-поправки + карта (External GNSS > Generic NMEA BLE)
  • nRF Connect — продвинутая BLE-диагностика

Заметка: приложения для Classic Bluetooth SPP не подойдут — здесь только BLE GATT.

WiFi / NTRIP

  1. Подключиться к WiFi AP:
    • ESP32-C3: SSID UM980_GPS_BRIDGE, пароль 123456789
    • ESP32-S3: SSID UM980_GPS_BRIDGE_S3, пароль 123456789
  2. Открыть TCP-соединение на 192.168.4.1:23
  3. Слать NTRIP-поправки или команды — они пробрасываются на GNSS-модуль
  4. GNSS-данные одновременно отправляются всем подключённым WiFi- и BLE-клиентам

Дисплей

OLED/TFT показывает:

  • Координаты с динамической точностью (6–8 знаков после запятой)
  • Высоту и локальное время
  • Точность в метрах или сантиметрах (если < 1 м, отображается xx.x cm)
  • Количество спутников по созвездиям: G:9 R:5 E:3 B:2 Q:1
  • Режим фикса: GPS, DGPS, RTK Fixed, RTK Float и т.д.

Конфигурация

Setting How to change
WiFi SSID / password Edit ssid and password at top of src/main.cpp
BLE device name Edit the NimBLEDevice::init() and advertising setName() values in src/main.cpp
Time zone Build flag -DTZ_FORCE_OFFSET_MINUTES=<minutes> in platformio.ini (e.g. 180 = UTC+3)
UART baud rate Edit SerialPort.begin() in src/main.cpp

Архитектура

Однофайловая прошивка (src/main.cpp, ~2000 строк). Два PlatformIO-окружения, переключение через #ifdef ESP32_S3.

  • ESP32-S3: два ядра — BLE-task на core 0, обработка данных на core 1
  • ESP32-C3: одно ядро — всё в loop()

Поток данных: GNSS <-> UART (460800) <-> Ring Buffer (16KB) <-> BLE NUS + WiFi TCP

Лицензия

MIT

ESP32 BLE GNSS Bridge hardware setup

About

передача данных с uart через блютуз на телефон

Resources

Stars

Watchers

Forks

Releases

Sponsor this project

Packages

Contributors

Languages