Skip to content

Latest commit

 

History

24 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NavBridge

Android-приложение для приборки на базе ESP32. Делает три вещи:

  1. Берёт местоположение телефона через FusedLocationProviderClient (тот же API, которым пользуется само приложение Google Maps — само выбирает лучший источник: реальный GPS, Wi-Fi или вышки сотовой связи) и шлёт его как NMEA-сообщения ($GPRMC + $GPGGA) по UDP на приборку — на тот же IP:порт (по умолчанию 10110), что слушает приборка.
  2. Считает маршруты для кнопки "GO" на экране навигации приборки — полностью офлайн, через отдельно установленное приложение BRouter, без какого-либо своего сервера. На стороне приборки адрес телефона узнаётся автоматически (из тех же GPS/UDP-пакетов) — вручную ничего не прописывается.
  3. Ищет адреса для кнопки с лупой на экране навигации — через открытый геокодер Photon, онлайн, без ключей и регистрации.

Маршрутизация и поиск используют один и тот же UDP-порт 10111, обе отвечают на запросы приборки автоматически, пока запущена служба.

Маршрутизация (BRouter)

Для кнопки "GO" на карте приборки (тап по точке → маршрут) нужно отдельно установленное приложение BRouter — оно бесплатное, с открытым кодом, считает маршруты полностью офлайн и умеет работать в любой точке мира без своего сервера. NavBridge само его не тянет за собой (это отдельное Google Play/F-Droid приложение) — только обращается к нему за расчётом.

Настройка (один раз):

  1. Установите BRouterGoogle Play или F-Droid.
  2. Откройте BRouter, зайдите в его меню загрузки картографических данных ("Download Manager" / "Manage") и скачайте квадраты 5×5° для тех районов, где реально будете ездить (например, для Москвы и области — один-два квадрата). Это не весь мир и не вся страна — несколько мегабайт на квадрат, качается за пару минут. Когда поедете в новое место — так же докачайте нужный квадрат там, через тот же экран BRouter.
  3. В NavBridge на главном экране выберите профиль маршрута (Электротранспорт/ велосипед, Автомобиль или Пешком) — под тип вашего "веска" обычно подходит первый вариант. Профиль можно менять и во время работы службы, без перезапуска.
  4. Дальше ничего вручную настраивать не нужно — как только вы нажимаете Старт в NavBridge, оно параллельно с отправкой координат слушает запросы на маршрут от приборки (UDP-порт 10111) и отвечает на них через BRouter.

Если на приборке при нажатии GO появляется ошибка вида "route: position not mapped in existing datafile" — это BRouter говорит, что для этой точки нет скачанных данных: откройте BRouter и докачайте нужный квадрат. Ошибка "BRouter app not installed or service unreachable" — само приложение BRouter не установлено или ещё не запускалось ни разу (откройте его хотя бы один раз после установки).

Поиск адресов (Photon)

Ничего дополнительно устанавливать не нужно. Поиск работает через Photon — открытый геокодер по данным OpenStreetMap, который держит Komoot. Ни ключа, ни регистрации, ни отдельного приложения: NavBridge обращается к нему напрямую по HTTPS.

Единственное требование — интернет на телефоне в момент поиска. Это отличает поиск от маршрутизации: BRouter считает офлайн, Photon — нет. Уже построенный маршрут при потере связи продолжает работать, а вот новый адрес без интернета не найдётся.

Как пользоваться:

  1. На экране навигации приборки нажмите кнопку с лупой (слева сверху, рядом со стрелкой "назад").
  2. Наберите адрес или название места. Список подходящих вариантов появляется сам, через полсекунды после того, как вы перестали печатать — жать ничего не надо. Минимум 3 символа.
  3. Клавиатура переключается кнопками в нижнем ряду:
    • ABC — латиница
    • РУС — кириллица
    • 123 — цифры, знаки и польские буквы (ąćęłńóśźż)
  4. Тапните нужную строку — панель закроется, карта встанет на найденную точку, на ней появится метка назначения.
  5. Дальше как обычно: нажмите GO, и маршрут посчитает BRouter.

Поиск учитывает, где вы находитесь: при одинаковых названиях ближайшее показывается первым. Регистр не важен, диакритику можно не набирать — "Wroclaw" находит "Wrocław".

Маршрут не строится автоматически по тапу на результат — это сделано намеренно: выбрать не тот вариант из восьми и сразу запустить расчёт хуже, чем нажать GO лишний раз.

Если на приборке вместо списка появляется текст — это ответ сервера: "no results" — ничего не найдено, попробуйте иначе; "rate limited, slow down" — слишком часто, подождите; "network: ..." — нет интернета на телефоне; "no response from phone (app running?)" — не запущена служба NavBridge.

Установка

Скачайте последний NavBridge-*.apk со страницы Releases, откройте файл на телефоне и установите — Android попросит разрешить установку "из неизвестных источников" для того приложения, через которое вы открыли файл (Файлы, браузер и т.п.), это нормально для APK не из Google Play.

На стороне приборки

Поиску нужен шрифт с кириллицей и польскими буквами — стандартные шрифты LVGL содержат только ASCII, и без него названия и подписи клавиш отрисуются пустыми прямоугольниками.

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

  1. Откройте NavBridge.
  2. Введите IP вашего ESP32 (тот же, что показан на экране навигации) и порт (по умолчанию 10110, менять не нужно). Выберите профиль маршрута (см. раздел выше).
  3. Нажмите Старт — приложение спросит разрешение на геолокацию (разрешите), и на Android 13+ — разрешение на уведомления (тоже разрешите, иначе не будет видно постоянного уведомления о работе службы).
  4. Дальше приложение работает в фоне (с уведомлением, в котором есть кнопка Стоп) и шлёт координаты каждые ~3 секунды, пока не нажмёте Стоп, а заодно отвечает на запросы маршрута и поиска от приборки. Экран телефона можно выключать — фоновая служба (foreground service) продолжит работать.

Ограничения / что стоит знать

  • Приложению нужны Google Play Services (для FusedLocationProviderClient) — на обычных Android-телефонах это есть всегда, но на "degoogled" прошивках (GrapheneOS и т.п.) работать не будет.
  • Точность зависит от того, что смог отдать FusedLocationProviderClient — на улице обычно это GPS (несколько метров), в помещении — по Wi-Fi/вышкам (от ~30 до нескольких сотен метров), как в обычных картах на телефоне.
  • Приложение не подписано релизным ключом — это debug-сборка, для личного использования этого достаточно.
  • BRouter считает маршруты офлайн, но у него есть предел по прямой между точками — около 150 км (время расчёта растёт квадратично с расстоянием). Для городских/районных поездок этого с большим запасом хватает.
  • Расчёт маршрута идёт на CPU телефона в момент нажатия GO — первый раз для новой области может занять несколько секунд (плюс BRouter должен успеть прочитать её сегмент с диска).
  • Публичный сервер Photon — бесплатный и без гарантий доступности; при чрезмерной нагрузке запросы урезаются. NavBridge держится в разумных рамках: приборка ждёт паузы в наборе, а приложение не делает больше одного запроса в секунду, так что за поездку набегают десятки запросов, а не тысячи. Если захочется независимости, Photon ставится и локально (Apache-2.0) — тогда достаточно поменять PHOTON_BASE в PhotonClient.kt на адрес своего сервера.
  • Поиск отдаёт максимум 8 результатов; на экране приборки видно 4–5, до остальных список прокручивается.

Лицензия

MIT — см. LICENSE.

Данные поиска — OpenStreetMap, ODbL.

About

Небольшое Android-приложение: транслирует местоположение телефона (GPS на улице, Wi-Fi/сеть в помещении — автоматически) стандартными NMEA 0183 сообщениями по UDP. Строит маршруты для навигации на приборке полностью офлайн через отдельно установленное приложение BRouter, без своего сервера. Для самодельных GPS-навигаторов и ESP32/Arduino-проектов.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages