欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Zigbee协议栈网络管理

程序员文章站 2022-07-13 17:21:19
...

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 机。