Zigbee协议栈网络管理主要是对新入网节点设备的管理。对于CC2530芯片而言,每颗芯片在出厂的时候都拥有一个全球唯一的32位MAC地址,当节点设备接入网络时都将获得由当前网络中的协调器分配的16位短地址,协调器的默认短地址为0x0000,通常网络是通过短地址来管理节点设备的。
- 实验目的
路由器和终端设备发送自己定义的设备号给协调器,协调器通过接收到的设备号来普安段设备类型,并获取设备的短地址通过串口打印出来。
2.消息发送函数(采用点播方式)
void SampleApp_SendPointToPointMessage()
{
uint8 device;//设备类型变量
if(SampleApp_NwkState== DEV_ROUTER)
device=0x01;//路由器设备号为1
else if(SampleApp_NwkState== DEV_END_DEVICE)
device=0x02;//终端设备号为2
else
device=0x03;//表示出错
if(AF_DataRequest(&SampleApp_PointToPoint_DstAddr,
&SampleApp_epDesc,
SAMPLEAPP_POINTTOPOINT_CLUSTERID,
1,
&device,//发送设备编号
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS) == afStatus_SUCCESS)
{
}
else
{
// Error occurred in request to send.
}
}
3.接收设备编号,获取设备短地址
首先在接收函数void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
的开头添加一个临时变量temp用于存储节点设备的短地址,添加一个ASCII码转换数组,用于节点设备短地址的分解:
uint16 temp;//接收节点设备的短地址
uint8 hex2asc[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};//十六进制转ASCII码
然后在点播ID(SAMPLEAPP_POINTTOPOINT_CLUSTERID)下面实现设备短地址的接收、分解和打印:
case SAMPLEAPP_POINTTOPOINT_CLUSTERID:
temp=pkt->srcAddr.addr.shortAddr;//读取数据包的16位短地址
if(pkt->cmd.Data[0]==1)//Router
HalUARTWrite(0,"Router short address:0x",23);
if(pkt->cmd.Data[0]==2)//EndDevice
HalUARTWrite(0,"EndDevice short address:0x",26);
//分解节点设备短地址并打印
HalUARTWrite(0,&hex2asc[temp/4096],1);
HalUARTWrite(0,&hex2asc[temp%4096/256],1);
HalUARTWrite(0,&hex2asc[temp%256/16],1);
HalUARTWrite(0,&hex2asc[temp%16],1);
HalUARTWrite(0,"\n",1);//换行
break;
4.下载程序并测试
将修改后的程序分别以协调器、路由器、终端的方式下载到 3 个 或以上的节点设备,协调器通过串口连接到 PC 机。