Руководство по 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-устройств и сервисов.

Технология 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) для управления сетью и её обслуживания.

Важно понимать разницу между сетевым сервером и шлюзом. Сетевой сервер управляет маршрутизацией сообщений, а шлюзы работают как ретрансляторы, передающие данные между оконечными устройствами и сервером. Сети на базе 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 Factor | Data Rate | Range | Time on-Air |
|---|---|---|---|
| SF7 | 5470 bps | 2 km | 56 ms |
| SF8 | 3125 bps | 4 km | 100 ms |
| SF9 | 1760 bps | 6 km | 200 ms |
| SF10 | 980 bps | 8 km | 370 ms |
| SF11 | 440 bps | 11 km | 40 ms |
| SF12 | 290 bps | 14 km | 1400 ms |
Оконечные устройства могут передавать данные на любом доступном канале в любое время при любой доступной скорости — при соблюдении следующего правила:
- Устройство меняет канал псевдослучайным образом при каждой передаче. Такое частотное разнообразие повышает устойчивость системы к помехам.
Также необходимо соблюдать местные нормативные требования:
- В диапазоне EU868 оконечное устройство должно соблюдать максимальный коэффициент заполнения (duty cycle) для используемого поддиапазона и местного законодательства (1% для оконечных устройств).
- В диапазоне US915 оконечное устройство должно соблюдать максимальную длительность передачи (dwell time) для используемого поддиапазона и местного законодательства (400 мс).

Региональные параметры
Спецификация региональных параметров технологии 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 B: «Beaconing»
Устройства Class B расширяют Class A, добавляя запланированные окна приёма downlink через фиксированные интервалы времени. Это позволяет эмулировать устройство, постоянно готовое принять данные. Class B применяется там, где нужна низкая задержка downlink при разумном энергопотреблении.

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

Аутентификация и безопасность
Безопасность — важнейший аспект сетей на базе 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, заранее прошитого производителем в устройство.

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

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

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

Arduino® Edge Control — решение для удалённого мониторинга и управления, оптимизированное для работы на открытом воздухе — можно расширить беспроводными возможностями, подключив плату MKR WAN 1300 или 1310. 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. Схема подключения показана на изображении ниже:

Прежде чем отправлять и получать сообщения через 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 Developer Portal from Semtech — технические статьи, руководства пользователя, спецификации и даташиты от Semtech.
- The Things Network documentation — всё о технологии LoRa® и сети The Things Network.
- The Things Academy online course in Udemy — бесплатный онлайн-курс по LoRa®-технологии для тех, кто хочет создавать собственные LPWAN-приложения.
Товарные знаки
- LoRa® является зарегистрированным товарным знаком компании Semtech Corporation.