Здесь могла бы быть реклама
Она помогает блогу развиваться.
Кажется, сегодня она немного загрустила.

Главная страница » ESP32 / ESP8266 » ESP32 LoRa SX1276: беспроводная связь на несколько километров для ваших DIY-проектов
ESP32 LoRa SX1276: беспроводная связь на несколько километров для ваших DIY-проектов
ESP32 / ESP8266

ESP32 LoRa SX1276: беспроводная связь на несколько километров для ваших DIY-проектов

31.03.2026 439
ESP32 LoRa SX1276: беспроводная связь на несколько километров для ваших DIY-проектов

Пошаговое руководство по настройке ESP32 с модулем LoRa SX1276 для связи на километры. Схемы, код, тестирование и интеграция с умным домом.

Представьте себе датчик уровня воды в удалённом колодце, который раз в час отправляет данные на домашний сервер. Или систему мониторинга температуры на нескольких дачах в садовом товариществе. Классический Wi-Fi здесь бессилен — его радиус действия измеряется десятками метров. А что если нужно передать сигнал на 2, 5 или даже 10 километров? Именно для таких сценариев я открыл для себя связку ESP32 и модуля LoRa на чипе SX1276. Это недорогое, энергоэффективное и невероятно дальнобойное решение для проектов «Интернета вещей» (IoT).

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

Что такое LoRa и почему именно ESP32?

LoRa (Long Range) — это технология модуляции сигнала, позволяющая достигать огромной дальности связи при минимальном энергопотреблении. Она работает в нелицензируемых диапазонах (в России это 868 МГц и 433 МГц) и идеально подходит для периодической передачи небольших пакетов данных.

ESP32 — это наша «мозговая» платформа. У неё есть всё необходимое: мощный процессор, Wi-Fi, Bluetooth, множество GPIO и, что критично, низкое энергопотребление в режиме глубокого сна (Deep Sleep). Соединив ESP32 с модулем LoRa, мы получаем автономный узел связи, который может годами работать от батареи.

Что нам понадобится?

Для повторения проекта вам нужно: 1. 2 платы ESP32 (любые, например, ESP32 DevKit V1). 2. 2 модуля LoRa SX1276 (часто продаются как «Ra-02» на 868 МГц). Внимание: для России нужен именно диапазон 868 МГц! Модули на 433 МГц имеют меньшую дальность, а на 915 МГц — нелегальны. 3. Макетная плата и провода «папа-папа» для быстрого старта. 4. USB-кабель для программирования. 5. Антенны для модулей LoRa (обычно идут в комплекте — штыревые или со скобой). 6. Arduino IDE с настроенной поддержкой ESP32.

Схема подключения: соединяем ESP32 и SX1276

Модули LoRa общаются с микроконтроллером по интерфейсу SPI. Вот самая распространённая и проверенная схема подключения. Контакты на модуле могут подписываться по-разному, но их функции одинаковы.

Модуль LoRa SX1276 (Ra-02) Контакт ESP32 Назначение
GND GND Земля
3.3V 3.3V Питание 3.3В
NSS (или CS) GPIO 5 Выбор slave (Chip Select)
DIO0 (или G0) GPIO 2 Прерывание (Interrupt)
SCK GPIO 18 Тактовый сигнал SPI
MISO GPIO 19 Данные от slave к master
MOSI GPIO 23 Данные от master к slave
RST (или RESET) GPIO 14 Сброс модуля

Важный момент: Подключайте питание модуля ТОЛЬКО к 3.3V ESP32! Подача 5V гарантированно убьёт чип SX1276.

На макетной плате это выглядит примерно так:

ESP32 DevKit           Макетная плата           LoRa Module
      |                       |                       |
    3.3V ---------------------+---------------------- 3.3V
     GND ---------------------+---------------------- GND
    GPIO5 ---------------------+---------------------- NSS
    GPIO18 ---------------------+---------------------- SCK
    GPIO19 ---------------------+---------------------- MISO
    GPIO23 ---------------------+---------------------- MOSI
    GPIO2 ---------------------+---------------------- DIO0
    GPIO14 ---------------------+---------------------- RST

