LoRa 远距离低功耗
LoRa 远距离低功耗
一、概述
LoRa(Long Range,远距离)是一种远距离、低功耗、低速率的无线调制技术,基于 LoRa 扩频调制(Semtech 专利),单点通信距离可达数公里到十几公里,是 LPWAN(低功耗广域网)的典型代表。LoRaWAN 是基于 LoRa 的网络协议,定义了节点如何接入服务器。
一句话核心:LoRa 用扩频技术换来了超远距离和低功耗——牺牲速率(几 kbps)换覆盖(十几 km);LoRaWAN 把节点数据经网关转发到网络服务器,实现广域组网。
二、LoRa 调制 vs LoRaWAN 协议
| 概念 | 作用 |
|---|---|
| LoRa(调制) | 物理层扩频调制技术,决定通信距离/速率 |
| LoRaWAN(协议) | 基于 LoRa 的 MAC/网络协议,定义组网、入网、数据帧、安全 |
关键理解:LoRa 解决"怎么传得远",LoRaWAN 解决"怎么组网管理"。可以只用 LoRa 做点对点,也可以用 LoRaWAN 接入公网。
三、LoRa 扩频调制三要素
LoRa 调制有三个关键参数,共同决定速率与距离的权衡:
| 参数 | 说明 | 影响 |
|---|---|---|
| 扩频因子 SF | 每个 bit 用多少 chirp 表示(7~12) | SF 越大距离越远、速率越低 |
| 带宽 BW | 调制带宽(125/250/500kHz) | BW 越大速率越高、越耗电 |
| 编码率 CR | 纠错编码率(4/5~4/8) | CR 越高抗干扰越强、速率越低 |
数值演算(LoRa 速率):LoRa 比特率公式:
BitRate = SF × (BW / 2^SF) × (4 / (4 + CR))设 SF=7, BW=125kHz, CR=4/5:
BitRate = 7 × (125000 / 128) × (4/5)
= 7 × 976.56 × 0.8
≈ 5468.75 bps ≈ 5.5 kbps设 SF=12, BW=125kHz, CR=4/5:
BitRate = 12 × (125000 / 4096) × (4/5)
= 12 × 30.52 × 0.8
≈ 293 bps ≈ 0.3 kbps关键理解:SF 从 7 提到 12,速率从 5.5kbps 降到 0.3kbps(差约 18 倍),但距离显著增加。SF 越大越省电(传输更慢但灵敏度更高、穿透更强)。
四、LoRaWAN 网络架构
┌────────┐ LoRa无线 ┌──────┐ TCP/IP ┌──────────────┐
│ 节点 │────────────►│ 网关 │──────────►│ 网络服务器 │
│(传感器) │◄────────────│ │◄──────────│(NS) ─ 应用服务器│
└────────┘ └──────┘ └──────────────┘| 角色 | 说明 |
|---|---|
| 节点(End Device) | 传感器/执行器,LoRa 发射,最省电 |
| 网关(Gateway) | 收节点数据,经 TCP/IP 转发到服务器,不解析业务 |
| 网络服务器(NS) | 数据去重、下发确认、管理节点、接入应用 |
| 应用服务器(AS) | 业务数据处理 |
关键理解:节点不直接连服务器,所有数据先发网关再转发。一个区域可多个网关同时收同一节点数据(冗余),服务器去重。
五、LoRaWAN 工作模式(Class A/B/C)
| 模式 | 上行后下行窗口 | 功耗 | 场景 |
|---|---|---|---|
| Class A | 上行后开 2 个短下行窗口 | 最低 | 传感器上报(默认) |
| Class B | 定期开下行窗口(时隙) | 中 | 需服务器定时下发 |
| Class C | 一直开下行窗口 | 最高 | 需服务器随时下发 |
Class A 时序(最常用):
节点: ┌─上行(TX)─┐ ┌RX1┐ ┌RX2┐
└──────────┘ └───┘ └───┘
│←1s→│← RX1 窗口 →│←RX2→│
下行数据只能在 RX1/RX2 窗口下发关键理解:Class A 下服务器不能随时下发,只能在节点上行后的两个下行窗口发。对"需服务器实时下发"的应用要用 Class B/C 或靠节点定时上报。
六、ADR(自适应数据速率)
ADR(Adaptive Data Rate)由网络服务器根据节点信号自动调整 SF/BW/TX 功率:
- 信号好(RSSI/SNR 高)→ 降 SF、升速率、降功率 → 省电;
- 信号差 → 升 SF、降速率、升功率 → 保通信。
节点信号强 → NS 下发: 用 SF7、低功率 (更省电)
节点信号弱 → NS 下发: 用 SF12、高功率 (更远)关键理解:移动节点不要开 ADR(信号快速变化,ADR 跟不上反而丢包);固定节点建议开 ADR 以省电。
七、LoRaWAN 激活方式
| 方式 | 说明 | 适用 |
|---|---|---|
| OTAA(空中激活) | 入网时做 Join 流程,动态协商会话密钥 | 推荐、安全 |
| ABP(激活入网) | 预置会话密钥,直接发数据 | 快速、固定场景 |
OTAA 入网流程:
节点 服务器
发 Join-request ──────►
◄── Join-accept(含会话密钥)
入网成功,后续用会话密钥加解密通信八、具体例子
8.1 例 1:LoRa 点对点通信
/* 节点 A:发送温度数据 */
lora_config(SF=10, BW=125kHz, CR=4/5, freq=470MHz);
uint8_t data[] = {temp_high, temp_low}; // 温度
lora_send(data, 2);
/* 节点 B:接收 */
lora_config(SF=10, BW=125kHz, CR=4/5, freq=470MHz);
lora_receive(rx_buf, &len); // 收数据关键理解:点对点时收发双方的 SF/BW/CR/频率必须完全一致。
8.2 例 2:LoRaWAN 节点上报(OTAA)
/* 节点:OTAA 入网后周期上报 */
lora_join_otaa(appEUI, devEUI, appKey); // 入网
while (1) {
lora_send_unconfirmed(port=1, temp_data, len); // 上行(Class A)
// 服务器可在 RX1/RX2 窗口下发
lora_wait_rx_window(); // 等待下行窗口
sleep(send_interval); // 睡眠省电
}8.3 例 3:根据距离选 SF
距离近(<2km): SF7 (高速,省电)
距离中(2-5km): SF9
距离远(5-12km): SF12 (低速,超远)九、LoRa vs NB-IoT 对比
| 维度 | LoRa | NB-IoT |
|---|---|---|
| 组网 | 自建网关/私网 | 运营商蜂窝网络 |
| 频段 | 免授权(如470/868/915MHz) | 运营商授权频段 |
| 覆盖 | 十几 km(需网关) | 运营商网络覆盖 |
| 速率 | 0.3~50 kbps | 200 kbps 左右 |
| 延迟 | 低(Class A) | 较高(寻呼) |
| 功耗 | 极低 | 较低 |
| 成本 | 无流量费、自建 | 需 SIM/流量费 |
| 场景 | 私有/园区/农业 | 公网海量连接 |
十、常见坑与排查
| 问题 | 可能原因 | 排查 |
|---|---|---|
| 通信距离短 | SF 太小、天线差 | 加大 SF、查天线 |
| 节点收不到下行 | 未开 RX 窗口、Class A 限制 | 确认 RX1/RX2 时序 |
| 移动节点丢包 | 开 ADR 导致跟丢 | 移动节点关 ADR |
| 入网失败 | OTAA 密钥错 | 核对 AppKey/DevEUI |
| 速率过慢 | SF 太大 | 信号好时用低 SF/开 ADR |
| 频段不合规 | 使用了未授权频率 | 用当地合法频段(如中国470MHz) |