Вступление
Всем привет! Вначале я расскажу как появился проект «AGLoRa» и кому он может пригодиться.
Меня зовут Евгений, и в обычной жизни я основатель и директор небольшого коллектива, который занимается интеграцией оборудования спутникового мониторинга.
Мне всегда было интересно пробовать новые технологии, так что я с интересом смотрел за новостями по технологии передачи LoRa. Сейчас модули стали настолько доступны, что не удержался и сделал свой небольшой прототип, для того чтобы в реальной жизни посмотреть возможности этого протокола. Всегда гораздо приятнее видеть расстояние приема в виде цифры на телефоне, чем смотреть за мигающей лампочкой.
Так как я занимаюсь спутниковым мониторингом транспорта, то всё до чего я дотрагиваюсь, в итоге превращается в трекер. Не знаю почему так происходит, но в данном случае пригодилось.
В этой статье содержится описание процесса сборки простого прототипа (MVP) спутникового трекера, который передает данные по протоколу LoRa. Это позволит использовать его например там, где нет покрытия сотовых сетей. Либо там, где важно бесплатное использование трекера, например на небольшой ограниченной территории. Либо при фиксированной передаче между стационарными объектами.
Фактически это прототип, который можно развивать в любую интересующую сторону. Вместо передачи координат можно, например, передавать данные каких-либо датчиков: температуры, уровня топлива, освещенности, влажности. При необходимости я могу доработать аппаратное и программное обеспечение под ваши потребности.
Первое испытание на первых попавшихся антеннах дало дальность 3 км на 868 МГц. Испытание на 433 МГц за городом, в чистом радиоэфире, показало устойчивый прием сигнал на 5 км (дальше не проверяли, в этот раз не было необходимости). Разумеется очень сильно влияет рельеф и препятствия.
Мне интересно дальнейшее развитие проекта, так что присылайте свои предложения на shlyagin@gmail.com. Отчасти поэтому я решил выложить проект как open-source, и поэтому для аппаратной части выбрана популярная и очень доступная платформа Arduino. Благодаря этому чтобы любой желающий может быстро собрать свою версию устройства, при этом для коммерческого использования не сложно будет повторить всё на другой элементной базе, например STM32. Для повторения прототипа не надо даже уметь паять, достаточно купить нужные модули в любом радиоэлектронном маркетплейсе, соединить их разъемами и залить всего один файлик скетча. Заходите в мой github, пробуйте, присылайте свои предложения по развитию проекта. Начинаем!
Кому нужна AGLoRa
Я назвал проект AGLoRa, это аббревиатура от слов Arduino, GPS и LoRa.
Основная “фишка” — подключение к телефону по bluetooth, что позволит удобно видеть местоположение других трекеров.
AGLoRa может пригодиться тем, кто любит гулять там, где плохой прием сотовой связи. Квадроциклисты, мотоциклисты, лодки в открытом море. Организация спортивных мероприятий, трекинг прокатной техники, мониторинг животных, практически всё где применяются обычные персональные GPS трекеры, но при этом нет покрытия сотовой связи и достаточен небольшой радиус контроля. Китайцы обещают до 8 километров на 433 МГц, но разумеется это зависит от рельефа, условий и забитости эфира.
Что такое LoRa
Среди вышеперечисленных слов Arduino + GPS + LoRa, наверное только LoRa требует дальнейшего объяснения. Проще загуглить и почитать википедию, но в двух словах — это способ передачи цифровой информации по радиоканалу устройствами с малой мощностью, на большое расстояние. Разумеется мы жертвуем скоростью передачи. Передача по радиоканалу с помощью модуляции LoRa это закрытая проприетарная технология, фактически мы просто покупаем готовый чип и им пользуемся.
Важно отметить момент того, что стоит отличать просто модуляцию и радиоустройства LoRa от LoRaWAN. LoRaWAN это сеть построенная на базе устройств LoRa. Грубо говоря ничего не мешает устройствам общаться напрямую, но можно использовать их и в одной общей сети базовых станций, подобно сотовым телефонам.
Мы не пойдём по этому пути по двум причинам: даже простенькая базовая станция LoRaWAN стоит довольно дорого. Вторая причина — зачем нам в глухом лесу поднимать сеть, если нам нужно просто видеть данные с других трекеров. Если интересно почитать про LoRaWAN то вот одна из популярных статей на Xабре про iot — контроль котиков.
Архитектура трекера
Принцип работы у нас будет как у любого персонального трекера. Получаем свои координаты GPS и регулярно отправляем через передатчик LoRa широковещательным пакетом на все другие устройства которые могут услышать. Если при этом подключиться по bluetooth к устройству, то на телефоне можно будет видеть местоположение других устройств. Если не подключаться, то наш трекер просто регулярно кидает в эфир свои координаты.
Принципы которые легли в основу прототипа:
- Простые компоненты. Кликнули детальки с какого-нибудь маркетплейса, или купили в радиодеталях. Это, например, причина отказа от Arduino Nano 33 BLE в пользу отдельной платки bluetooth. Я думаю что всё кроме LoRa модуля вообще может быть в наличии в магазине любого крупного города.
- Простая сборка. Не умеете или не хотите паять — не страшно. Собрать прототип для экспериментов можно и без этого. Cоединили модули проводами, загрузили скетч, упаковали это хозяйство в любой подходящий корпус и всё готово.
- Модульность. Не нужен блютус — не ставь. Не нужны координаты GPS — подключи любой другой датчик и немножко измени скетч. Нужно внешнее питание не от аккумуляторов, а от 12 вольт, тоже без проблем — ставим КРенку (микросхему-стабилизатор на 5 вольт) и всё работает.
Аппаратная часть трекера AGLoRa
Для того чтобы сделать трекер нам нужны следующие компоненты: Arduino Nano, LoRa, GPS, Bluetooth. Я поэкспериментировал с разными модулями, какой лучше купить — дальше в статье.
Начнем описание с того, ради чего делался проект — с модуля LoRa.
Модуль LoRa
После небольшого «ресёрча» я решил попробовать относительно новые модули EBYTE. Они построены на микросхемах SEMTECH (что логично, это их проприетарная технология), но работают через UART, что довольно удобно. Программно модули одинаковые, но при покупке надо обращать внимание на частоту. Разумеется модуль на 868 Мгц не услышит модуль на 433 МГц. Эти частоты в России легально можно использовать, в а 2018 году частота 868 МГц даже была немного расширена к радости всего IoT сообщества. Так что даже несмотря на то что мы делаем маленькое маломощное устройство для глухомани, которое вряд ли кому-то помешает, его можно использовать вообще ничего не опасаясь.
Даташиты можно найти на сайте производителя: E220-900T22D (868 МГц), E433T30D (433 МГц). Вобщем это все без проблем гуглится для тех модулей которые будете использовать, я вставляю ссылки не для вас, дорогие читатели, а скорее для поисковых систем, которые любят это в статьях.
Ещё раз для понимания. Есть технология, её владелец Semtech. Они выпускают проприетарные микросхемы SX1278/SX1276 на базе который другой производитель, в данном случае EBYTE выпускает свой модуль LLCC68, у которого есть удобный интерфейс UART со своими командами, место куда прикручивается антенна, и какая-то внутренняя инженерная магия которая позволяет EBYTE обещать дальность работы больше, чем у отдельной оригинальной микросхемы от Semtech.
Программируется всё элементарно. В Arduino IDE есть библиотека для работы c модулями EBYTE, но как-то так вышло что пока я разбирался, то вначале нагуглил библиотеку EBYTE на GitHub от Kris Kasprzak, и так в результате на ней и сделал. Она очень простая, разберется даже ребенок. Переписать на ту которая устанавливается через Arduino IDE не сложно, но теперь уже лень.
Трекер у нас простой, так что по задумке нам нужно тупо регулярно кидать широковещательные пакеты на максимальную дальность, а все остальное время слушать что откуда прилетело. С ЛоРой все как в обычно, медленнее скорость — больше дальность передачи.
Судя по мануалу нам нет необходимости изменять значение частоты передачи по воздуху, по умолчанию оно должно стоять минимальное (то есть для макксимальной дальности).
Это описание модуля 868 МГц. Обратите внимание на условия при которых тот же мануал обещает дальность в пять километров.
Модуль GPS
GPS можно использовать любой. Если используете NEO от ubloxто нужно подключиться по USB и с помощью его родной программы u-center (внимательно читайте сайт, u-center2 это другая программа!) выключить бинарный протокол оставив только NMEA и переключить скорость передачи на 9600.
https://www.u-blox.com/en/product/u-center
Из практического опыта — модули NEO-6M даже в идеальных условиях ловят спутники по полчаса и теряют при первой удобной возможности. Зато стоят дешево.
Вот такой модуль как на фото — не надо. Более дорогие варианты тоже NEO-6M, но с выходом для внешней активной антенны. Они тоже очень задумчивые и нормально работают только если подключать внешнюю антенну — своеобразный компромисс.
NEO-8M работает получше, так что самый правильный совет при выборе — не экономить и купить какой-нибудь более дорогой модуль. В случае GPS зависимость дороже-лучше работает напрямую.
Библиотека для работы TinyGPS+, устанавливается непосредственно из среды программирования, примеры понятные, по программированию рассказать и нечего.
Модуль Bluetooth BLE
Для того чтобы наше устройство могло подключиться в iphone необходимо использовать модуль с поддержкой BLE (bluetooth low energy). У нас очень примитивные задачи, так что подойдёт любая платка умеющая в BLE . Я попробовал AT-09 и HC-05.
Про их различие напишу коряво, но более понятно — эти модули припаяны к одной и той же плате ZS-040 так что аппаратно выходы одинаковые, то есть если вы перевернете платку bluetooth — то вы поймете какой именно модуль в руках.
С точки зрения скетча arduino модули тоже ничем не отличаются. А вот по BLE связи — они разные.
При запуске трекера мы меняем название модуля на «AGLoRa», а потом отправляем в модуль данные через serial. Приложение на телефоне находит нужный дескриптор (мы просто ищем рабочий вариант из заранее предопределенных) и подписывается на его изменения. Каждое изменение — новый пакет данных.
Так как модуль подключен через основной порт serial — то подключать bluetooth надо уже после программирования микроконтроллера.
Arduino
Для проекта подойдёт любой микро-компьютер на процессоре Atmega328P, ну просто потому что в Atmega168 не хватит места для загрузки скетча. Можно взять UNO или Nano, это не важно.
Принцип работы программы
Принцип работы трекера «кто услышал хорошо». Так как мы кидаем широковещательные пакеты, то ситуация когда какой-то пакет не будет услышан всеми получателями — это нормально. Поэтому в данном случае мы не делаем никаких механизмов контроля получения данных получателями, как это сделано у персональных GPS трекеров которые работают по сети GSM. Во всех протоколах телематических серверов обязательно присутствует подтверждение получения пакета. Ну и не забываем что это просто бесплатный прототип, пока не будем заморачиваться.
Так как аппаратный serial может работать только один, то основное время мы занимаемся тем, что слушаем эфир. Если получаем данные с других трекеров то ретранслируем их в аппаратный serial (то есть отправляем в BLE).
Регулярно через заданный интервал времени переключаемся на GPS приемник, получаем оттуда координаты и кидаем свой пакет LoRa.
Насколько я разобрался в документации, модуль LoRa сам видит то что уже происходит передача информации другим модулем. Наша задача закинуть данные для передачи в сеть и сообщить по какому адресу адресу мы их отправляем.
В любом случае мы стараемся минимизировать время передачи за счет того что передаём тольок самый необходимый минимум информации. Это во первых сокращает вероятность возможных конфликтов при передаче, а во вторых потенциально увеличит дальность за счет уменьшения ошибок при передаче длинных пакетов.
Сборка. Подключение модулей.
Подключение согласно настройкам в скетче:
#define GPS_PIN_RX 8
#define GPS_PIN_TX 7
#define LORA_PIN_RX 2
#define LORA_PIN_TX 3
#define LORA_PIN_M0 4
#define LORA_PIN_M1 5
#define LORA_PIN_AX 6
Bluetooth подключается к RX и TX самой ардуино, так что не забудьте, что это нужно делать после заливки скетча, иначе не получится запрограммировать.
Скетч: https://github.com/Udj13/AGLoRa/
Питание AGLoRa от 12 вольт или аккумуляторов 18650
Если хотите питать от 12 вольт или аккумуляторов то в самом простом вариант можно добавить стабилизатор питания «кренку» со сглаживающими конденсаторами или её импортный аналог. Я не думаю что это способно вызвать какие-то сложности.
Программа для телефона «AGLoRa Client»
Теперь нужно установить программу на телефон.
Исходный код выложен на гитхабе, вы можете скомпилировать и использовать его совершенно бесплатно. Прямая ссылка на скачивание AGLoRA APK для Android. Либо он же есть в релизах на GitHub.
На iOs (для устройств iPhone и iPad) клиент AGLoRa доступен в App Store.
Я решил написать клиента на Flutter чтобы было проще поддерживать android и ios версии одновременно.
Для удобства можно использовать направление на север которое определяет GPS приемник телефон, чтобы увидеть направление на трекер. Но так как не во всех телефонах это работает корректно, то можно выключить галочку «use your compass» и направление на трекер будет показываться из позиции «верх это север». Когда вы перемещаетесь то расстояние до точки пересчитывается в реальном времени.
Тестирование трекера AGLoRa
Для тестирования AGLoRa нужно собрать минимум два таких LoRa трекера, один для передачи координат, второй для их приема. Ко второму по bluetooth подключается телефон, на передающем модуль BLE при сборке можно даже не подключать (как и GPS на принимающем). Я не стал заморачиваться и собрал тестовые комплекты из того что было — парочка Arduino UNO, просто на соединительных проводах. Питать их можно через USB ардуины от телефонного повербанка.
Вот в принципе и всё, поздравляю с тем, что дочитали до конца. Ваш прототип LoRa трекера по проекту AGLoRa — готов!
Осталось сфотографировать полученный результат, получить одобрение кошки и можно начинать эксперименты.
Еще раз важные ссылки из статьи:
Репозиторий: https://github.com/Udj13/AGLoRa/
Видео с примером работы: https://www.youtube.com/watch?v=bU68tQFBxwA
Сайт проекта: https://aglora.org/