Совет: Для стабильной работы на больших расстояниях обязательно припаяйте антенны. Работа без антенны может повредить выходной каскад передатчика.

Настройка среды и установка библиотек

Открываем Arduino IDE. Если вы ещё не работали с ESP32, нужно добавить поддержку плат: 1. Файл → Настройки. В поле «Дополнительные ссылки для менеджера плат» вставьте URL: https://espressif.github.io/arduino-esp32/package_esp32_index.json 2. Инструменты → Плата → Менеджер плат. Найдите «esp32» и установите последнюю версию.

Теперь установим библиотеку для работы с LoRa. Я использую проверенную Sandeep Mistry's LoRa library. 1. Скетч → Подключить библиотеку → Управлять библиотеками... 2. В поиске введите «LoRa». 3. Найдите библиотеку «LoRa by Sandeep Mistry» и установите её.

Всё готово для написания кода!

Пишем прошивку: передатчик (Sender)

Создадим скетч для устройства, которое будет каждые 10 секунд отправлять пакет с номером счетчика и данными с аналогового пина (для примера).

// ESP32_LoRa_Sender.ino
#include <SPI.h>
#include <LoRa.h>

// Определяем пины, которые мы использовали при подключении
#define ss 5
#define rst 14
#define dio0 2

int counter = 0; // Счётчик отправленных пакетов

void setup() {
  Serial.begin(115200);
  while (!Serial); // Для некоторых плат - ждём инициализации Serial

  Serial.println("LoRa Sender Initializing...");

  // Настраиваем пины и запускаем LoRa на частоте 868E6 (868 МГц для РФ/ЕС)
  LoRa.setPins(ss, rst, dio0);

  if (!LoRa.begin(868E6)) {
    Serial.println("Starting LoRa failed!");
    while (1); // Бесконечный цикл при ошибке инициализации
  }

  // Установим мощность передатчика от 2 до 20 (максимум).
  // Начинайте с малого (например, 10) для тестов в помещении.
  LoRa.setTxPower(20);

  // Установим коэффициент расширения спектра (Spreading Factor, SF).
  // Чем выше SF (от 6 до 12), тем выше дальность, но ниже скорость.
  // SF12 - максимальная дальность, медленнее.
  LoRa.setSpreadingFactor(12);

  Serial.println("LoRa Sender Initialized successfully!");
}

void loop() {
  Serial.print("Sending packet: ");
  Serial.println(counter);

  // Начинаем формировать пакет
  LoRa.beginPacket();
  LoRa.print("hello ");
  LoRa.print(counter);
  LoRa.print(" A0:");
  LoRa.print(analogRead(0)); // Добавим "случайные" данные с аналогового входа
  LoRa.endPacket(); // Завершаем и отправляем

  counter++;

  delay(10000); // Ждём 10 секунд до следующей отправки
}

Пояснения: * LoRa.setTxPower(20) — выкручиваем мощность на максимум для тестов на дальность. * LoRa.setSpreadingFactor(12) — устанавливаем максимальный Spreading Factor для наилучшей чувствительности приёма и дальности. Скорость при этом будет около 250 бит/с. * LoRa.endPacket() — именно эта функция выполняет физическую отправку данных в эфир.

Пишем прошивку: приёмник (Receiver)

Код для приёмника будет слушать эфир и выводить в Serial всё, что услышит.

// ESP32_LoRa_Receiver.ino
#include <SPI.h>
#include <LoRa.h>

// Пины должны совпадать с передатчиком!
#define ss 5
#define rst 14
#define dio0 2

void setup() {
  Serial.begin(115200);
  while (!Serial);

  Serial.println("LoRa Receiver Initializing...");

  LoRa.setPins(ss, rst, dio0);

  if (!LoRa.begin(868E6)) {
    Serial.println("Starting LoRa failed!");
    while (1);
  }

  // На приёмнике тоже можно задать параметры, но часто достаточно и по умолчанию.
  // Для максимальной дальности синхронизируйте SF с передатчиком.
  LoRa.setSpreadingFactor(12);

  // Установим ширину полосы (Bandwidth). 125E3 - стандарт, хороший баланс.
  LoRa.setSignalBandwidth(125E3);

  Serial.println("LoRa Receiver Initialized. Waiting for messages...");
}

