Zigbee 协议栈网络管理

ZigBee 协议栈网络管理  主要是对新加入的设备节点的设备管理。每个 CC2530 芯片出厂时候都有一个全球唯一的 32 MAC地址。当时当设备连入网络中的时候,每个设备都能获得由协调器分配的16 位短地址,协调器默认地址(0x0000)。很多时候网络就是通过短地址进行管理。

 修改点播信息发送函数

void SampleApp_SendPointToPointMessage( void )
{
  uint8 device;      //设备类型变量
  if ( SampleApp_NwkState == DEV_ROUTER )
      device=0x01;  //编号1表示路由器  
  else if (SampleApp_NwkState == DEV_END_DEVICE)
      device=0x02;  //编号2表示终端  
  else
      device=0x03;  //编号3表示出错
  
  if ( AF_DataRequest( &Point_To_Point_DstAddr,  //发送设备类型编号
                       &SampleApp_epDesc,
                       SAMPLEAPP_POINT_TO_POINT_CLUSTERID,
                       1,
                       &device,
                       &SampleApp_TransID,
                       AF_DISCV_ROUTE,
                       AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
  {
  }
  else
  {
    // Error occurred in request to send.
  }

}

修改完成后系统设备自动检测自己烧写的类型,然后发送对应的编号。路由器编号为 1,终端编号为 2
数据接收方面,我们对接收到的数据进行判断,区分路由器和终端设备。然后在数据包中取出 16 位短地址。通过串口打印出来 。短地址在数据包里的存放位置。依次是 pkt--- srcAddr---shortAddr
接收函数

void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
  uint16 flashTime,temp;  
  
  //16进制转ASCII码表
    uint8 asc_16[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
                     
  switch ( pkt->clusterId )
  {
    case SAMPLEAPP_POINT_TO_POINT_CLUSTERID:  
    
      temp=pkt->srcAddr.addr.shortAddr; //读出数据包的16位短地址
      
     if( pkt->cmd.Data[0]==1 ) //路由器        
       HalUARTWrite(0,"ROUTER ShortAddr:0x",19); //提示接收到数据
     if( pkt->cmd.Data[0]==2 ) //终端
       HalUARTWrite(0,"ENDDEVICE ShortAddr:0x",22); //提示接收到数据
      
      /****将短地址分解,ASC码打印*****/
      HalUARTWrite(0,&asc_16[temp/4096],1);
      HalUARTWrite(0,&asc_16[temp%4096/256],1);
      HalUARTWrite(0,&asc_16[temp%256/16],1);
      HalUARTWrite(0,&asc_16[temp%16],1);      
      HalUARTWrite(0,"
",1);               // 回车换行

      break;

    case SAMPLEAPP_FLASH_CLUSTERID:
      flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] );
      HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) );
      break;
  }
}

将修改后的程序分别以协调器、路由器、终端的方式下载到 3 个 或以上设备,协调器连接到 PC 机。上电后每个设备往协调器发送自身编号,协调器通过串口打印出来。

可以利用同样的方法可以将 MAC 地址、 PANID 等读取出来。或者自行设定预定义节点编号进行网络管理