Главная chevron_right Уроки chevron_right Связь chevron_right Руководство по LoRa® и LPWAN-технологиям для Arduino

Руководство по LoRa® и LPWAN-технологиям для Arduino

Разбираемся в основах LoRa®-технологии и учимся применять её в проектах на Arduino: от теории до отправки данных в сеть.

Интернет вещей (IoT) — это огромная экосистема устройств, обменивающихся данными через беспроводные сети. Подключённые объекты собирают информацию об окружающей среде и передают её дальше. IoT стирает границу между физическим и цифровым миром, порождая колоссальные объёмы данных, которые помогают оптимизировать ресурсы и повышать эффективность существующих систем.

По прогнозам, к 2025 году к Интернету будет подключено более 25 миллиардов IoT-устройств.

Большинство из них используют короткодиапазонные беспроводные технологии: Wi-Fi®, Bluetooth®, ZigBee, Z-Wave® и другие. Часть устройств работает через сотовые сети 2G/3G/4G. Но эти технологии не всегда подходят для IoT-устройств: они создавались без учёта жёстких требований к энергопотреблению и ресурсу батареи. IoT-устройства, как правило, потребляют мало энергии и обмениваются небольшими объёмами данных.

Сети Low-Power Wide Area Networks (LPWANs)

Low-Power Wide Area Networks (LPWANs) — это группа беспроводных технологий, созданных специально под нужды IoT-устройств: низкая пропускная способность, минимальное энергопотребление, как правило — питание от батареи. Такие сети обеспечивают низкие скорости передачи данных на больших расстояниях при минимальном расходе энергии. LPWANs поддерживают пакеты данных от 10 байт до 1 kB при скоростях uplink до 200 кбит/с; дальность связи варьируется от 2 до 1000 км в зависимости от конкретной технологии. Большинство LPWAN-технологий используют топологию «звезда»: каждое устройство подключается напрямую к центральной точке доступа.

Главные сценарии применения LPWAN:

  • Умные города: интеллектуальные парковки, управление уличным освещением.
  • Управление цепочками поставок: отслеживание активов, мониторинг состояния.
  • Умные сети: учёт электроэнергии, воды и газа.
  • Умное сельское хозяйство: мониторинг состояния почвы, отслеживание животных, геозонирование.

Подробнее о LPWANs можно почитать в разделе Learn: this article.

Среди LPWAN-технологий, использующих как лицензируемые, так и нелицензируемые частоты, а также проприетарные и открытые спецификации, особое место занимает LoRa® и его реализация протокола Media Access Control (MAC) — одна из наиболее активно развивающихся технологий для поддержки IoT-устройств и сервисов.

Bandwidth vs. range of short distance, cellullar and LPWA networks. Image credits: The Things Network.

Технология LoRa®

Что такое LoRa®?

LoRa® — это техника беспроводной модуляции, основанная на технологии Chirp Spread Spectrum (CSS). CSS использует широкополосные линейно-частотно-модулированные чирп-импульсы для кодирования информации. Технология работает в следующих нелицензируемых ISM-диапазонах (Industrial, Scientific and Medical) ниже 1 ГГц: 433 MHz, 868 MHz и 915 MHz. ISM-диапазоны зарезервированы на международном уровне для промышленного, научного и медицинского применения.

Техника модуляции Long Range была изобретена в 2010 году французским стартапом Cycleo, который в 2012 году приобрела компания Semtech.

LoRa® широко применяется в LPWAN-развёртываниях для приложений, которым нужна дальняя связь при минимальном энергопотреблении.

Сетевая архитектура LoRa®

Типичная сеть на базе LoRa® состоит из нескольких ключевых элементов: оконечных устройств (как правило, датчиков), базовой станции или шлюза (gateway), сетевого сервера и системы поддержки операций (OSS) для управления сетью и её обслуживания.

Typical LoRa® network architecture example. Image credits: The Things Network.