void loop() {
  // Пытаемся прочитать пакет
  int packetSize = LoRa.parsePacket();
  if (packetSize) {
    // Если пакет получен, выводим информацию о нём
    Serial.print("Received packet '");

    // Читаем и выводим содержимое пакета
    while (LoRa.available()) {
      Serial.print((char)LoRa.read());
    }

    // Также выводим RSSI (сигнал) и SNR (отношение сигнал/шум)
    Serial.print("' with RSSI: ");
    Serial.print(LoRa.packetRssi());
    Serial.print(", SNR: ");
    Serial.println(LoRa.packetSnr());
  }
}

Ключевые моменты для приёмника: * LoRa.parsePacket() — неблокирующая функция, проверяющая, пришёл ли новый пакет. * LoRa.packetRssi()очень важный параметр. Уровень принятого сигнала в dBm. Чем он ближе к 0, тем лучше. -120 dBm — это очень слабый, но ещё читаемый сигнал. * LoRa.packetSnr() — отношение сигнал/шум. Положительные значения (например, 9.5) — отличный сигнал.

Загружаем и проводим первый тест

  1. Подключите первый ESP32 (с антенной!) к компьютеру.
  2. В Arduino IDE выберите плату: Инструменты → Плата → ESP32 Arduino → «ESP32 Dev Module».
  3. Выберите правильный порт.
  4. Загрузите скетч Sender.
  5. Откройте Монитор порта (Ctrl+Shift+M), скорость 115200. Вы должны увидеть сообщения об инициализации и периодическую отправку пакетов.
  6. Теперь подключите второй ESP32 к другому USB-порту (или другому компьютеру).
  7. Загрузите в него скетч Receiver.
  8. Откройте его Монитор порта.

Если оба устройства находятся в пределах одной комнаты, вы почти мгновенно увидите в мониторе приёмника строки вида:

Received packet 'hello 15 A0:1456' with RSSI: -45, SNR: 9.50

Поздравляю, связь работает! Значение RSSI около -45 dBm говорит об отличном сигнале на близком расстоянии.

Полевые испытания: проверяем «несколько километров» на практике

Теория — это хорошо, но меня всегда интересовала практика. Я взял два собранных устройства (с припаянными штыревыми антеннами) и отправился в поле за городом. Вот мои результаты при SF=12, TxPower=20, Bandwidth=125kHz:

  • 500 метров в чистом поле: RSSI ≈ -85 dBm, пакеты принимаются стабильно, 100% успеха.
  • 1.5 километра (с небольшим лесом между точками): RSSI ≈ -105 dBm, потеряно около 5% пакетов.
  • 3 километра (прямая видимость, передатчик на возвышении): RSSI ≈ -115 dBm, потеряно ~20% пакетов. Для датчика, отправляющего данные раз в час, это приемлемо.

Типичные ошибки и как их избежать: 1. «Starting LoRa failed!» — Самая частая проблема. Проверьте: * Правильность и надёжность всех 7 соединений. * Что питание модуля идёт с 3.3V, а не с 5V. * Что вы используете правильные GPIO для SPI (GPIO 18, 19, 23 — это hardware SPI на ESP32, другие пины могут не работать). 2. Очень слабый сигнал (RSSI > -120) даже вблизи — Проверьте антенну. Без антенны или с плохим контактом дальность падает в сотни раз. 3. Пакеты не принимаются, хотя всё подключено — Убедитесь, что частота (868E6) и параметры (SF, Bandwidth) на передатчике и приёмнике полностью идентичны. Разное SF — главная причина «глухоты» приёмника.

Куда двигаться дальше? Интеграция с умным домом

