zigbee路灯无线通讯机制
wang@20160630
前言
目前路灯上通讯主要有电力载波和无线通讯;各有利弊,众说纷纭;本文不对两种技术进行比较,也不讨论哪种好,毕竟同种通讯模块,有的开发出来稳定,有的就不稳定,究其原因有很多,所以也不好做其讨论;本文主要是记述了我如何通过zigbee无线来为路灯做数据的传输;采用的何种通讯技术;为了必免时间久了,忘记了,因此有必要把它记录下来,方便自己记忆,也可给别人做参考。
内容
本文主要内容分四点讲述:1、Zigbee角色定义;2、采用的通讯机制及实现功能;3、路由表定义及作用;4、通讯协义定义和解释;
1、Zigbee角色定义
现状分析:路灯灯杆与灯杆之间都是比较远,而且有点直线分布,不像是网状分布。Zigbee的角色有coorder、router、device。考虑到路灯灯杆分布的现状、一个集中器要带载很多个路灯终端设备,及为了节省资源和以后安装方便,本系统只采用两种角色:coorder和router,每个单灯控制器都是router,可做中转;一个coorder最多可带250个router。
- 采用的通讯机制及实现功能
本系统主要采用泛洪消息机制向本区域所管辖的网络广播,router设备收到包后判断是否是自已的数据包,如何是则接收;如果不是,则先判断是否可转发,若转发次数未到则转发,并且只能转发一次;router设备需维护一张路由表记录以前转发过的包,并在通讯协议上增加两个字段,记录转发次数和发送序列号;每一个router设备维护一个发送序列号,每发送一个包,序列号加1,并把该序列号加到数据包的包头信息中;其它设备节点收到一个数据包后依靠查找路由表中的序列号rxsn和uid来判断自己是否已接过该包,是否是自己的包,或是否需要转发该包。
主要功能:实现coord和route数据透传功能,coord通过串口接收特定的数据,再通过无线传输,把数据传到指定的route设备中,route设备再把信息通过串口显示出来;route设备也可以传送相关的数据到coord设备;每个route设备都具有上、下行数据转发功能,当收到的数据通过mac地址检测到的不是属于它的数据,它需要再次转发出去,并相应的更改转发次数,同一数据包只能被转发一次,数据包总的转发次数不超过100次;
示意图
- 路由表定义及作用
typedef struct _dev_mac_t
{
u32 srcmac;//源mac
u8 rxsn; //接收系列号
u8 rssi; //存储 rssi值
}dev_mac_t;
路由表数据采用动态分配,源mac为唯一标识,接收RF数据时,通过查找srcmac判断是否增加或修改相应数据;首次接收到数据时,会增加一笔记录,保存srcmac、rxsn和rssi,;当再次接收到源mac发来的数据时,如果当前数据包的rxsn与路由表记录的rxsn相同,则不接收,以必免重复接收,如果不是只需要更新rxsn和rssi值;
4、通讯协义定义和解释
总体包 **格式:**包长PHR(1)+MAC(7)+自定义数据(N)+MFR(2)
**详细包格式:**包长PHR(1)+MAC{帧类型fcf (2)+系列号seq(1)+目标panid(2)+目标短地址(2)}+数据{包类型(1)+源地址(4)+目标地址(4)+发送序列号(1)+转发次数(1)+终端MCU数据包(N)}+MFR(2)
系统基于MAC层的自定义的zigbee协议数据包,采用芯片的mac地址的后48位来做唯一的地址并称为uid;短地址中设coorder地址为0;coorder设备专门为集中控制器用的;
coorder-->router:则源地址为0,目标地址为router的uid;
Router-->coorder:则源地址为router的uid,目标地址为0;