做物联网和智能家居的朋友对ZigBee肯定不陌生,小米、绿米那些传感器和开关基本都是ZigBee协议的。跟WiFi和蓝牙比,ZigBee最大的特点就是低功耗、自组网、支持mesh网络,特别适合那种需要长期待机的电池供电传感器。今天就从拓扑结构、设备角色、实际搭建到常见问题,完整聊一遍ZigBee组网。
先说说ZigBee的三种网络拓扑。第一种是星型拓扑,所有终端设备都直接跟协调器通信,最简单但覆盖范围有限,协调器挂了整个网络就废了。第二种是树型拓扑,协调器下面挂路由器,路由器下面再挂终端设备或者其他路由器,层层级联,覆盖范围大一些,但数据转发路径是固定的,某一级断了下面的节点就都掉线。第三种是mesh网状拓扑,任何两个路由器之间只要有信号就能直接通信,自动选择最优路径转发数据包,某条路径断了会自动绕路,可靠性最高,也是实际应用中最常用的拓扑结构。
一个完整的ZigBee网络里有三种设备角色。第一个是协调器(Coordinator),每个网络里只能有一个,负责建网、分配网络地址、管理节点加入和退出,一般就是那个插电的网关设备。协调器启动时会扫描周围的2.4GHz信道,选一个信号最干净的信道,然后广播一个信标帧宣布网络建立,同时设定一个PAN ID(网络标识符)。第二个是路由器(Router),既能收发自己的数据,又能帮其他节点转发数据,相当于网络里的"中继站"。路由器需要持续供电,不能休眠,可以挂多个终端设备,也可以跟其他路由器互连形成mesh。第三个是终端设备(End Device),只能收发自己的数据,不能帮别人转发,功耗最低,可以用电池供电,大部分时间处于休眠状态,定时唤醒上报数据或者接收指令。
硬件选型方面,常用的ZigBee芯片有TI的CC2530(最经典,网上资料最多,8051内核,片上Flash从16KB到256KB不同型号)、CC2650/CC2652R(ARM Cortex-M3内核,性能更强,支持多协议),还有Silicon Labs的EFR32系列(低功耗做得特别好)。开发板推荐用TI的CC2530DK或者CC2650 LaunchPad,或者国内厂家做的ZigBee模块(比如TI Z-Stack协议栈的模块,淘宝上几十块钱一个),直接用串口AT指令配置就能工作,不用自己从零开发协议栈。
实际组网的步骤大概是这样的。第一步,烧录固件。协调器节点烧"Coordinator"固件,路由器节点烧"Router"固件,终端节点烧"End Device"固件。TI的Z-Stack协议栈有现成的例子工程,直接编译烧录就行。第二步,启动协调器,协调器上电后自动建网,选定信道和PAN ID,进入等待节点加入的状态。第三步,给路由器烧录完固件上电,路由器会扫描周围的ZigBee网络,发现协调器后自动请求加入,协调器分配一个16位网络地址给它,路由器就正式入网了。第四步,终端设备上电后也会扫描网络,选择信号最好的协调器或路由器作为"父节点"加入,获得网络地址。第五步,当网络里的路由器越来越多,就形成了一张mesh网,数据包可以通过多跳方式在节点之间传输,比如终端A的数据可以经过路由器B、路由器C、路由器D三跳到达协调器。
组网过程中有几个参数可以配置。信道(Channel):ZigBee在2.4GHz频段有11到26个可选信道,选的时候最好用频谱仪或者类似WiFi Analyzer的工具扫一下周围信号,选一个干扰最小的。PAN ID:网络标识符,范围0x0000到0xFFFF,0xFFFF表示任何PAN ID都可以加入,实际部署时建议设一个固定值防止误连。发射功率:一般默认0dBm(1mW),空旷环境下覆盖几十米没问题,如果需要更远的距离可以调大发射功率,但功耗会上去。
几个常见的组网问题提前说一下。第一个是信道冲突,2.4GHz频段WiFi、蓝牙、ZigBee共用,如果家里WiFi设备多或者周围有其他ZigBee网络,可能会互相干扰。解决办法是把ZigBee网关放在离WiFi路由器远一点的地方,或者手动切换到一个干净的信道。第二个是电池寿命,终端节点用电池供电时,要合理设置休眠唤醒周期,唤醒越频繁耗电越快,一般传感器节点设置成30秒到5分钟唤醒一次上报数据就够了,用两节五号电池能跑一两年。第三个是穿墙能力,ZigBee的穿墙效果比WiFi好一点但也有限,一堵承重墙信号衰减一半以上,大面积户型或者有遮挡的场景需要多布几个路由器节点来中继。第四个是设备数量,理论上一个协调器能接65000多个节点,但实际家用网关一般也就支持几十个到上百个,别塞太多,节点太多网络延迟会变大甚至不稳定。
开发和调试方面,推荐用TI的SmartRF Studio和Packet Sniffer工具,前者可以配置芯片参数、测试射频性能,后者可以抓空中的ZigBee数据包分析通信流程,调试组网问题时特别有用。如果不想碰底层代码,也可以用现成的ZigBee模块配合串口AT指令来做应用开发,很多厂家的模块支持自定义Profile和Cluster,通过串口就能完成数据采集和上报的功能,适合快速原型验证。
上一篇:ATmega128单片机入门:8位AVR旗舰芯片的开发实战
下一篇:没有了