- PVSM.RU - https://www.pvsm.ru -

Создаем собственный GPS-Трекер на технологии LoRa

Создаем собственный GPS-Трекер на технологии LoRa - 1 [1]

В этой статье вы узнаете, как создать собственный GPS-трекер с помощью микроконтроллеров Pycom [2]LoPy, а также научитесь настраивать одноканальный LoRa Nano-Gateway.
Здесь я изложу ключевые этапы со всеми необходимыми ссылками.

Если вас интересуют подробное руководство и пояснения, то можете посмотреть видео запись [3] моего выступления на технологическом подкасте IBM Developer Europe Crowdcast.

Начнем с общей схемы архитектуры, на которой показаны все компоненты, участвующие в процессе настройки трекера.

Узел LoPy [4]служит в качестве GPS-устройства, отправляющего данные на LoRa Nano-Gateway.

Сам шлюз LoRa подключен к ‘TheThingsNetwork’ по WiFi.

В конечном итоге мы получим Node-RED, выполняющийся в IBM Cloud, который будет принимать MQTT сообщения от TheThingsNetwork [5], сохранять их в базе данных 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 [6]

Программная часть:

Для программирования микроконтроллеров LoPy мы будем использовать Pymakr [7]– плагин для редакторов Atom и VS Code.

LoPy от Pycom.io – это мульти-сетевой аппаратный модуль на базе микроконтроллера ESP32. Большинство из используемых в нем функций и библиотек собраны на MicroPython.

1. Настройка LoRaWAN Nano Gateway и подключение к TheThingsNetwork

Исходный код для LoRaWAN Nano-Gateway ждет вас здесь [8].

Распакуйте скачанный файл, после чего найдите каталог lorawan-nano-gateway в директории examples.

Все подробности по настройке Nano-Gateway изложены в следующей ссылке [9].

Следуя этому руководству, вы определите шлюз в TheThingsNetwork, настроите параметры конфигурации в соответствии с вашим регионом, загрузите код на плату и убедитесь в ее работоспособности через консоль TheThingsNetwork.

Создайте бесплатный аккаунт в TheThingsNetwork [5]– он послужит вам точкой регистрации для шлюза и точкой получения пакетов данных, которые мы будем отправлять с LoRa-узла нашего GPS-трекера.

2. Настройка LoRa-узла с GPS-трекером

Приступаем к работе с The Things Network:
core-electronics.com.au/tutorials/pycom/getting-started-on-the-things-network-tutorial.html [10]

Следуйте инструкциям TheThingsNetwork [11] для регистрации и активации вашего устройства LoPy.

Есть два способа активации LoPy: либо через OTAA (активация «по воздуху»), либо ABP (активация путем персонализации). Первый вариант считается предпочтительным, если вы используете несколько устройств, но не подойдет для работы с LoRa Nano-Gateway.

Следующий образец кода [12] использует активацию ABP и после установки LoRa-соединения отправляет 10 байт в виде 10 отдельных пакетов.

1 from network import LoRa
2 import binascii
3 import struct
4 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 # создаем сокет LoRa
18 s = socket.socket(socket.AF_LORA, socket.SOCK_RAW)
19 # устанавливаем скорость обмена данными LoRaWAN
20 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.
Образец этого кода лежит здесь [13].

В данном примере мы используем библиотеку ‘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.
Здесь [14]можно быстро и легко зарегистрировать бесплатный Lite-аккаунт.

По умолчанию потоки Node-RED сохраняются в БД Cloudant, поэтому можно без проблем использовать эту же БД для сохранения наших GPS-данных.

Образец потока Node-RED находится здесь [15].

GPS-данные через MQTT собираются с TheThingsNetwork и сохраняются в Cloudant.

Для получения этих данных вам потребуется создать/сгенерировать новый ключ доступа. Снова направляйтесь в консоль TheThingsNetwork и выберите свое приложение, перейдите во вкладку settings и найдите среди прочих настроек access keys. Сгенерированный ключ будет находиться в нижней части страницы окна просмотра приложения.

Более подробное о взаимодействии MQTT с ‘TheThingsNetwork’ рассказано здесь [16].

Заключение

Эта статья поможет вам лучше ознакомиться с основами использования Интернета Вещей (IoT) при помощи LoRa-соединения.

Если вам не терпится увидеть все это в действии, то еще раз напомню про свое выступление [3] на технологическом подкасте IBM Developer Europe Crowdcast.

В этом видео я также показываю, как подключить LoRa GPS-трекер к публичному бельгийскому провайдеру этой технологии – Proximus [17].

А какие еще, на ваш взгляд, есть варианты применения LoRa для Интернета Вещей?

Автор: ruvds

Источник [18]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/gps/358627

Ссылки в тексте:

[1] Image: https://habr.com/ru/company/ruvds/blog/526780/

[2] Pycom : https://pycom.io/

[3] видео запись: https://www.crowdcast.io/e/build-a-gps-tracker

[4] LoPy : https://pycom.io/product/lopy4/

[5] TheThingsNetwork: https://www.thethingsnetwork.org/

[6] pycom.io/products/hardware: https://pycom.io/products/hardware

[7] Pymakr : https://pycom.io/products/supported-networks/pymakr/

[8] здесь: https://github.com/pycom/pycom-libraries/archive/master.zip

[9] в следующей ссылке: https://pycom.io/lopy-lorawan-nano-gateway-using-micropython-and-ttn/

[10] core-electronics.com.au/tutorials/pycom/getting-started-on-the-things-network-tutorial.html: https://core-electronics.com.au/tutorials/pycom/getting-started-on-the-things-network-tutorial.html

[11] инструкциям TheThingsNetwork: https://www.thethingsnetwork.org/docs/devices/lopy/usage.html

[12] образец кода: https://github.com/yvesdebeer/Lora_GPSTracker/blob/master/TTN-abp_node_GPS/abp.py

[13] здесь: https://github.com/yvesdebeer/Lora_GPSTracker/blob/master/TTN-abp_node_GPS/main.py

[14] Здесь : https://ibm.biz/BdqQXz

[15] здесь: https://github.com/yvesdebeer/Lora_GPSTracker/tree/master/Node-Red

[16] здесь: https://www.thethingsnetwork.org/docs/applications/mqtt/api.html

[17] Proximus: https://proximusapi.enco.io/

[18] Источник: https://habr.com/ru/post/526780/?utm_source=habrahabr&utm_medium=rss&utm_campaign=526780