LoRa-модуль Ra-02 (SX1278): связь на километры без интернета — обзор и подключение
Что это за модуль
Wi-Fi и Bluetooth работают на десятки метров, сотовой связи в поле нет, а передать показания датчика с дачи или с бочки на огороде хочется. Для этого случая придумана LoRa — чирп-сигнал (chirp spread spectrum), который принимается из-под уровня шума. Модуль Ra-02 от Ai-Thinker построен на трансивере Semtech SX1278 и стоит пару сотен рублей. При мощности всего +20 дБм (100 мВт) связка «передатчик — приёмник» на открытой местности держит километры: по datasheet SX1278 — больше 10 км при прямой видимости, сквозь городскую застройку — сотни метров. Все цифры ниже — из datasheet Semtech SX1276/77/78/79 и спецификаций производителя модуля, не по памяти.
Почему дальность побеждает скорость
У LoRa два главных винта: spreading factor (SF6–SF12) и полоса (7,8–500 кГц). Чем выше SF, тем сильнее сигнал «размазан» по времени, тем ниже скорость, но тем ниже требуемый уровень сигнала на входе. При SF12 и узкой полосе чувствительность доходит до −148 дБм — сигнал, который в десятки раз слабее шума. Скорость при этом падает до десятков бит в секунду; на верхнем пределе LoRa даёт 37,5 кбит/с. Помимо LoRa чип умеет FSK/GFSK/OOK — до 300 кбит/с, если нужен обычный радиоканал. Есть режим CAD (Channel Activity Detection): чип «подслушивает» эфир и отвечает, идёт ли передача, — на этом строятся сети из многих передатчиков.
Характеристики по паспорту
| Параметр | Значение (Ra-02 / SX1278) |
|---|---|
| Чип | Semtech SX1278, модуль Ai-Thinker Ra-02 |
| Диапазон | 410–525 МГц, рабочая частота проектов — 433 МГц |
| Мощность передачи | до +20 дБм (100 мВт). |
| Чувствительность приёмника | до −148 дБм (SF12, узкая полоса) |
| Скорость | ~18 бит/с (SF12) … 37,5 кбит/с (LoRa); до 300 кбит/с в FSK |
| Spreading factor / полоса | SF6–SF12; полоса 7,8–500 кГц |
| Питание | 1,8–3,7 В, номинал 3,3 В; питание 5 В — нельзя |
| Ток | TX 105–120 мА, RX ~10,8–12 мА, standby 1,6 мА, сон 0,2 мкА |
| Интерфейс | SPI (NSS/SCK/MOSI/MISO) + RESET + DIO0–DIO5, полудуплекс |
| Пакетный движок | до 256 байт на пакет, аппаратный CRC |
| Антенна | U.FL (IPEX) в этой версии; есть варианты с пайкой на площадку |
| Корпус | SMD с краевыми пазами, шаг 2 мм, металлический экран |
| Температура | −40…+85 °C |
Подключение к Arduino и ESP32
У модуля 16 контактных площадок, но по делу хватает половины: GND, 3,3 В, RESET, NSS, SCK, MOSI, MISO, DIO0. Остальные DIO пригодятся для расширенных режимов — прерываний по приёму и по окончании передачи в библиотеках RadioHead.
- Питание — только 3,3 В. Верхняя граница всего 3,7 В, и логика трёхвольтовая. Максимум на цифровых входах чипа — VDD + 0,3 В, то есть около 3,6 В. С 5-вольтовой Arduino Uno сигналы в модуль подавать напрямую нельзя — ставь резисторный делитель или преобразователь уровней.
- Не питай от стабилизатора Arduino Uno. Встроенный 3,3-вольтовый регулятор Uno даёт около 50 мА, а при передаче на полной мощности модуль тянет 105–120 мА. Нужен внешний стабилизатор с запасом от 200 мА или плата, у которой 3,3 В «родные» — ESP8266, ESP32.
- Антенна — до подачи питания. Передача на +20 дБм без подключённой антенны пробивает выходной каскад чипа. Сначала антенна, потом питание.
- RESET — на GPIO. Библиотеки сами дёргают его при старте; висящий в воздухе RESET означает непредсказуемое поведение.
- Куда подключать. Для кода ниже: NSS→D10 (ESP32: GPIO5), SCK→D13 (GPIO18), MOSI→D11 (GPIO23), MISO→D12 (GPIO19), RESET→D9 (GPIO14), DIO0→D2 (GPIO26), земля — общая с платой.
// Передатчик на Ra-02 (SX1278): раз в 10 секунд шлёт пакет
// Библиотека: "LoRa" от sandeepmistry — https://github.com/sandeepmistry/arduino-LoRa
#include <SPI.h>
#include <LoRa.h>
#define NSS_PIN 10 // ESP32: 5
#define RESET_PIN 9 // ESP32: 14
#define DIO0_PIN 2 // ESP32: 26
void setup() {
Serial.begin(115200);
LoRa.setPins(NSS_PIN, RESET_PIN, DIO0_PIN);
if (!LoRa.begin(433E6)) { // частота 433 МГц
Serial.println("LoRa не запустился");
while (1);
}
LoRa.setSpreadingFactor(10); // SF6-SF12: выше = дальше и медленнее
LoRa.setSignalBandwidth(125E3); // 7.8E3 ... 500E3
LoRa.setCodingRate4(8); // 5..8: выше = надёжнее, ниже скорость
Serial.println("Готов к передаче");
}
int counter = 0;
void loop() {
LoRa.beginPacket();
LoRa.print("Temp: ");
LoRa.print(18.5 + (counter % 3)); // подставь свои данные
LoRa.print(" #");
LoRa.println(counter++);
LoRa.endPacket();
Serial.println("Пакет отправлен");
delay(10000);
}
Приёмник: тот же LoRa.begin с той же частотой и теми же SF/полосой; LoRa.parsePacket() в цикле вытащит пакет, LoRa.Rssi() и LoRa.packetSnr() покажут качество линии — на этих двух числах настраивают антенны и размещение. Главное правило: несовпадение любого параметра не даёт ошибки, приёмник просто молчит. SF10 на 125 кГц и SF10 на 250 кГц друг друга не слышат.
Частые ошибки
- Кормят модуль 5 вольтами. Максимум 3,7 В, логика 3,3-вольтовая. От 5 В чип живёт недолго или вообще не стартует.
- Передают без антенны. Выходной каскад деградирует даже если тест пакетов проходил.
- Питают от встроенного 3,3 В Uno. Технически недостаточно: при передаче 105–120 мА, регулятор даёт ~50 мА. Передача срезается или модуль перезагружается.
- Разные SF или полоса у передатчика и приёмника. Пакеты не доходят, никакой ругани нет. Каждый раз сверяй setSpreadingFactor и setSignalBandwidth с обеих сторон.
- Ждут 10 км в квартире. Сквозь бетон — сотни метров, километры — на открытом рельефе при прямой видимости и антенне повыше.
- Превышают нормы эфира. 433 МГц — ISM-диапазон, но по регионам действуют свои регламенты по мощности и скважности передачи.
- Гонят большие объёмы. LoRa — узкобитный канал: минуты на сотни килобайт. Для телеметрии и команд — да, для картинок и конфигов — нет.
Что взять под задачу
Собрал датчики на участке и не хочешь тянуть кабель или городить Wi-Fi там, где его нет — Ra-02 дешевле и гибче: батарейный узел, дальность в километры, никакой инфраструктуры. Питание для узлов собирается из DC-DC преобразователей, а если нужно на линии ещё и распознавание адресов — смотри в сторону RS-485 на MAX485 для стационарных линий: LoRa там не конкурент, но и радиоканал — не про RS-485.
Информация собрана из открытых источников и паспортов производителей и не является истиной в последней инстанции. Характеристики, распиновку и совместимость проверяйте по документации конкретной партии модуля перед покупкой и подключением.