Блог
ESP32 + LoRa: узел датчиков дальнего радиуса (до 8 км)
Проблема
WiFi отлично работает — пока вам не нужно поставить датчик в саду в 200 метрах от дома. Или на ферме за долиной. Или внутри металлического склада. WiFi умирает на 50 метрах. Bluetooth — на 10.
LoRa меняет всё. С модулем E32 (915 МГц, 1 Вт) можно передавать данные датчиков на расстояние до 8 километров — без сотовой вышки, без WiFi и без ежемесячных платежей.
Что вы соберёте
Узел датчиков LoRa с питанием от батареи, который:
- Считывает температуру и влажность
- Передаёт данные по LoRa на приёмник
- Уходит в глубокий сон на 10 минут между измерениями (батареи хватает на месяцы)
Сложность: для начинающих | Время: 45 минут | Стоимость: ~$40 за детали
Нужное железо (спецификация)
| Деталь | Модель | Кол-во | Цена | Купить |
|---|---|---|---|---|
| Микроконтроллер (передатчик) | ESP32 DevKitC V4 | 1 | $13.49 | Смотреть товар |
| Микроконтроллер (приёмник) | ESP32-C3 SuperMini | 1 | $7.49 | Смотреть товар |
| Модуль LoRa | E32-915T30D (915 МГц) | 2 | $11.99 за шт. | Смотреть товар |
| Датчик температуры/влажности | DHT22 | 1 | $5.24 | Смотреть товар |
| Питание от батареи | Шилд 18650 | 1 | $11.99 | Смотреть товар |
| Макетная плата | 830 точек | 1 | $4.49 | Смотреть товар |
| Провода-перемычки | M-M, 40 шт. | 1 | $2.99 | Смотреть товар |
Важно про частоту: модули E32 бывают в версиях 433 МГц, 868 МГц и 915 МГц. Они НЕ умеют общаться друг с другом. Убедитесь, что оба модуля на ОДНОЙ частоте. В США используется 915 МГц.
Шаг 1: Монтаж (узел-передатчик)
Модуль LoRa E32 работает через UART — это заметно проще, чем LoRa-модули на SPI. Никаких сложных библиотек!
| Пин E32 LoRa | Пин ESP32 | Примечание |
|---|---|---|
| VCC | 5V | Питание (сверьтесь со спецификацией модуля) |
| GND | GND | Земля |
| RXD | GPIO 17 (TX2) | RX модуля ← TX ESP32 |
| TXD | GPIO 16 (RX2) | TX модуля → RX ESP32 |
| M0 | GND | Режим передачи |
| M1 | GND | Режим передачи |
| DATA DHT22 | GPIO 13 | Данные датчика |
Перекрёстное соединение TX↔RX: UART — как телефонный разговор: ваш рот (TX) подключается к чужому уху (RX). Всегда соединяйте крест-накрест: TXD модуля → RX2 ESP32, RXD модуля → TX2 ESP32.
Шаг 2: Код передатчика
Загрузите это на ESP32-передатчик (тот, что с датчиком DHT22):
#include <HardwareSerial.h>
#include "DHT.h"
HardwareSerial LoRaSerial(2); // ESP32 Serial2 (GPIO 16, 17)
#define DHTPIN 13
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Deep sleep: 10 minutes between readings
#define uS_TO_S_FACTOR 1000000ULL
#define TIME_TO_SLEEP 600
void setup() {
Serial.begin(115200);
Serial.println("sensbench LoRa Sensor Node");
LoRaSerial.begin(9600);
dht.begin();
delay(2000);
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Sensor read failed!");
} else {
String data = "T:" + String(t, 1) + "C H:" + String(h, 1) + "%";
Serial.println("Sending: " + data);
LoRaSerial.println(data);
}
Serial.println("Deep sleeping for 10 minutes...");
Serial.flush();
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
esp_deep_sleep_start();
}
void loop() {
// Not reached after deep sleep
}
Шаг 3: Код приёмника
Загрузите это на ESP32-приёмник (подключённый к компьютеру):
#include <HardwareSerial.h>
HardwareSerial LoRaSerial(2);
void setup() {
Serial.begin(115200);
Serial.println("sensbench LoRa Receiver");
LoRaSerial.begin(9600);
}
void loop() {
if (LoRaSerial.available()) {
String data = LoRaSerial.readString();
Serial.print("Received: ");
Serial.println(data);
}
}
Шаг 4: Проверьте
- Запитайте узел-передатчик от шилда 18650
- Подключите приёмник к компьютеру и откройте Serial Monitor (115200 бод)
- Каждые 10 минут вы будете видеть температуру и влажность, прилетающие с расстояния до 8 км
Почему это так хорошо работает
- Глубокий сон: в глубоком сне ESP32 потребляет всего 10µА. С батареей 18650 на 2000 мАч узел датчиков проживёт больше 3 месяцев на одном заряде.
- LoRa по UART: в отличие от LoRa на SPI (SX1276), модуль E32 общается простым последовательным портом. Никакой сложной библиотеки, никакой путаницы с проводами SPI и регистрами конфигурации.
- Мощность 1 Вт (30 дБм): E32-915T30D — это версия повышенной мощности. Обычные модули выдают 20 дБм (100 мВт). Этот — 30 дБм (1000 мВт): в 10 раз больше мощности, в 3 раза больше радиус.
Идём дальше
- Добавьте узлы датчиков: каждый узел шлёт данные по своему расписанию, чтобы не было коллизий
- Пересылайте в облако: подключите ESP32-приёмник к WiFi и передавайте данные LoRa в MQTT
- Солнечное питание: добавьте небольшую солнечную панель к шилду 18650 для постоянной установки
- Соберите сеть: несколько приёмников могут ретранслировать данные на ещё большие расстояния