Важно понимать разницу между сетевым сервером и шлюзом. Сетевой сервер управляет маршрутизацией сообщений, а шлюзы работают как ретрансляторы, передающие данные между оконечными устройствами и сервером. Сети на базе LoRa® могут быть публичными или частными — в зависимости от задачи.

The Things Network (TTN) — это краудсорсинговый, открытый и децентрализованный сетевой сервер на базе LoRa®. Это отличная отправная точка для тестирования устройств, приложений и интеграций. Для подключения к TTN нужно находиться в зоне действия шлюза. Проверьте world map, чтобы узнать, есть ли шлюз в вашем регионе; если нет — возможно, стоит его установить!

Сети на базе LoRa® обычно строятся по топологии «звезда звёзд»: шлюзы управляют обменом данными между оконечными устройствами и сетевым сервером. Шлюзы подключены к центральному серверу через Интернет, а оконечные устройства используют LoRa для отправки и приёма данных через шлюзы. При этом устройство не привязано к единственному шлюзу — оно широковещательно передаёт данные всем шлюзам в зоне доступа. Связь в сетях на базе LoRa по своей природе двунаправленная, хотя uplink-трафик (от устройства к серверу) заметно преобладает.

Топология «звезда» обеспечивает наилучший баланс между дальностью связи, количеством шлюзов, энергопотреблением оконечных устройств и ресурсом их батарей.

Преимущества топологии «звезда» перед другими:

  • Шлюзы можно добавлять в сеть в любое время и в любом месте без предварительного планирования.
  • Доставка сообщений надёжнее: несколько шлюзов одновременно принимают одни и те же пакеты данных при каждом uplink.

Скорости передачи данных

Обмен данными между оконечными устройствами и шлюзами в сетях на базе LoRa® распределяется по разным частотным каналам и скоростям передачи данных (коммуникации на разных скоростях не мешают друг другу).

LoRa® поддерживает скорости передачи данных от 300 бит/с до 5 кбит/с при полосе пропускания 125 kHz.

Чтобы максимизировать ресурс батареи каждого устройства и общую ёмкость сети, LoRa® использует механизм Adaptive Data Rate (ADR) — адаптивной скорости передачи данных, оптимизирующей скорость, эфирное время и энергопотребление. ADR управляет следующими параметрами передачи:

  • Spreading factorскорость передачи данных. Меньший spreading factor означает более высокую скорость.
  • Bandwidthобъём данных, который можно передать между двумя точками сети.
  • Transmission power — мощность, которую передатчик оконечного устройства выдаёт на выходе.

В таблице ниже сравниваются spreading factor, скорость передачи данных и время в эфире при полосе 125 kHz (дальность приведена ориентировочно и зависит от условий распространения сигнала):

Spreading FactorData RateRangeTime on-Air
SF75470 bps2 km56 ms
SF83125 bps4 km100 ms
SF91760 bps6 km200 ms
SF10980 bps8 km370 ms
SF11440 bps11 km40 ms
SF12290 bps14 km1400 ms

Оконечные устройства могут передавать данные на любом доступном канале в любое время при любой доступной скорости — при соблюдении следующего правила:

  • Устройство меняет канал псевдослучайным образом при каждой передаче. Такое частотное разнообразие повышает устойчивость системы к помехам.

Также необходимо соблюдать местные нормативные требования:

  • В диапазоне EU868 оконечное устройство должно соблюдать максимальный коэффициент заполнения (duty cycle) для используемого поддиапазона и местного законодательства (1% для оконечных устройств).
  • В диапазоне US915 оконечное устройство должно соблюдать максимальную длительность передачи (dwell time) для используемого поддиапазона и местного законодательства (400 мс).

LoRa®-based network layers. Image credits: Semtech.

Региональные параметры

Спецификация региональных параметров технологии LoRa® — это дополнение к спецификации сетевого уровня на базе LoRa. Если спецификация сетевого уровня определяет воздушный интерфейс между совместимым оконечным устройством (датчиком, актуатором, трекером и т.д.) и совместимым ядром сети, то спецификация региональных параметров LoRa® определяет адаптацию сетевого уровня к различным нормативным требованиям разных стран в части использования нелицензируемых частотных диапазонов.

