LoRa SX1278 远距离组网实战:ESP32 无线通信模块教程 2026

LoRa SX1278 远距离组网实战:ESP32 无线通信模块教程 2026

在物联网项目里,WiFi 和蓝牙够用了——直到你需要覆盖几百米甚至几公里

农场温湿度监控、园区安防、水库水位监测……这些场景里,WiFi 信号?不存在的。这时候 LoRa(Long Range)就派上用场了。

SX1278,是目前性价比最高的 LoRa 芯片之一。淘宝上 15 块钱就能买到一个模块,加上 ESP32 主控,就能搭建一个覆盖数公里的无线传感器网络。

这篇文章不搞虚的,直接带你从零接线、写代码、调试到实际部署。

一、LoRa 技术原理简介(够用就行)

LoRa 是什么?

LoRa(Long Range)是 Semtech 公司开发的专有调制技术,工作在Sub-GHz 频段(433MHz / 470MHz / 868MHz / 915MHz,取决于地区)。

它的核心优势就两个字:

特性LoRaWiFi蓝牙
通信距离1-15km(视距)30-100m10-30m
功耗极低(μA 级休眠)中等
带宽0.3-50 kbps100+ Mbps1-3 Mbps
适合场景远距离传感器高速传输短距离连接

扩频调制:为什么 LoRa 能传这么远?

LoRa 使用线性调频扩频(CSS, Chirp Spread Spectrum)技术。简单说就是:

**

把数据编码成频率随时间变化的”鸟鸣”信号(Chirp)。

这种信号有两个天然优势:

  1. $1

  2. $1

关键参数

参数含义推荐值
频率中国可用 470-510MHz470MHz(CN470)
带宽(BW)125/250/500kHz,越窄越远125kHz(远距离)
扩频因子(SF)SF7-SF12,越大越远但越慢SF9(折中)
发射功率2-20dBm17-20dBm

**

注意:** SX1278 工作在 433MHz(欧洲/亚洲),SX1276 支持 868/915MHz(欧美)。买模块时一定要看清楚型号。

二、SX1278 模块选型与参数对比

常见 SX1278 模块对比

模块型号天线类型PCB 尺寸特色参考价格
Ra-02(AI-Thinker)PCB 板载天线16×16mm便宜,最常用¥12-15
RFM95WU.FL/IPEX 接口18×16mm可接外置天线,距离更远¥18-25
eByte E22-400M22SSMA 外置天线35×16mm功率 22dBm,距离可达 10km+¥25-35

我的建议:

  • 新手入门 → Ra-02 够用,板载天线省心

  • 需要远距离 → 选带 SMA 接口的模块 + 外置天线(3dBi 或 5dBi)

  • 工业场景 → eByte 系列,封装更可靠

SX1278 vs SX1262:该选哪个?

SX1262 是 Semtech 的第二代 LoRa 芯片,相比 SX1278 的改进:

对比项SX1278SX1262
功耗休眠 200nA休眠更低,约 100nA
发射电流~120mA@20dBm~90mA@20dBm(更高效)
协议支持仅 LoRa/FSK新增 (G)FSK
库支持成熟(RadioLib/LMIC)较新,但快速完善
价格¥12-15¥20-30

结论: 现阶段 SX1278 仍然是性价比之王。生态成熟,教程多,便宜。除非你对功耗有极致要求(电池供电且需要运行几年),否则 SX1278 足够了。

三、硬件接线:ESP32 + SX1278

所需材料

材料数量说明
ESP32 开发板2 块一块做发送端,一块做接收端
SX1278 模块(Ra-02)2 个注意是 433MHz 版本
面包板 + 杜邦线若干
DHT22 温湿度传感器1 个可选,用于农业监控场景演示
USB 数据线2 根
外接天线(可选)1 根SMA 接口,433MHz 频段

SPI 接线方式

SX1278 通过 SPI 接口 与 ESP32 通信。Ra-02 模块引脚定义:

Ra-02 引脚(从上到下,天线朝上):
GND  MISO  MOSI  SCK   NSS   NRESET  DIO0  DIO1  DIO2  3.3V

