Рубрики
Проекты на ESP32

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

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

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

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

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

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

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

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. Модуль прост в использовании, сравнительно дешев, отличается высокой эффективностью и может быть использован в различных приложениях. Его внешний вид показан на следующем рисунке.

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

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

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

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

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

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

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

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

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

Схема подключения модуля 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 консоль. Если вы все сделали правильно, то вы должны увидеть экран, показанный на следующем рисунке.

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

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

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

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

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

Теперь нажмите на только что созданное приложение и нажмите на кнопку 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 чтобы завершить процесс.

Теперь на стороне 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 вы можете открыть окно монитора последовательной связи и посмотреть правильно ли работает модуль или нет.

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

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

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

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

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

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

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

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

https://circuitdigest.com/sites/default/files/other/ESP32-LoRa-Communication.mp4

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

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

Код для TTN-OTAA

Код для TTN-ABP

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

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

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