4、无线通信技术选型:LoRa vs Zigbee vs BLE

做温室监测,第一个要拍板的事就是:用哪种无线技术?

说实话,这个问题我当年也纠结了很久。温室里环境复杂,有金属骨架、有水汽、有植物遮挡。选错了,后期改都改不了。我个人习惯是先把几个主流方案拉出来遛一遛。

4.1 三大技术对比:LoRa、Zigbee、BLE

先看一张对比表,心里有个底:

参数 LoRa Zigbee BLE
工作频段 Sub-1GHz(如433/868/915MHz) 2.4GHz 2.4GHz
通信距离(空旷) 2-15km 10-100m 10-50m
穿墙能力 一般
峰值速率 0.3-50kbps 250kbps 1-2Mbps
节点功耗(休眠) ~1μA ~3μA ~1μA
网络拓扑 星型 Mesh 星型/广播
典型成本(模块) 15-30元 10-20元 5-15元

你想想看,温室大棚少说几百平米,大的上千平米。用BLE?手机连蓝牙都断断续续的。Zigbee虽然能Mesh组网,但每个节点都要参与路由转发,功耗就上去了。

我的结论:温室监测,LoRa是首选。距离远、穿墙好、功耗低。说白了,它就是为这种场景设计的。

4.2 LoRa模块选型:为什么是SX1278?

LoRa芯片方案其实不多。主流就两家:Semtech的SX127x系列和SX126x系列。我为什么推荐SX1278?

原因有三:

  • 成熟稳定:SX1278是市面上最成熟的LoRa芯片。资料多、坑少。我在项目中用过不下500片,基本没出过硬件问题。
  • 灵敏度高:接收灵敏度可达-148dBm。什么概念?比Zigbee好20dB以上。温室里那些传感器藏在角落、被叶子挡住,照样能收到。
  • 性价比:模块价格已经降到15元左右。相比SX126x便宜一半,性能完全够用。

选型小技巧:买模块时注意看天线接口。我建议选IPEX座子的,方便外接天线。温室里金属结构多,板载陶瓷天线效果会打折扣。

4.3 通信协议栈选择:从裸驱动到LoRaWAN

芯片选好了,接下来是软件层面的选择。这里有几个层次:

4.3.1 裸驱动 + 自定义协议

最底层的方式。直接用SPI操作SX1278寄存器,自己定义帧格式、重传机制、地址分配。

我曾经在一个小项目中这么干过。优点是灵活、代码量小。缺点是...太累了。你要处理丢包、冲突、重传,还要考虑不同节点的时序同步。搞了两个月,最后发现还不如用现成的。

// 裸驱动示例:发送一帧数据
void LoRa_Send(uint8_t *data, uint8_t len) {
    LoRa_WriteReg(REG_FIFO, data, len);
    LoRa_WriteReg(REG_OPMODE, MODE_TX);
    while((LoRa_ReadReg(REG_IRQFLAGS) & IRQ_TX_DONE) == 0);
    LoRa_WriteReg(REG_IRQFLAGS, IRQ_TX_DONE);
}

4.3.2 使用AT指令模块

很多LoRa模块(如E32系列)内置了协议栈,你只需要通过串口发AT指令就行。

这种方式上手快,适合快速验证。但有个问题:你没法精细控制功耗。模块内部怎么休眠、怎么唤醒,你管不了。对于电池供电的节点来说,这很要命。

4.3.3 LoRaWAN协议栈

这是最推荐的方式。LoRaWAN定义了完整的网络架构:终端节点、网关、网络服务器。

它的好处很明显:

  • 标准化:不同厂家的设备可以互通
  • 省心:自适应速率、确认重传、信道管理都帮你做好了
  • 低功耗:Class A模式下,节点大部分时间在休眠,电池能用好几年

注意:LoRaWAN需要网关。如果温室里只有几个节点,专门配个网关可能不划算。这种情况下,可以考虑用LoRa私有协议,或者用ESP32+SX1278做简易网关。

4.4 我的最终方案

说了这么多,直接给结论吧:

  • 芯片:SX1278,频率选433MHz(国内免授权频段,穿透性好)
  • 协议:LoRaWAN Class A,使用开源库如Arduino-LMIC或MCCI LoRaWAN
  • 模块:选带IPEX座子的成品模块,比如Ra-01或E22-400M系列

嗯,这里要注意一点:433MHz天线不能随便买。温室里湿度大,天线接头容易生锈。我建议用镀金IPEX座子,外加防水胶带缠一下。别问我怎么知道的...拆了三次网关才发现的。

下一章我们聊聊传感器选型。温度湿度光照CO2,到底哪些必须测?哪些可以省?到时候细说。