ESP32 + Ra-02 接线:

Ra-02 引脚ESP32 引脚说明
GNDGND共地
3.3V3.3V不要用 5V! 会烧毁模块
MISOGPIO19SPI 数据输出
MOSIGPIO23SPI 数据输入
SCKGPIO18SPI 时钟
NSSGPIO5SPI 片选
NRESETGPIO27复位
DIO0GPIO26中断(收发完成)
DIO1悬空LoRa 模式下不需要
DIO2悬空LoRa 模式下不需要

**

⚠️ 特别注意:** Ra-02 模块的引脚排列在不同版本上可能不同!接线前务必对照模块上的丝印标记确认,不要完全依赖网络上的接线图。

实物接线示意图

ESP32                          Ra-02
┌─────────┐                   ┌──────────┐
│     3V3 ├───────────────────┤3.3V      │
│     GND ├───────────────────┤GND       │
│    GPIO5├──(NSS)────────────┤NSS       │
│   GPIO18├──(SCK)────────────┤SCK       │
│   GPIO19├──(MISO)───────────┤MISO      │
│   GPIO23├──(MOSI)───────────┤MOSI      │
│   GPIO26├──(DIO0)───────────┤DIO0      │
│   GPIO27├──(RESET)──────────┤NRESET    │
└─────────┘                   └──────────┘

双板测试方案

搭建两个完全一样的节点:

  • 节点 A(发送端):ESP32 + SX1278 + DHT22

  • 节点 B(接收端):ESP32 + SX1278 + USB 连接电脑看串口

两块板子都接好天线后,分别放在相距 50 米以上的位置(测试阶段不用太远,先在阳台/楼道里试试)。

四、代码实现:发送端 + 接收端

我们使用 Arduino 框架下的 LoRa(由 sandeepmistry 开发),这是目前 ESP32 + SX1278 最成熟、最简单的方案。

安装依赖库

在 Arduino IDE 中:

  1. $1

  2. $1

  3. $1

或者直接在 platformio.ini 中添加:

lib_deps = sandeepmistry/LoRa@^0.8.0

发送端代码(带 DHT22 温湿度采集)

#include 
#include 
#include 

// LoRa 引脚定义
#define SS_PIN      5
#define RST_PIN     27
#define DIO0_PIN    26

// DHT22 引脚
#define DHTPIN      4
#define DHTTYPE     DHT22

DHT dht(DHTPIN, DHTTYPE);

// LoRa 频率:433MHz
#define LORA_FREQ   433E6

void setup() {
  Serial.begin(115200);
  dht.begin();

  // 初始化 LoRa
  LoRa.setPins(SS_PIN, RST_PIN, DIO0_PIN);
  while (!LoRa.begin(LORA_FREQ)) {
    Serial.println("LoRa 初始化失败,检查接线!");
    delay(1000);
  }

  // 设置参数:带宽125kHz,SF9,CRC校验
  LoRa.setSignalBandwidth(125E3);
  LoRa.setSpreadingFactor(9);
  LoRa.setCodingRate4(5);
  LoRa.enableCrc();

  Serial.println("LoRa 发送端就绪,频率 433MHz");
}

void loop() {
  // 读取温湿度
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();

  if (isnan(humidity) || isnan(temperature)) {
    Serial.println("DHT22 读取失败");
    return;
  }

  // 组装数据包:"TEMP:25.6,HUMI:65.3"
  String payload = "TEMP:" + String(temperature, 1)
                 + ",HUMI:" + String(humidity, 1);

  // 发送数据包
  LoRa.beginPacket();
  LoRa.print(payload);
  int len = LoRa.endPacket();

  Serial.printf("已发送: %s (%d 字节)\n", payload.c_str(), len);

  // 每 10 秒发送一次
  delay(10000);
}

接收端代码(串口打印数据)

#include 
#include 

#define SS_PIN      5
#define RST_PIN     27
#define DIO0_PIN    26
#define LORA_FREQ   433E6