Кроме того, спецификация региональных параметров LoRa® описывает конфигурации физического уровня, необходимые для корректной работы радиомодулей LoRa с различными техниками радиочастотной модуляции.

Задача спецификации региональных параметров LoRa® — создать минимальное количество региональных частотных планов, охватывающих максимально возможное число регуляторных регионов. Это снижает сложность реализации и стоимость сертификации.

Спецификация региональных параметров LoRa® не охватывает всё. Она задаёт только общий знаменатель для каждого региона. Например, региональные параметры LoRa для Азии определяют лишь общее подмножество каналов, тогда как нормативные требования в азиатских странах различаются. Каждый сетевой сервер, например TTN, вправе самостоятельно выбирать дополнительные параметры — в частности, дополнительные каналы передачи.

Подробнее можно прочитать в документе RP002-1.0.2 о региональных параметрах LoRa® here. У нас также есть более подробный туториал о региональных параметрах LoRa и оборудовании Arduino — он доступен здесь: here.

Классы устройств

Спецификация LoRa® определяет три профиля взаимодействия между устройствами и приложениями: Class A, Class B и Class C. Каждый класс ориентирован на определённые задачи и требования. Основное различие между классами — задержка и энергопотребление: оконечные устройства могут отправлять uplink в любой момент, а вот приём downlink определяется классом устройства.

Все сетевые устройства на базе LoRa® должны реализовывать Class A; Class B и Class C являются расширениями Class A.

Class A: «Aloha»

Устройства Class A реализуют двунаправленный профиль связи, при котором после каждой uplink-передачи оконечного устройства открываются два коротких окна приёма downlink — обычно называемых RX1 и RX2. Если сервер не ответил ни в RX1, ни в RX2, следующая возможность появится только после следующей uplink-передачи. Устройства Class A, как правило, работают от батареи и большую часть времени находятся в режиме сна — поэтому они потребляют минимум энергии, делают длинные паузы между uplink-передачами и имеют высокую задержку downlink.

Class A default configuration profile. Image credits: The Things Network.

Class B: «Beaconing»

Устройства Class B расширяют Class A, добавляя запланированные окна приёма downlink через фиксированные интервалы времени. Это позволяет эмулировать устройство, постоянно готовое принять данные. Class B применяется там, где нужна низкая задержка downlink при разумном энергопотреблении.

Class B default configuration profile. Image credits: The Things Network.

Class C: непрерывный приём

Профиль Class C рассчитан на приложения с достаточным питанием, где нет необходимости сокращать время окон приёма — например, большинство актуаторов (умные розетки, уличные фонари, электросчётчики и т.д.). Устройства Class C всегда слушают downlink, если не передают uplink. Это обеспечивает минимальную задержку между сервером и оконечным устройством.

Class C default configuration profile. Image credits: The Things Network.

Аутентификация и безопасность

Безопасность — важнейший аспект сетей на базе LoRa®. Любая LoRa-сеть имеет базовый фреймворк аутентификации и безопасности на основе шифрования AES 128. В отличие от других LPWAN, использующих единый ключ для аутентификации и шифрования, фреймворк LoRa разделяет эти функции. Аутентификация и контроль целостности используют сетевой сессионный ключ (NwkSKey), а шифрование пользовательских данных — прикладной сессионный ключ (AppSKey).

NwkSKey и AppSKey — это корневые ключи AES-128, уникальные для конкретного устройства; их назначают производители устройств или владельцы приложений.

LoRa® поддерживает два метода аутентификации и активации: Over-The-Air Activation (OTAA) и Activation by Personalization (ABP).

  • Over-The-Air Activation (OTAA): оконечные устройства не привязаны к конкретной сети заранее. Они отправляют запрос JOIN в нужную LoRa®-сеть и получают в ответ адрес устройства и токен авторизации, из которых выводятся сессионные ключи. NwkSKey и AppSKey формируются в ходе этой процедуры из корневого AppKey, заранее прошитого производителем в устройство.