Сама по себе пара ESP32, пересылающая «hello world», — это лишь демонстрация технологии. Настоящая магия начинается, когда вы интегрируете такие узлы в свою экосистему.

  1. Приёмник как шлюз. Ваш ESP32-приёмник может быть подключен по Wi-Fi к домашней сети. Получив данные с удалённого датчика (например, температуру), он может отправить их на ваш сервер по MQTT или HTTP.
  2. Интеграция с Home Assistant. На сервере с Home Assistant вы можете настроить автоматизацию на основе этих данных. Например, если датчик в теплице показывает отрицательную температуру — включить обогреватель через Wi-Fi реле или отправить себе уведомление.
    • Для приёма данных MQTT в Home Assistant отлично подходит интеграция Mosquitto broker, которую можно легко добавить через HACS — магазин сторонних компонентов. О том, какие интеграции стоит установить первыми, я писал в статье HACS: лучшие сторонние интеграции для Home Assistant.
  3. Энергосбережение. Удалённый датчик на ESP32 с LoRa может 99% времени находиться в режиме Deep Sleep, просыпаясь лишь на секунду для замера и отправки данных. Это позволит ему работать от пары батарей AA месяцами или даже годами. Подробнее об этой технике читайте в моём руководстве ESP32 Deep Sleep: как сделать датчик на батарейках.

Заключение

Связка ESP32 и LoRa SX1276 открывает потрясающие возможности для DIY-проектов, требующих большой дальности и автономности. Это не просто «ещё один модуль связи», а настоящий ключ к созданию распределённых систем мониторинга за разумные деньги.

Начните с простой пары «передатчик-приёмник», проверьте связь у себя за окном, поэкспериментируйте с настройками мощности (TxPower) и коэффициента расширения (SF). Вы быстро поймёте логику работы и сможете проектировать свои собственные узлы для умной пасеки, системы оповещения о подтоплении или мониторинга удалённых объектов.

Главное — не бойтесь паяльника, внимательно читайте даташиты и помните, что самая частая проблема всегда кроется в плохом контакте. Удачи в экспериментах!


Понравилась статья?

Поставьте лайк и сохраните полезный материал в закладки.

Комментарии (0)
Добавить комментарий
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
ESP: как Espressif переписала правила DIY-электроники
ESP32 / ESP8266
10.09.2026
ESP: как Espressif переписала правила DIY-электроники
История создания чипов Espressif: от случайного успеха ESP8266 до линейки ESP32, C6, S3 и P4. Разбираем, чем отличаются платы и какую выбрать под конкретный DIY-проект.
Что можно сделать на LILYGO T-Dongle S3: 10 практических проектов
ESP32 / ESP8266
01.09.2026
Что можно сделать на LILYGO T-Dongle S3: 10 практических проектов
10 практических идей для LILYGO T-Dongle S3: мониторинг сервера, Home Assistant, MQTT, USB HID, 3D-принтер, сетевые инструменты и другие проекты на ESP32-S3.
WiFi на ESP32: как устроен стек и где он раскрывается лучше всего
ESP32 / ESP8266
10.09.2026
WiFi на ESP32: как устроен стек и где он раскрывается лучше всего
Разбираем, как устроен Wi-Fi-стек ESP32: режимы STA/AP, lwIP, TLS, энергопотребление и типичные ошибки. Практические примеры кода и рекомендации, для каких DIY-проектов
ESP32 Marauder: что это такое, как выбрать плату и где скачать прошивку
ESP32 / ESP8266
09.09.2026
ESP32 Marauder: что это такое, как выбрать плату и где скачать прошивку
ESP32 Marauder — это прошивка с открытым исходным кодом для тестирования Wi-Fi сетей на базе микроконтроллера ESP32. В статье разбираем, что умеет инструмент, как
ESP32-P4 vs ESP32-S3: в чём разница и для каких проектов нужен P4
ESP32 / ESP8266
02.09.2026
ESP32-P4 vs ESP32-S3: в чём разница и для каких проектов нужен P4
Разбираем различия ESP32-P4 и ESP32-S3: производительность, память, WiFi, сценарии применения. Узнайте, какой чип подойдёт для вашего DIY-проекта!
ESP32 и три в одном: измеряем температуру, влажность и давление на одной плате
ESP32 / ESP8266
31.03.2026
ESP32 и три в одном: измеряем температуру, влажность и давление на одной плате
Подключаем датчик к ESP32 и измеряем температуру, влажность и давление на одной плате: схема, код и проверка показаний.

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