zoukankan      html  css  js  c++  java
  • 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 等读取出来。或者自行设定预定义节点编号进行网络管理

  • 相关阅读:
    游标cursor
    SQL: EXISTS
    LeetCode Reverse Integer
    LeetCode Same Tree
    LeetCode Maximum Depth of Binary Tree
    LeetCode 3Sum Closest
    LeetCode Linked List Cycle
    LeetCode Best Time to Buy and Sell Stock II
    LeetCode Balanced Binary Tree
    LeetCode Validate Binary Search Tree
  • 原文地址:https://www.cnblogs.com/tianxxl/p/10244785.html
Copyright © 2011-2022 走看看