Over-The-Air activation process. Image credits: Heath Raftery.

  • Activation by Personalization (ABP): оконечные устройства заранее настроены для работы с конкретной LoRa®-сетью. В них предварительно прошиты NwkSKey, AppSKey и 32-битный сетевой адрес устройства.

Activation by Personalization process. Image credits: Heath Raftery.

Рекомендуемый метод активации — OTAA: он обеспечивает высокий уровень безопасности. ABP следует использовать только в особых случаях.

Arduino® и технология LoRa®

Arduino® открывает доступ к LoRa®-подключению через несколько плат, дополнительных модулей и библиотек.

Платы Arduino® с поддержкой LoRa®

Платы MKR WAN 1300 и 1310 — практичное и доступное решение для проектов, которым нужны LoRa®-подключение и низкое энергопотребление. Обе платы построены на микроконтроллере SAMD21 microcontroller от Microchip®, оснащены модулем CMWX1ZZABZ от Murata® для LoRa-подключения, чипом криптоаутентификации ATECC508 и 2 МБ SPI Flash-памяти для локального хранения данных.

The Arduino® MKR WAN 1310 board.

Платформа PRO тоже поддерживает LoRa®. Плата Arduino® Portenta H7 получает LoRa-подключение через дополнительный модуль Portenta Vision Shield with LoRa® technology, в котором также установлен модуль CMWX1ZZABZ от Murata® — тот же, что используется в MKR 1300 и 1310.

Portenta Vision Shield with LoRa® technology

Arduino® Edge Control — решение для удалённого мониторинга и управления, оптимизированное для работы на открытом воздухе — можно расширить беспроводными возможностями, подключив плату MKR WAN 1300 или 1310. Edge Control можно разместить в любом месте; он отлично подходит для умного сельского хозяйства и других задач, требующих интеллектуального управления в труднодоступных локациях.

The Arduino® Edge Control.

Библиотеки Arduino® для работы с LoRa®

Для работы с модулем CMWX1ZZABZ LoRa® от Murata® доступно несколько Arduino-библиотек. Рекомендуем две: библиотека MKRWAN library от Arduino и библиотека Arduino LoRa от Sandeep Mistry. Обе предоставляют APIs для обмена данными с сетями, поддерживающими LoRa-технологию.

Обе библиотеки доступны в Arduino IDE, online и offline. В онлайн-IDE они уже установлены и готовы к использованию. В офлайн-IDE их нужно установить вручную: перейдите в Tools > Manage Libraries... и найдите MKRWAN от Arduino и LoRa от Sandeep Mistry. Устанавливайте последние версии библиотек.

На данный момент существует две версии библиотеки MKRWAN; версия MKRWAN_v2 всё ещё находится в стадии бета-тестирования.

Практический пример: отправка и приём данных через сетевой сервер

Работать с LoRa®-сетями через Arduino просто. Рассмотрим конкретный пример. Здесь используется плата MKR WAN 1310 и библиотека MKRWAN для отправки данных в сеть на базе LoRa — в данном случае TTN. Схема подключения показана на изображении ниже:

Circuit used in the example.

Прежде чем отправлять и получать сообщения через TTN, нужно зарегистрировать плату в сети. Для этого понадобится Device EUI вашей платы. Его можно узнать, запустив пример FirstConfiguration из библиотеки MKRWAN. Имея Device EUI, зарегистрируйте плату в TTN: создайте аккаунт, добавьте приложение и зарегистрируйте устройство. Процесс подробно описан в tutorial от TTN.

После регистрации устройства можно начинать обмен данными с помощью следующего кода:

/*
  Отправка и получение данных через сеть на основе LoRa®
  Скетч демонстрирует работу с платой MKR WAN 1300/1310: отправку и приём данных.
  Код примера находится в общественном достоянии.
*/

#include <MKRWAN.h>
#include "arduino_secrets.h"

LoRaModem modem;

void setup() {
  // Инициализация последовательного порта
  Serial.begin(115200);
  while (!Serial);
  
  // Инициализация модуля LoRa
  // Инициализация модема с указанием регионального диапазона частот (например, US915, AS923,...)
  if (!modem.begin(EU868)) {
    Serial.println("- Failed to start module");
    while (1) {}
  };

  // После инициализации модуля можно получить его версию и device EUI
  // Сетевой сервер требует информацию о device EUI для подключения к сети
  Serial.print("- Your module version is: ");
  Serial.println(modem.version());
  Serial.print("- Your device EUI is: ");
  Serial.println(modem.deviceEUI());

  // Процедура подключения к сетевому серверу
  // Метод OTAA требует appEUI и appKey — эти данные предоставляет сетевой сервер
  int connected = modem.joinOTAA(appEui, appKey);
  if (!connected) {
    Serial.println("- Something went wrong; are you indoor? Move near a window and retry...");
    while (1) {}
  }

  // Установить интервал опроса 60 секунд
  modem.minPollInterval(60);

  // ПРИМЕЧАНИЕ: независимо от этой настройки модем не позволяет отправлять более одного сообщения каждые 2 минуты
  // Это ограничение задано прошивкой и не может быть изменено
}

void loop() {
  Serial.println();
  Serial.println("- Enter a message to send to network");
  Serial.println("(make sure that end-of-line 'NL' is enabled)");

  // Получить сообщение из монитора порта
  while (!Serial.available());
  String msg = Serial.readStringUntil('\n');

  // Отобразить отправленное в сеть сообщение в формате HEX
  Serial.println();
  Serial.print("- Sending: " + msg + " - ");
  for (unsigned int i = 0; i < msg.length(); i++) {
    Serial.print(msg[i] >> 4, HEX);
    Serial.print(msg[i] & 0xF, HEX);
    Serial.print(" ");
  }
  Serial.println();

  // Проверить, было ли сообщение отправлено успешно или возникла ошибка
  int err;
  modem.beginPacket();
  modem.print(msg);
  err = modem.endPacket(true);
  if (err > 0) {
    Serial.println("- Message sent correctly!");
  } else {
    Serial.println("- Error sending message :(");
    Serial.println("(- You may send a limited amount of messages per minute, depending on the signal strength");
    Serial.println("- It may vary from one message every couple of seconds to one  message every minute)");
  }

  // Подождать и проверить, есть ли входящее сообщение от сети
  delay(1000);
  if (!modem.available()) {
    Serial.println("- No downlink message received at this time");
    return;
  }

  // Если сообщение доступно — сохранить его
  char rcv[64];
  int i = 0;
  while (modem.available()) {
    rcv[i++] = (char)modem.read();
  }

  // Декодировать и отобразить полученное от сети сообщение
  Serial.print("- Received: ");
  for (unsigned int j = 0; j < i; j++) {
    Serial.print(rcv[j] >> 4, HEX);
    Serial.print(rcv[j] & 0xF, HEX);
    Serial.print(" ");
  }
  Serial.println();
}

Типичные ошибки и советы по отладке

  • Нет связи с шлюзом: убедитесь, что вы находитесь в зоне покрытия TTN-шлюза. Проверьте карту покрытия TTN.
  • Неверный Device EUI: запустите пример FirstConfiguration заново и убедитесь, что скопировали EUI без лишних пробелов.
  • Ошибка JOIN: проверьте правильность Device EUI, Device EUI и AppKey в настройках TTN и в коде.
  • Данные не приходят на сервер: убедитесь, что антенна подключена к плате — без неё дальность связи резко падает.
  • Версия библиотеки: если используете MKRWAN_v2, помните о её бета-статусе; при возникновении проблем попробуйте стабильную версию.

Подробные туториалы по отправке данных между платой MKR WAN и TTN, а также между двумя платами MKR WAN, доступны здесь: here.

Дополнительные материалы и ресурсы

Технология LoRa® — обширная и увлекательная тема. Если хотите изучить её глубже, обратитесь к следующим ресурсам:

Товарные знаки

  • LoRa® является зарегистрированным товарным знаком компании Semtech Corporation.