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 设备角色选择实战建议

我个人的习惯是:先画网络拓扑图,再定角色。给你几个原则:

  1. 常电设备优先做路由器:只要设备插着电,就别让它闲着。多一个路由器,网络就多一条路。
  2. 电池设备必须做终端:别想着让电池设备当路由器,那是在烧钱。
  3. 协调器放在网络中心:物理位置居中,信号覆盖均匀。我见过有人把协调器放角落,结果边缘设备死活连不上。
  4. 路由器数量要够:一个路由器最多带 20-30 个终端设备(具体看芯片和协议栈配置)。超过这个数,网络性能会断崖式下跌。

注意:ZigBee 3.0 协议栈里,协调器和路由器在功能上几乎一样,除了协调器负责建网。但实际项目中,我建议把协调器当成“只建网、不转发”的节点,避免它负载过高导致网络不稳定。

4.7 设备角色与网络拓扑的关系

三种角色组合起来,可以形成三种网络拓扑:

  • 星型:1 个协调器 + N 个终端设备。简单,但覆盖范围小。
  • 树型:协调器下挂路由器,路由器再挂终端。层次分明,但单点故障风险高。
  • 网状:路由器之间任意互联。可靠性最高,但路由开销也最大。

我做过一个农业大棚项目,用了网状拓扑。结果路由器之间互相发现,路由表越来越大,内存差点爆了。后来我限制了路由器的邻居数量,才稳定下来。你想想看,网状不是万能的,得根据硬件资源来。

ZigBee 设备角色与网络拓扑关系图 ZigBee 设备角色与网络拓扑关系 协调器 路由器 终端设备 协调器 PAN ID: 0x0001 路由器 1 短地址: 0x0001 路由器 2 短地址: 0x0002 终端 1 温度传感器 终端 2 湿度传感器 终端 3 光照传感器 说明:协调器建网后,路由器之间可形成网状连接(虚线),终端设备只与父节点通信 终端设备休眠时,数据由父节点缓存,醒来后轮询获取

4.8 角色切换的注意事项

有些协议栈支持设备角色在线切换,但我劝你别轻易用。原因有三:

  • 地址重新分配:切换角色后,短地址可能变,所有依赖这个地址的应用都得改。
  • 路由表重建:路由器变终端,邻居节点的路由表全失效,网络风暴风险高。
  • 功耗突变:终端变路由器,功耗从微安级跳到毫安级,电池供电的设备直接废了。

我曾经踩过的坑:在一个智能照明项目里,我让一个终端设备在检测到光线不足时“临时升级”为路由器,想增强信号。结果它一升级,电池电压瞬间掉到 2.0V,系统复位。从那以后,我再也不在产品里做动态角色切换了。

好了,三种角色的定位和功能就讲到这里。记住一句话:协调器建网,路由器传网,终端设备用网。角色定好了,后面的组网和调优才能顺风顺水。