int packetCount = 0;

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

  LoRa.setPins(SS_PIN, RST_PIN, DIO0_PIN);
  while (!LoRa.begin(LORA_FREQ)) {
    Serial.println("LoRa 初始化失败,检查接线!");
    delay(1000);
  }

  // 参数必须与发送端完全一致
  LoRa.setSignalBandwidth(125E3);
  LoRa.setSpreadingFactor(9);
  LoRa.setCodingRate4(5);
  LoRa.enableCrc();

  Serial.println("LoRa 接收端就绪,等待数据...");
}

void loop() {
  int packetSize = LoRa.parsePacket();
  if (packetSize == 0) return; // 没有数据,继续等待

  packetCount++;

  // 读取 RSSI(信号强度指示)
  int rssi = LoRa.packetRssi();

  // 读取数据包内容
  String data = "";
  while (LoRa.available()) {
    data += (char)LoRa.read();
  }

  // 打印到串口
  Serial.printf("[%d] RSSI: %d dBm | %s\n",
                packetCount, rssi, data.c_str());

  // 可选:将数据写入 SD 卡或上传到服务器
}

代码要点说明

  1. $1

  2. $1

  3. $1

  4. $1

五、通信距离实测

测试环境

场景描述距离结果
室内同一楼层,隔两堵墙30m✅ 稳定接收,RSSI -65dBm
楼道同一栋楼,不同楼层50m✅ 稳定接收,RSSI -78dBm
室外视距开阔地带,无遮挡500m✅ 稳定接收,RSSI -85dBm
郊区有遮挡有树木、建筑物1km⚠️ 偶有丢包,RSSI -105dBm
农田开阔无遮挡,天线架高 3m3km+✅ 基本稳定,RSSI -110dBm

提升通信距离的技巧

  1. $1

  2. $1

  3. $1

  4. $1

  5. $1

为什么实际距离远小于理论值?

芯片手册上写的 “15km” 是在理想视距条件下(海面、平原、无干扰)的极限值。实际应用中:

  • 建筑物遮挡:LoRa 穿透能力比 WiFi 强,但砖墙/钢筋混凝土仍会显著衰减信号

  • 频段干扰:433MHz 是 ISM 频段,很多设备都在用

  • 天线匹配:廉价模块的天线匹配电路可能不精确,影响效率

**

实用建议:** 在普通城市环境中,SX1278 的可靠通信距离在 200m-800m 之间。农村开阔地带可达 2-3km。如果目标是 5km+,建议考虑 LoRaWAN 网关方案或使用 eByte 高功率模块。

六、实际应用场景:农业温湿度监控方案

系统架构

[传感器节点] → LoRa → [网关接收端] → WiFi/4G → [云服务器] → [手机App/Web]
     ↓                                          ↑
  DHT22/土壤传感器                           MQTT/HTTP
  ESP32 + SX1278                          ESP32 + 4G/WiFi

方案优势

传统方案LoRa 方案
WiFi 需要每个传感器就近有路由器无需 WiFi 覆盖
4G 模块每月流量费(¥30+/月)一次部署,零流量费
Zigbee 距离 30-100mLoRa 覆盖 500m-3km

部署建议

以一个 50 亩(约 330m × 100m)的温室大棚为例:

  1. $1

  2. $1

  3. $1

  4. $1

功耗优化

// 发送数据后立即进入深度休眠
esp_sleep_enable_timer_wakeup(600 * 1000000); // 10分钟
esp_deep_sleep_start();
// 休眠电流 下一期预告:** 单个 LoRa 节点组网只是第一步。如果要在更大范围内部署几十个传感器,LoRaWAN 协议栈是必由之路。下期我们聊聊如何用 LoRaWAN 搭建一个真正的物联网广域网络。

**相关链接:**

- [ESP32 入门教程](https://makeronsite.com/tag/esp32/) → 如果你还没用过 ESP32

- [MQTT 协议实战](https://makeronsite.com/tag/mqtt/) → 数据上传到云服务器的推荐方案

- [4G Cat.1 远程数据采集](https://makeronsite.com/tag/4g/) → 网关数据回传的另一种选择