第3章:ZigBee技术原理——IEEE 802.15.4、Mesh组网与低功耗机制
ZigBee这名字听起来挺萌的,对吧?其实它背后是一套非常扎实的无线通信体系。我最早接触ZigBee是在一个智能家居项目里,当时客户要求几十个传感器节点要自组网、还要电池供电撑一年。说实话,一开始我也想过用WiFi,但一算功耗就放弃了。ZigBee就是为这种场景量身定做的。
3.1 物理层与MAC层:IEEE 802.15.4标准
ZigBee的底层通信,说白了就是IEEE 802.15.4标准。这个标准定义了物理层和MAC层,ZigBee联盟在它上面定义了网络层和应用层。你想想看,这就像盖房子——802.15.4是地基和框架,ZigBee是里面的水电装修。
3.1.1 物理层特性
802.15.4物理层主要工作在三个频段:
| 频段 | 频率范围 | 信道数 | 数据速率 | 典型应用区域 |
|---|---|---|---|---|
| 2.4 GHz | 2400–2483.5 MHz | 16 | 250 kbps | 全球通用 |
| 868 MHz | 868–868.6 MHz | 1 | 20 kbps | 欧洲 |
| 915 MHz | 902–928 MHz | 10 | 40 kbps | 北美 |
我个人习惯优先选2.4 GHz频段,因为全球通用,芯片选择也多。但要注意,2.4 GHz频段和WiFi、蓝牙挤在一起,干扰是个大问题。我在一个工厂项目里就吃过这个亏——ZigBee网络老是丢包,后来发现是旁边WiFi路由器信道冲突了。
3.1.2 MAC层机制
MAC层用的是CSMA/CA(载波侦听多路访问/冲突避免)。每个节点在发送数据前,先侦听信道是否空闲。如果忙,就随机退避一段时间再试。嗯,这里要注意——ZigBee的MAC层还支持信标使能模式和非信标模式。
- 信标使能模式:协调器定期发送信标帧,同步所有节点。适合低延迟、周期性数据场景。
- 非信标模式:节点随时可以发数据,但需要CSMA/CA竞争信道。适合随机事件上报。
我做过一个环境监测项目,传感器每5分钟上报一次数据,用信标模式就很合适。但如果是安防报警这种突发场景,非信标模式更灵活。
3.2 Mesh组网:自愈与多跳
ZigBee最吸引人的地方就是Mesh组网。说白了,网络里的每个节点都可以转发数据。A节点到C节点如果直接通信距离不够,可以通过B节点跳一下。这就是多跳路由。
Mesh组网的好处是自愈能力。我记得有一次在仓库里做测试,一个路由器节点被叉车撞掉了,网络自动重新路由,数据包绕道走了另一条路径。整个过程我都没干预,这就是Mesh的魅力。
ZigBee的路由协议是AODV(按需距离矢量路由)的简化版。当一个节点要发送数据到目标节点时,它会广播路由请求(RREQ),沿途节点回复路由回复(RREP),建立一条路径。路径建立后,数据就沿着这条路径走。
// 路由请求流程伪代码
1. 源节点广播RREQ
2. 中间节点收到RREQ,检查是否已有到目标的路由
3. 如果没有,继续广播RREQ
4. 目标节点收到RREQ,回复RREP
5. RREP沿原路径返回,建立路由表项
6. 源节点开始发送数据
但Mesh也不是万能的。节点越多,路由开销越大。我曾经在一个200个节点的网络里测试,路由表维护占用了不少带宽。所以Mesh适合中等规模网络(几十到几百个节点),太大就要考虑分层了。
3.3 低功耗机制:让节点活得更久
ZigBee的低功耗设计是它和WiFi最大的区别。终端设备大部分时间都在睡觉,只有需要发送数据时才醒来。这就是所谓的休眠-唤醒机制。
3.3.1 终端设备的休眠模式
终端设备(End Device)是低功耗的主力。它没有路由转发任务,所以可以深度睡眠。我常用的CC2530芯片,在休眠模式下电流可以降到1 µA以下。而发送数据时峰值电流约30 mA,但持续时间只有几毫秒。
你想想看,如果节点每5分钟发一次数据,每次发送耗时10 ms,那么占空比只有:
占空比 = 10 ms / (5 × 60 × 1000 ms) ≈ 0.0033%
平均电流 ≈ 30 mA × 0.0033% + 1 µA × 99.9967% ≈ 1.99 µA
两节AA电池(约2000 mAh)理论上可以用:
2000 mAh / 1.99 µA ≈ 1,005,025 小时 ≈ 114 年
当然这是理论值,实际还要考虑电池自放电、温度影响、偶尔的重传等。但用个两三年完全没问题。
3.3.2 路由器的功耗问题
路由器节点不能休眠,因为它要随时转发数据。所以路由器通常需要市电供电。我见过不少新手把路由器也设计成电池供电,结果没几天就没电了。
但也不是完全没办法。ZigBee Pro协议栈支持“休眠路由器”模式——在低负载时段,路由器可以短暂进入低功耗状态,但必须定期醒来监听网络。这个模式在ZigBee 3.0里也有支持,但实际项目中我很少用,因为会影响网络稳定性。
3.3.3 信标模式与低功耗
信标模式对低功耗也有帮助。协调器定期发送信标帧,终端设备只在信标帧到来前醒来,接收同步信息,然后继续睡。这样终端设备不需要频繁轮询,进一步降低功耗。
信标间隔可以配置,从15.36 ms到251.66秒。间隔越长,功耗越低,但延迟也越大。我在一个农业大棚项目里把信标间隔设为30秒,传感器每30秒上报一次温湿度,功耗和实时性都满意。
| 信标间隔(秒) | 终端设备平均电流 | 适用场景 |
|---|---|---|
| 0.015 | ~5 mA | 高实时性控制 |
| 1 | ~500 µA | 中等实时性监测 |
| 30 | ~50 µA | 周期性数据采集 |
| 251 | ~10 µA | 超低功耗传感器 |
3.4 实际项目中的选型建议
说了这么多,到底什么时候用ZigBee?我个人的经验是:
- 需要Mesh自组网: 节点分布范围广,无法保证每个节点都能直接和中心通信。比如智能楼宇、仓库监控。
- 低功耗要求高: 电池供电,希望用一年以上。比如温湿度传感器、门磁、烟感。
- 节点数量适中: 几十到几百个节点。超过500个节点建议分层或分簇。
- 数据量小: 每次传输几十到几百字节。不适合视频、音频等大数据。