В этой статье вы узнаете, как создать собственный GPS-трекер с помощью микроконтроллеров Pycom LoPy, а также научитесь настраивать одноканальный LoRa Nano-Gateway.
Здесь я изложу ключевые этапы со всеми необходимыми ссылками.
Если вас интересуют подробное руководство и пояснения, то можете посмотреть видео запись моего выступления на технологическом подкасте IBM Developer Europe Crowdcast.
Начнем с общей схемы архитектуры, на которой показаны все компоненты, участвующие в процессе настройки трекера.
Узел LoPy служит в качестве GPS-устройства, отправляющего данные на LoRa Nano-Gateway.
Сам шлюз LoRa подключен к TheThingsNetwork по WiFi.
В конечном итоге мы получим Node-RED, выполняющийся в IBM Cloud, который будет принимать MQTT сообщения от TheThingsNetwork, сохранять их в базе данных Cloudant и отображать точки GPS-данных на карте.
Оборудование:
1 LoPy в качестве узла LoRa + антенна (868MHz/915MHz) + аккумулятор 3.7V LiPo;
Последовательный GPS-модуль 1 uBlox NMEA с антенной;
1 LoPy в качестве LoRa Nano-Gateway + антенна (868MHz/915MHz);
2 платы расширения Pycom.
Ссылки на используемое оборудование здесь: pycom.io/products/hardware
Программная часть:
Для программирования микроконтроллеров LoPy мы будем использовать Pymakr плагин для редакторов Atom и VS Code.
LoPy от Pycom.io это мульти-сетевой аппаратный модуль на базе микроконтроллера ESP32. Большинство из используемых в нем функций и библиотек собраны на MicroPython.
1. Настройка LoRaWAN Nano Gateway и подключение к TheThingsNetwork
Исходный код для LoRaWAN Nano-Gateway ждет вас здесь.
Распакуйте скачанный файл, после чего найдите каталог lorawan-nano-gateway в директории examples.
Все подробности по настройке Nano-Gateway изложены в следующей ссылке.
Следуя этому руководству, вы определите шлюз в TheThingsNetwork, настроите параметры конфигурации в соответствии с вашим регионом, загрузите код на плату и убедитесь в ее работоспособности через консоль TheThingsNetwork.
Создайте бесплатный аккаунт в TheThingsNetwork он послужит вам точкой регистрации для шлюза и точкой получения пакетов данных, которые мы будем отправлять с LoRa-узла нашего GPS-трекера.
2. Настройка LoRa-узла с GPS-трекером
Приступаем к работе с The Things Network:
core-electronics.com.au/tutorials/pycom/getting-started-on-the-things-network-tutorial.html
Следуйте инструкциям TheThingsNetwork для регистрации и активации вашего устройства LoPy.
Есть два способа активации LoPy: либо через OTAA (активация по воздуху), либо ABP (активация путем персонализации). Первый вариант считается предпочтительным, если вы используете несколько устройств, но не подойдет для работы с LoRa Nano-Gateway.
Следующий образец кода использует активацию ABP и после установки LoRa-соединения отправляет 10 байт в виде 10 отдельных пакетов.
1 from network import LoRa2 import binascii3 import struct4 lora = LoRa(mode=LoRa.LORAWAN)5 dev_addr = struct.unpack(">l", binascii.unhexlify('XXXXXXX'))[0]6 nwk_swkey = binascii.unhexlify('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')7 app_swkey = binascii.unhexlify('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')8 # удаляем все каналы кроме предустановленных9 for i in range(3, 16):10 lora.remove_channel(i)11 # настраиваем 3 предустановленных канала на одну частоту12 lora.add_channel(0, frequency=config.LORA_FREQUENCY, dr_min=0, dr_max=5)13 lora.add_channel(1, frequency=config.LORA_FREQUENCY, dr_min=0, dr_max=5)14 lora.add_channel(2, frequency=config.LORA_FREQUENCY, dr_min=0, dr_max=5)15 # подключаемся к сети с помощью ABP 16 lora.join(activation=LoRa.ABP, auth=(dev_addr, nwk_swkey, app_swkey))17 # создаем сокет LoRa18 s = socket.socket(socket.AF_LORA, socket.SOCK_RAW)19 # устанавливаем скорость обмена данными LoRaWAN20 s.setsockopt(socket.SOL_LORA, socket.SO_DR, config.LORA_NODE_DR)21 # делаем сокет неблокирующимся22 s.setblocking(False)23 for i in range (10):24 pkt = b'PKT #' + bytes([i])25 print('Sending:', pkt)26 s.send(pkt)27 time.sleep(4)28 rx, port = s.recvfrom(256)29 if rx:30 print('Received: {}, on port: {}'.format(rx, port))31 time.sleep(6)
Теперь узел LoRa настроен, и мы должны увидеть поступающие пакеты как через консоль Nano-Gateway, так и в консоли TheThingsNetwork.
Далее мы можем добавить код для считывания фиксированных данных о местоположении GPS.
Образец этого кода лежит здесь.
В данном примере мы используем библиотеку adafruit_gps и отправляем пакет данных только, когда устанавливаем фиксированное местоположение GPS.
Это, конечно, здорово, но все полученные нами данные в байтах. Как же их перевести в доступный для использования формат? Конечно же декодировать.
Направляйтесь в консоль TheThingsNetwork и выберите ваше приложение, в котором перейдите во вкладку Payload Formats и определите декодер, не забыв также сохранить его.
1 function Decoder(bytes, port) { 2 console.log(bytes)3 return {4 GPSCoordinates: String.fromCharCode.apply(null, bytes)5 };6 }
Теперь, когда наш GPS-трекер подключен через LoRaWAN, перейдем к самому интересному, а именно настроим сохранение в БД и начнем показывать данные на карте.
Этот процесс я привык реализовывать в среде IBM Cloud при помощи Node-RED.
Здесь можно быстро и легко зарегистрировать бесплатный Lite-аккаунт.
По умолчанию потоки Node-RED сохраняются в БД Cloudant, поэтому можно без проблем использовать эту же БД для сохранения наших GPS-данных.
Образец потока Node-RED находится здесь.
GPS-данные через MQTT собираются с TheThingsNetwork и сохраняются в Cloudant.
Для получения этих данных вам потребуется создать/сгенерировать новый ключ доступа. Снова направляйтесь в консоль TheThingsNetwork и выберите свое приложение, перейдите во вкладку settings и найдите среди прочих настроек access keys. Сгенерированный ключ будет находиться в нижней части страницы окна просмотра приложения.
Более подробное о взаимодействии MQTT с TheThingsNetwork рассказано здесь.
Заключение
Эта статья поможет вам лучше ознакомиться с основами использования Интернета Вещей (IoT) при помощи LoRa-соединения.
Если вам не терпится увидеть все это в действии, то еще раз напомню про свое выступление на технологическом подкасте IBM Developer Europe Crowdcast.
В этом видео я также показываю, как подключить LoRa GPS-трекер к публичному бельгийскому провайдеру этой технологии Proximus.
А какие еще, на ваш взгляд, есть варианты применения LoRa для Интернета Вещей?