4. ZigBee 设备类型:协调器、路由器、终端设备的角色与功能
ZigBee 网络里,不是所有节点都干一样的活。说白了,它分三种角色:协调器、路由器、终端设备。我刚入行时,以为它们只是名字不同,代码随便改改就能互换。结果项目一跑,网络直接崩了。嗯,这里面的门道,咱们得捋清楚。
4.1 三种角色的核心定位
你可以把 ZigBee 网络想象成一个公司:
- 协调器 = 创始人 + CEO。它负责成立公司(建网),分配工位(地址),但自己不干具体活。
- 路由器 = 部门经理。它帮员工传话(转发数据),也允许新员工加入(允许入网)。
- 终端设备 = 一线员工。只干活,不传话,大部分时间在摸鱼(休眠省电)。
我做过一个智能家居项目,客户非要让终端设备当路由器用,说“省一个芯片钱”。结果网络延迟从 50ms 飙到 2 秒,最后全换了。你想想看,角色定错了,后面全是坑。
4.2 协调器(Coordinator)—— 网络的起点
每个 ZigBee 网络有且只有一个协调器。它负责:
- 信道扫描与选择:上电后扫描所有可用信道,挑一个干扰最小的。
- PAN ID 分配:生成一个 16 位的网络标识符,避免跟邻居网络冲突。
- 短地址分配:给自己分配 0x0000,然后给第一个加入的路由器或终端分配地址。
- 信标帧发送(非信标模式可选):宣告网络存在。
关键约束:协调器一旦选定,不能断电重启后换角色。我见过有人把协调器做成可移动设备,结果搬个家,整个网络重建,所有设备重新入网——用户差点退货。
4.3 路由器(Router)—— 网络的骨架
路由器是 ZigBee 网络的“中继站”。它必须一直在线,不能休眠。它的核心职责:
- 数据转发:收到数据包,查路由表,转发给下一跳。
- 路由发现:当目标地址不在路由表里时,发起 AODV 路由请求。
- 允许入网:新设备可以通过路由器加入网络。
- 地址分配:如果配置了分布式地址分配机制,路由器可以给子设备分配短地址。
我记得有个工厂项目,路由器放在金属机柜旁边,信号衰减严重。一开始没在意,结果数据包重传率高达 30%。后来我建议加了两台路由器做冗余路径,问题才解决。说白了,路由器的位置决定了网络的可靠性。
4.4 终端设备(End Device)—— 省电才是王道
终端设备是 ZigBee 网络里最“懒”的角色。它不参与路由转发,大部分时间在休眠。它的特点:
- 低功耗:两节 AA 电池用一年是常态。
- 只能与父节点通信:父节点可以是协调器或路由器。
- 数据主动上报:醒来后发数据,然后继续睡。
- 轮询父节点:定期醒来问父节点“有没有我的消息”。
避坑指南:我曾经把终端设备的轮询间隔设成 100ms,结果电池三天就耗光了。后来改成 5 秒,电池撑了一年。轮询间隔和实时性之间,你得自己权衡。
4.5 三种角色的对比表格
| 特性 | 协调器 | 路由器 | 终端设备 |
|---|---|---|---|
| 网络数量 | 1 个/网络 | 多个 | 多个 |
| 必须在线 | 是 | 是 | 否(可休眠) |
| 数据转发 | 支持 | 支持 | 不支持 |
| 允许入网 | 支持 | 支持 | 不支持 |
| 典型功耗 | 高(常电) | 中(常电) | 极低(电池) |
| 典型应用 | 网关、集中器 | 中继器、智能插座 | 传感器、遥控器 |
4.6 设备角色选择实战建议
我个人的习惯是:先画网络拓扑图,再定角色。给你几个原则:
- 常电设备优先做路由器:只要设备插着电,就别让它闲着。多一个路由器,网络就多一条路。
- 电池设备必须做终端:别想着让电池设备当路由器,那是在烧钱。
- 协调器放在网络中心:物理位置居中,信号覆盖均匀。我见过有人把协调器放角落,结果边缘设备死活连不上。
- 路由器数量要够:一个路由器最多带 20-30 个终端设备(具体看芯片和协议栈配置)。超过这个数,网络性能会断崖式下跌。
注意:ZigBee 3.0 协议栈里,协调器和路由器在功能上几乎一样,除了协调器负责建网。但实际项目中,我建议把协调器当成“只建网、不转发”的节点,避免它负载过高导致网络不稳定。
4.7 设备角色与网络拓扑的关系
三种角色组合起来,可以形成三种网络拓扑:
- 星型:1 个协调器 + N 个终端设备。简单,但覆盖范围小。
- 树型:协调器下挂路由器,路由器再挂终端。层次分明,但单点故障风险高。
- 网状:路由器之间任意互联。可靠性最高,但路由开销也最大。
我做过一个农业大棚项目,用了网状拓扑。结果路由器之间互相发现,路由表越来越大,内存差点爆了。后来我限制了路由器的邻居数量,才稳定下来。你想想看,网状不是万能的,得根据硬件资源来。
4.8 角色切换的注意事项
有些协议栈支持设备角色在线切换,但我劝你别轻易用。原因有三:
- 地址重新分配:切换角色后,短地址可能变,所有依赖这个地址的应用都得改。
- 路由表重建:路由器变终端,邻居节点的路由表全失效,网络风暴风险高。
- 功耗突变:终端变路由器,功耗从微安级跳到毫安级,电池供电的设备直接废了。
我曾经踩过的坑:在一个智能照明项目里,我让一个终端设备在检测到光线不足时“临时升级”为路由器,想增强信号。结果它一升级,电池电压瞬间掉到 2.0V,系统复位。从那以后,我再也不在产品里做动态角色切换了。
好了,三种角色的定位和功能就讲到这里。记住一句话:协调器建网,路由器传网,终端设备用网。角色定好了,后面的组网和调优才能顺风顺水。