Zigbee协议栈网络管理

Zigbee协议栈网络管理主要是对新入网节点设备的管理。对于CC2530芯片而言,每颗芯片在出厂的时候都拥有一个全球唯一的32位MAC地址,当节点设备接入网络时都将获得由当前网络中的协调器分配的16位短地址,协调器的默认短地址为0x0000,通常网络是通过短地址来管理节点设备的。

  1. 实验目的
      路由器和终端设备发送自己定义的设备号给协调器,协调器通过接收到的设备号来普安段设备类型,并获取设备的短地址通过串口打印出来。
    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 机。

你可能感兴趣的:(Zigbee协议栈网络管理)