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 等读取出来。或者自行设定预定义节点编号进行网络管理

  • 相关阅读:
    arduino入门学习实现语音控制LED灯
    c# 实现串口编程-操作LED屏幕
    腾讯地图 获取各种情况的总距离
    js播放wav文件,兼容主流浏览器,兼容多浏览器
    工厂方法模式
    依赖倒转模式
    设计模式——开放封闭原则
    设计模式——单一职责原则
    策略模式
    简单工厂模式
  • 原文地址:https://www.cnblogs.com/tianxxl/p/10244785.html
Copyright © 2011-2022 走看看