GPS-трекер LoRa-GPS. Часть 5. Приемник с Bluetooth. Приложение для Android.

Непредусмотренная ранее — пятая часть публикации сведений о LoRa-GPS трекере, который летает в любительских ракетах (моих и коллег) повествует о дополнении конструкции приемника LoRa. Для связи с «оконечным устройством» — смартфоном в приемник добавлен модуль Bluetooth — теперь нет проводов — решение получается беспроводным. 

В цикле описан LoRa-GPS трекер, выполненный на платформе Arduino и LoRa модулях E19 от E-byte. На приемной стороне в качестве оконечного устройства используется смартфон/планшет на Android, связь с которым осуществляется либо по USB (USB-UART), либо по Bluetooth (мост Bluetooth-UART). Конструкция совместима по протоколам радиоканала с конструкцией Дианко Чернева (pinko): настройка модуля LoRa, длина и формат передаваемого пакета.

Общая схема работы GPS-трекера описана в предыдущих частях.

В первой части был описан передатчик системы. Вторая часть — описание индикатора приемника системы, разработанного pinko. Задача передатчика заключается в приеме сигналов со спутников и определении текущих координат (этим занимается специальный модуль GPS), упаковке полученных данных в удобный формат и передаче подготовленного пакета по радиоканалу (этим занимается радиопередатчик модуля LoRa E19-433M20S2). Приемник обязан принять пакет от передатчика по радиоканалу, «вынуть» из пакета данные и удобным способом (у нас это UART-USB, текстовые посылки) передать их на оконечное устройство (планшет, смартфон, компьютер и т.п). В третьей части описан приемник системы. В четвертой — приложение для Android.


Схема приемника с модулем Bluetooth отличается от USB приемника лишь наличием модуля Bluetooth. В качестве Bluetooth модуля выступает DD4 — модуль HC-06. Его вход Rx подключен к выходу последовательного интерфейса контроллера DD2 — модуль Arduino NANO (проверены ATmega168 и ATmega328). К контроллеру по SPI подключен модуль LoRa E19-433M20S2 (DD1, обратите внимание — «сигнал готовности модуля» DIO0 опрашивается программно через D2 Arduino).

Показанная на схеме EEPROM 24C256 (DD3) в реальном проекте не устанавливалась. Светодиод нужен для контроля работоспособности приемника (программно включается во время приема данных по радиоканалу).

Питание схемы осуществляется от оконечного устройства (например, смартфона) через разъем USB модуля DD2 Arduino NANO, подключенного к разъему OTG. Либо от отдельного источника питания 5В, подключаемого к разъему USB модуля Arduino NANO (это целесообразно при обмене данными с смартфоном через Bluetooth).

На схеме показан «адаптированный» модуль HC-06, где к модулю (внутри обозначения) добавлен стабилизатор напряжения (3,3В), цепи согласования уровней и индикаторный светодиод (он удобен при контроле установления соединения Bluetooth).

Стабилизатор напряжения DA1 обеспечивает необходимые 3,3В для LoRa модуля DD1. Элементы VD2..VD5 и R7..R10 нужны для согласования уровней логических сигналов SPI (достаточно сделать только для выходных цепей Arduino).

Если предполагается работа только с Bluetooth соединением, то нет необходимости устанавливать модуль Arduino NANO. Вполне достаточно Arduino Pro mini. К тому же в таком решении целесообразно питать всю конструкцию от одного аккумулятора на 3,6В. В этом случае можно убрать все цепи согласования уровней.


Скетч для модуля Arduino NANO (работает и на ATMega168) можно тут взять. Работает тот же скетч, что использован в варианте USB-OTG.

Перед установкой Bluetooth модуля, надо убедиться, что он настроен на стандартный последовательный обмен (9600, N). В скетче нет специальных команд настройки модуля HC-06.

Алгоритм программы простой (основные моменты, настройки и проверки предоставлены pinko и «портированы на язык ардуины»):

В процедуре инициализации (настройки LoRa приемника) мигаем диодом (номер версии — 4 раза) и далее в цикле делаем следующее:

  • ждем приема сигнала с приемника (проверяем вывод DIO0);
  • сбрасываем регистры приемника, вызвавшие включение этого сигнала;
  • определяем уровень сигнала и соотношение сигнал/шум;
  • считываем из буфера приемника принятый пакет (17 байт) данных;
  • включаем контрольный светодиод (контроль принятого пакета);
  • распаковываем двоичные данные и переводим их в текстовый вид;
  • передаем подготовленную строку по последовательному каналу;
  • если в принятом пакете нет корректных координат — повторно включаем светодиод.

Важно! Для настройки модуля LoRa (для совместимости с решением LoRa-GPS pinko):
С помощью стандартной библиотеки LoRa не удалось заставить работать модуль с приемником pinko. Многие регистры в типовой библиотеке либо не настраиваются (остаются «как есть»), либо жестко программируются без возможности смены их состояния доступными методами. Пришлось «доработать» типовую библиотеку для SX1278 (LoRa): перенесены в public функции работы с регистрами микросхемы, добавлена еще одна специальная процедура инициализации модуля LoRa — beginE19r.

Настройка основных параметров модуля производится в соответствующей строке:
//запуск с частотой сигнала, полосой и длиной посылки
if (!LoRa.beginE19r(415.2E6)) {
например, здесь устанавливается частота 415,2МГц. Полоса 62,5КГц и длина посылки фиксированы в самой процедуре.

По поведению контрольного светодиода (в скетче вывод продублирован на D7 для подключения активного звукового излучателя) можно судить о наличии корректных данных о местоположении передатчика системы. Одинарное мигание в такт с принимаемыми пакетами — все хорошо, координаты есть. Двойное мигание — сигнал с передатчика есть, но нет координат.


Формат передаваемых по радиоканалу данных предложен pinko и оставлен для совместимости с его аппаратными решениями. Подробно описан в предыдущих частях.

Пример выводимой по UART строки одного принятого пакета:

# 21:12:40; 56; 40.4567; 44; 12.1234; 136; 3.96; 201; -98; 6.3;

где: # — начало строки, время (часы:минуты:секунды), широта (градусы, минуты с долями), долгота (градусы, минуты с долями), высота (метры), напряжение питания передатчика (вольты), номер переданного пакета, уровень сигнала и SNR. Формирование всех значений совпадает с описанным форматом во второй части публикации.


Несколько фото макета конструкции приемника с Bluetooth.

Добавленный модуль Bloetooth с платой приемника чуть крупнее


Приложение для Android (v16, 3.0) практически полностью совпадает в интерфейсе и методах работы с приложением для USB (v14, 2.10)

Отличия в верхней строке — в ней два блока для установления соединения — слева для USB подключения приемника, справа — для Bluetooth подключения.

Порядок работы такой:

  • Включить Bluetooth на смартфоне
  • Включить приемник LoRa-GPS (на модуле НС-06 будет часто моргать контрольный светодиод)
  • Запустить приложение для смартфона.
  • Нажать кнопку установления связи с приемником по Bluetooth. Откроется список обнаруженных Bloetooth устройств. Выбрать приемник (он виден в списке как «НС-06»)
  • После установления соединения верхняя строка приложения будет зеленой, а светодиод на модуле НС-06 будет светиться непрерывно.
  • Далее работа с приложением такая же как в версии 14.

При необходимости, можно разорвать Bloetooth соединение с LoRa-GPS приемником нажав крайнюю справа кнопку верхней строки приложения. Строка — «покраснеет», а светодиод на модуле НС-06 снова начнет часто мигать.

GPScalcAndOpenWeb_16 — приложение для Android (v3.0) с возможностью установления связи с приемником LoRa-GPS по Bloetooth.


13.10.2022 немного изменил Приложение для Android (v17, 3.2). Оно практически полностью совпадает в интерфейсе с v16.

Добавлено/Изменено:

  • Пришлось изменить работу с файлом. Новые версии Android более критично относятся к безопасности, поэтому место сохранения файла изменено с корневого каталога на папку приложения. Обычно это: /Android/data/<имя приложения>/files
  • Добавлена на экран строка состояния (внизу, шрифт с наклоном). В строку выводится сообщение (подтверждение исполнения действия) о прочтении и записи файла (при работе с соответствующими кнопками); о копировании координат из списка в «Старт» и из смартфона в строку редактирования.

GPScalcAndOpenWeb_17 (1) — приложение для Android (v3.2)


31.10.2022 немного изменил Приложение для Android (v18, 3.3). Оно практически полностью совпадает в интерфейсе с v16.

Добавлено/Изменено:

  • Для строки состояния добавлены события работы со строкой списка (добавление, считывание, удаление).
  • На картинку направления добавлена черно-белая стрелка компаса. Указывает на север.


GPScalcAndOpenWeb_18 — приложение для Android (v3.3)


Файлы: