Использование ESP32 для связи по технологии LoRa с сетью вещей (TTN)


Технологии LoRa всего 10 лет и за все эти годы ее популярность в современном мире росла фантастическими темпами. Устройства LoRa отличаются крайне низкой потребляемой мощностью и при этом способны обеспечивать беспроводную связь на достаточно большие расстояния (относительно небольшой излучаемой устройствами мощности), что сделало технологию LoRa очень удобной для использования в проектах интернета вещей IoT. Ожидается, что к 2025 году в мире будет насчитываться 29 миллиардов устройств, подключенных к сети интернет. Это в 4 раза больше чем количество людей, живущих сейчас на нашей планете.

Внешний вид проекта взаимодействия модуля ESP32 с сетью вещей

В данной статье мы рассмотрим подключение HDPA13A, который является оконечным узлом LoRa SX1276, к модулю ESP32 и с его помощью будем передавать данные в сеть TTN (Things Network, сеть вещей). Делать мы это будем через шлюз LoRa RG186. Также в статье будет рассмотрена настройка популярного модуля LoRa SX1276 (868MHz) для работы в Индии (поскольку автор статьи из этой страны, ссылка на оригинал будет приведена в конце статьи). И в конце статьи мы рассмотрим проблемы, которые возникли у автора при установлении соединения с сетью вещей, и способы их решения.

Также на нашем сайте мы рассматривали подключение модулей LoRa к другим микроконтроллерам (платам):

Распиновка модуля LoRa SX1276

Распиновка модуля LoRa SX1276 показана на рисунке ниже. В данной статье мы будем использовать модуль LoRa HDP13A V1.1, который был разработан компанией HPDTeK, хорошо известной в Китае.

Распиновка модуля LoRa SX1276

Назначение контактов модуля:

GND – контакт общего провода (земли), который в нашем проекте необходимо подключить к контакту земли модуля ESP32.

SDO (MISO) – контакт передачи последовательных данных (Serial Data Out) микроконтроллеру. По нему информация передается по протоколу SPI.

SDI (MOSI) – контакт приема последовательных данных (Serial Data In) от микроконтроллера. Связь осуществляется по протоколу SPI.

SCK (Serial Clock Pin) – контакт тактовой частоты, которая подается на него от микроконтроллера.

SEL (Chip Select) – контакт выбора ведомого устройства в протоколе SPI.

RST – контакт сброса модуля.

IO2-5 – контакты ввода/вывода модуля LoRa. Могут быть программным способом установлены в High или Low.

ANT – контакт для подключения антенны. Возможные типы антенн необходимо уточнять в даташите на модуль.

VCC – контакт для подачи питания на модуль, необходимо подключать к напряжению 3.3V.

Обзор модуля LoRa SX1276 868MHZ

Данный модуль разработан и производится компанией SEMTECH. Модуль прост в использовании, сравнительно дешев, отличается высокой эффективностью и может быть использован в различных приложениях. Его внешний вид показан на следующем рисунке.

Внешний вид модуля LoRa SX1276 868MHZ

Трансиверы SX1276/77/78/79 содержат модем LoRaTM для связи на большие расстояния, отличаются крайне низким потреблением и используют для своей работы широкополосный сигнал, позволяющий добиться высокой помехоустойчивости системы. Чувствительность модуля SX1276 составляет величину не менее -148 дБм, и это при условии использования дешевого кристалла.

В чем разница между модулями Lora HPD13A SX1276 и RFM95W?

Как видно из представленного выше рисунка на модуле написано название HPD13A, а у поставщиков он проходит под именем модуля LoRa SX1276. На первый взгляд, это может показаться запутанным.

Вид изнутри модуля LoRa SX1276

Поэтому автор проекта решил снять верхнюю часть модуля и посмотреть что находится у него внутри. Из следующего рисунка можно увидеть что имя компании, которая производит данный модуль – HPDTek, поэтому она использует свой собственный номер для этого компонента, а под крышкой модуля мы можем увидеть микросхему SX1276 LoRa.

Вид изнутри модуля RFM95W

Но все еще остается вопрос в чем разница между микросхемами RFM95W и SX1276. Фактически, это одинаковые модули, поэтому и характеристики у них одинаковые. Если ваша цель – установить связь LoRa, это можно сделать с помощью любого из этих модулей. HopeRF получает разрешение (лицензию) от компании Semtech. Незащищенный патентами модуль RFM95W идентичен модулям SX127x и его распиновка и программное обеспечение аналогичны им. На двух представленных выше рисунках вы можете увидеть разницу во внешнем виде между этими двумя модулями.

Изготовление переходной платы с помощью перфорированной платы

Если вы посмотрите на расположение контактов модуля LoRa SX1276 вы увидите что они не подходят для использования на макетной плате, поэтому для этой цели мы изготовим переходную плату/адаптер (Breakout Board) для этого модуля с помощью куска перфорированной платы. Подробно процесс изготовления такой платы показан на следующем рисунке. Также это можно сделать с помощью изготовления печатной платы, но это сложнее и отнимает больше времени.

Изготовление переходной платы для модуля LoRa SX1276

Если вы посмотрите на модуль HPD13A вы увидите что он поставляется с металлической крышкой, которая уменьшает помехи и электромагнитные излучения. Как показано на представленном рисунке автор проекта удалил эту крышку чтобы посмотреть что находится внутри.

Схема проекта

Схема подключения модуля LoRa SX1276 к модулю ESP32 представлена на следующем рисунке.

Схема подключения модуля LoRa SX1276 к модулю ESP32Как мы отмечали ранее, модуль HX1276 содержит 16 контактов, по 8 на каждой стороне. Среди них есть контакты общего провода (земли), толерантный к 3.3V контакт VCC, и контакты интерфейса SPI. В данном проекте нам необходимо подключить контакты SPI модуля LoRa SX1276 к контактам интерфейса SPI модуля ESP32. Полная схема соединений проекта представлена на в следующей таблице.

Модуль HPD13A LoRa SX1276 ESP32-WROOM Dev Module V1
3.3V 3.3V
GND GND
SCK D18 (SCLK)
SDI (MOSI) D23 (MOSI)
SDO (MISO) D19 (MISO)
SEL (CS) D26 (User Defined)
RST D25 (User Defined)
IO0 D23 (User Defined)
IO1 D22 (User Defined)

Внешний вид собранной на макетной плате конструкции проекта показан на следующем рисунке.

Внешний вид собранной на макетной плате конструкции проекта

Какой метод активации использовать – TTN ABP или OTAA

Каждое оконечное устройство должно быть зарегистрировано в сети перед передачей и приемом сообщений. Эта процедура называется активацией. Доступны два метода активации:

  • Over-The-Air-Activation (OTAA) – беспроводная активация, "по воздуху". Самый безопасный и рекомендованный метод активации для оконечных устройств. Устройства выполняют процедуру присоединения к сети, во время которой им присваивается динамический адрес и выделяются ключи безопасности;
  • Activation By Personalization (ABP) – требует "жесткого" аппаратного вмешательства в работу устройства для изменения его адреса и ключей безопасности, выданных ему. Процедура ABP менее безопасна чем OTAA, также в этом случае недостатком является то, что устройство не может сменить провайдера сети без ручного изменения ключей устройства.

Процедура присоединения для стандартов LoRaWAN 1.0.x и 1.1 немного отличается. В следующих разделах статьи рассматриваются процедуры присоединения к LoRaWAN 1.0.x и 1.1 по отдельности.

Если вы хотите получить более подробную информацию относительно процесса активации устройств в сетях TTN, вам необходимо посмотреть официальную документацию на веб-сайте TTN.

Установка оконечных узлов для сети TTN

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

Главный экран TTN консоли

После этого вам необходимо выбрать кластер. Если вы хотите узнать больше информации о кластере, то нажмите на кнопку "more information". В нашем случае мы выбрали кластер europe1.

После этого вы увидите экран, показанный на следующем рисунке. Нажмите на нем на “Go to application”.

Начало работы с TTN консолью после выбора сервера

На следующем открывшемся экране нажмите кнопку Add application чтобы создать свое первое приложение.

Кнопка для создания приложения в TTN консоли

Теперь вам необходимо создать новое приложение, введя для него уникальный идентификатор (Application ID) и имя. Описание (Description part) является опциональным и его можно не заполнять. После ввода идентификатора и имени приложения нажмите на кнопку create application.

Ввод параметров нового приложения в TTN консоли

После этого вам откроется экран, показанный на следующем рисунке. Теперь вам нужно создать оконечные узлы (End Nodes) для вашего приложения – это устройства, которые передают данные на сервер приложения.

Создание оконечных узлов для приложения в TTN консоли

Теперь нажмите на только что созданное приложение и нажмите на кнопку end node слева, и затем на кнопку add application справа. Как вы можете видеть из представленного рисунка, мы уже создали два оконечных узла. Один – для тестирования метода активации ABP, а второй – для тестирования метода активации OTAA.

Два узла для тестирования двух разных методов активации

Когда вы нажмете на кнопку add end node вы увидите экран, показанный на следующем рисунке. На нем кликните на manually (вручную) и заполните необходимые данные. Выберите частотный план (frequency plan), спецификацию LoRaWAN и метод активации (Activation Mode) – для нашего первого примера мы выбрали метод OTAA.

