Android-приложение для приборки на базе ESP32. Делает три вещи:
- Берёт местоположение телефона через
FusedLocationProviderClient(тот же API, которым пользуется само приложение Google Maps — само выбирает лучший источник: реальный GPS, Wi-Fi или вышки сотовой связи) и шлёт его как NMEA-сообщения ($GPRMC+$GPGGA) по UDP на приборку — на тот же IP:порт (по умолчанию 10110), что слушает приборка. - Считает маршруты для кнопки "GO" на экране навигации приборки — полностью офлайн, через отдельно установленное приложение BRouter, без какого-либо своего сервера. На стороне приборки адрес телефона узнаётся автоматически (из тех же GPS/UDP-пакетов) — вручную ничего не прописывается.
- Ищет адреса для кнопки с лупой на экране навигации — через открытый геокодер Photon, онлайн, без ключей и регистрации.
Маршрутизация и поиск используют один и тот же UDP-порт 10111, обе отвечают на запросы приборки автоматически, пока запущена служба.
Для кнопки "GO" на карте приборки (тап по точке → маршрут) нужно отдельно установленное приложение BRouter — оно бесплатное, с открытым кодом, считает маршруты полностью офлайн и умеет работать в любой точке мира без своего сервера. NavBridge само его не тянет за собой (это отдельное Google Play/F-Droid приложение) — только обращается к нему за расчётом.
Настройка (один раз):
- Установите BRouter — Google Play или F-Droid.
- Откройте BRouter, зайдите в его меню загрузки картографических данных ("Download Manager" / "Manage") и скачайте квадраты 5×5° для тех районов, где реально будете ездить (например, для Москвы и области — один-два квадрата). Это не весь мир и не вся страна — несколько мегабайт на квадрат, качается за пару минут. Когда поедете в новое место — так же докачайте нужный квадрат там, через тот же экран BRouter.
- В NavBridge на главном экране выберите профиль маршрута (Электротранспорт/ велосипед, Автомобиль или Пешком) — под тип вашего "веска" обычно подходит первый вариант. Профиль можно менять и во время работы службы, без перезапуска.
- Дальше ничего вручную настраивать не нужно — как только вы нажимаете Старт в NavBridge, оно параллельно с отправкой координат слушает запросы на маршрут от приборки (UDP-порт 10111) и отвечает на них через BRouter.
Если на приборке при нажатии GO появляется ошибка вида "route: position not mapped in existing datafile" — это BRouter говорит, что для этой точки нет скачанных данных: откройте BRouter и докачайте нужный квадрат. Ошибка "BRouter app not installed or service unreachable" — само приложение BRouter не установлено или ещё не запускалось ни разу (откройте его хотя бы один раз после установки).
Ничего дополнительно устанавливать не нужно. Поиск работает через Photon — открытый геокодер по данным OpenStreetMap, который держит Komoot. Ни ключа, ни регистрации, ни отдельного приложения: NavBridge обращается к нему напрямую по HTTPS.
Единственное требование — интернет на телефоне в момент поиска. Это отличает поиск от маршрутизации: BRouter считает офлайн, Photon — нет. Уже построенный маршрут при потере связи продолжает работать, а вот новый адрес без интернета не найдётся.
Как пользоваться:
- На экране навигации приборки нажмите кнопку с лупой (слева сверху, рядом со стрелкой "назад").
- Наберите адрес или название места. Список подходящих вариантов появляется сам, через полсекунды после того, как вы перестали печатать — жать ничего не надо. Минимум 3 символа.
- Клавиатура переключается кнопками в нижнем ряду:
- ABC — латиница
- РУС — кириллица
- 123 — цифры, знаки и польские буквы (ąćęłńóśźż)
- Тапните нужную строку — панель закроется, карта встанет на найденную точку, на ней появится метка назначения.
- Дальше как обычно: нажмите 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, и без него названия и подписи клавиш отрисуются пустыми прямоугольниками.
- Откройте NavBridge.
- Введите IP вашего ESP32 (тот же, что показан на экране навигации) и порт
(по умолчанию
10110, менять не нужно). Выберите профиль маршрута (см. раздел выше). - Нажмите Старт — приложение спросит разрешение на геолокацию (разрешите), и на Android 13+ — разрешение на уведомления (тоже разрешите, иначе не будет видно постоянного уведомления о работе службы).
- Дальше приложение работает в фоне (с уведомлением, в котором есть кнопка Стоп) и шлёт координаты каждые ~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.