Ввод параметров оконечного узла

После этого вам необходимо сгенерировать ключи для ваших оконечных узлов. Потом нажмите на кнопку Register end device (зарегистрировать оконечное устройство) чтобы завершить процесс. Но учтите тот факт, что ваши DeviceEUI, AppKey и AppEUI – это ваших три самых важных ключа, поэтому будьте осторожны при работе с ними. Процесс активации по методу ABP будет аналогичен рассмотренному, вам необходимо в качестве метода активации (activity mode) выбрать ABP и сгенерировать для него соответствующие ключи.

Генерация ключей для оконечного устройства

На представленном ниже рисунке показано что мы выбрали метод активации ABP и сгенерировали для него Device Address, NwSKey и AppSKey, а Device EUI будет сгенерирован автоматически. После этого вам необходимо всего лишь нажать кнопку Register end device чтобы завершить процесс.

Генерация ключей для метода активации ABP

Теперь на стороне TTN мы все сделали и можно переходить к написанию программы.

Объяснение кода программы для модуля ESP32

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Код программы для подключения модуля Lora HPD13A SX1276 к модулю ESP32 достаточно прост. Все, что нам нужно сделать, это скачать библиотеку arduino-lmic от пользователя mcci-catena и использовать пример ее кода для взаимодействия с модулем SX1276. Но прежде чем мы сможем использовать пример кода этой библиотеки нам необходимо настроить модуль HX1276 для работы на частоте 868MHz. Для этого нам необходимо изменить конфигурацию проекта, которую можно найти в библиотеке arduino-lmic в папке Documents Arduino Library, на следующее:

После этого мы можем открыть пример скетча TTN-OTAA для модуля ESP32. Но перед этим нам необходимо вставить в него свои ключи чтобы иметь возможность взаимодействия с сетью TTN.

Откройте пример скетча TTN-OTAA, расположенный по адресу File > Examples > MCCI LoRaWAN LMIC Library > ttn-otaa.

Теперь, если вы посмотрите на этот фрагмент кода внимательно, то вы найдете в нем места для вставки ключей, которые мы получили ранее. Необходимо вставить эти ключи в формате MSB или LSB. В комментариях более подробно указано какой необходим формат.

После этого нам необходимо вставить контакты для модуля в следующую структуру данных:

В эту структуру нам необходимо правильно вставить контакты nss, rst IO0 и IO1 чтобы модуль работал правильно. Теперь, когда все необходимые настройки сделаны, мы можем загрузить код примера в модуль ESP32. Это все что нужно сделать для примера TTN-OTAA. А сейчас рассмотрим как работает пример TTN-ABP.

Как мы видим, для примера TTN-ABP код примера практически такой же, единственные изменения, которые вам необходимо сделать, это добавить в него свои DEVADDR (Device Address), APPSKEY(App Session Key) и NWKSKEY(Network Session Key). После этого можно загружать код примера в модуль.

Тестирование работы проекта

Тестирование узла LoRaWAN на основе ABP

После загрузки кода программы в модуль ESP32 вы можете открыть окно монитора последовательной связи и посмотреть правильно ли работает модуль или нет.

Тестирование узла LoRaWAN на основе ABP

Как вы можете видеть из этих выходных данных, мы осуществляем непрерывную передачу данных, а на стороне сети TTN мы принимаем наш трафик.

Успешная передача информации при методе ABP

К примеру, вы приняли шестнадцатеричное значение 48656C6C6F2C20776F726C6421. Если вы преобразуете его в тест, то вы получите текст принятого сообщения.

Тестирование узла LoRaWAN на основе OTAA

Теперь загрузите в модуль ESP32 код примера для работы с режимом OTAA и откройте окно монитора последовательной связи. В нем увидите много сообщений и ключи, что будет означать что устройство успешно присоединилось к сети TTN.

Тестирование узла LoRaWAN на основе OTAA

На стороне TTN это будет выглядеть примерно как на следующем рисунке.

Успешная передача информации при методе OTAA

И на рисунке выше вы можете увидеть сообщение в текстовом формате.

Работа модуля LoRa SX1276

Для тестирования работы схемы мы сделали небольшие изменения в коде и добавили счетчик, который будет инкрементироваться каждую секунду и передавать данные счетчика в сеть TTN. На представленной ниже GIF картинке вы можете увидеть как мы запитали модуль и как он передает данные в TTN. Это можно проверить открыв рядом окно TTN и окно монитора последовательной связи.

Все необходимые файлы проекта вы можете скачать по следующей ссылке.

Исходный код программы

Код для TTN-OTAA

Код для TTN-ABP

Источник статьи

(Проголосуй первым!)
Загрузка...
2 252 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *