zoukankan      html  css  js  c++  java
  • 「ZigBee模块」zigbee协议栈网络管理


    Zigbee协议栈网络管理

    一、补充基础知识

      每个cc2530芯片出厂时候都有一个全球唯一的32MAC地址,当设备连入网络的时候,每个设备都能获得由协调器分配的16位短地址,协调器默认地址0x0000,很多时候网络就是通过短地址进行管理。

     

    二、实验现象

      路由器、设备终端发送自己定义的设备号给协调器,协调器通过接收到的设备号判断设备类型,并且获取设备的短地址,通过串口打印出来。

     

    三、实验步骤

    1. 串口初始化

     

    图1

      先在SampleApp.c添加串口通信的头文件。(如图1)

    #include “MT_UART.h”

      然后在初始化函数中添加串口初始化函数。(如图2

      MT_UartInit();
    
      MT_UartRegisterTaskID(task_id);

     

    图2

      在MT_UartInit();处右键找到该函数的定义。(如图3)

     

    图3

      注意其中的波特率和流控,右键查看它们的定义,并修改参数。波特率设置115200,流控参数改成FALSE(如图4)

     

    图4

    1. 该实验是基于点播方式的,故配置点播的环境。

      在SampleApp.c中新定义一个afAddrType_t型变量Point_To_Point_DstAddr,如图5

     

    图5

      在初始化函数SampleApp_Init()中配置它的参数。(如图6

     

    图6

    1. SampleApp.c下新建一个自己的点播发送函数,代码如下:
     1 void SampleApp_SendPointToPointMessage(void)
     2 
     3 {
     4 
     5   uint8 device;
     6 
     7   //设备类型号在SampleApp_NwkState中查看
     8 
     9   if(SampleApp_NwkState == DEV_ROUTER)
    10 
    11     device = 0x01; //路由器
    12 
    13   else if(SampleApp_NwkState == DEV_END_DEVICE)
    14 
    15     device = 0x02; //终端
    16 
    17   else
    18 
    19     device = 0x03; //出错
    20 
    21   
    22 
    23   if ( AF_DataRequest( &Point_To_Point_DstAddr, &SampleApp_epDesc,
    24 
    25                        SAMPLEAPP_POINT_TO_POINT_CLUSTERID,
    26 
    27                        1,
    28 
    29                        &device,
    30 
    31                        &SampleApp_TransID,
    32 
    33                        AF_DISCV_ROUTE,
    34 
    35                        AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
    36 
    37   {
    38 
    39   }
    40 
    41   else
    42 
    43   {
    44 
    45     // Error occurred in request to send.
    46 
    47   }
    48 
    49 }
    SampleApp_SendPointToPointMessage

      该函数功能是读取本设备信息并发送出去。其中参数SAMPLEAPP_POINT_TO_POINT_CLUSTERID需要在SampleApp.h文件下自行定义。(如图7

     

    图7

      把该函数在文件开头进行声明。(如图8)

     

    图8

      在SampleApp.c中函数SampleApp_ProcessEvent()下将原周期性发送函数注释掉并添加该函数。(如图9

     

    图9

    1. SampleApp_ProcessEvent()函数中找到调用的函数SampleApp_MessageMSGCB(),查看其定义,找到该函数,对其进行修改。代码如下:
     1 void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
     2 
     3 {
     4 
     5   uint16 flashTime, temp;
     6 
     7   uint8 num[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
     8 
     9   temp = pkt->srcAddr.addr.shortAddr;
    10 
    11    
    12 
    13   switch ( pkt->clusterId )
    14 
    15   {
    16 
    17    
    18 
    19    case SAMPLEAPP_POINT_TO_POINT_CLUSTERID:
    20 
    21      //发送设备的短地址在pkt--srcAddr--addr--shortAddr
    22 
    23      if(pkt->cmd.Data[0] == 1)
    24 
    25        HalUARTWrite(0, "Router shortAddr:0x", 19);
    26 
    27      if(pkt->cmd.Data[0] == 2)
    28 
    29        HalUARTWrite(0, "End Device shortAddr:0x", 23);
    30 
    31      if(pkt->cmd.Data[0] == 3)
    32 
    33        HalUARTWrite(0, "Error shortAddr:0x", 18);
    34 
    35      
    36 
    37      HalUARTWrite(0, &num[temp/4096], 1);
    38 
    39      HalUARTWrite(0, &num[temp%4096/256], 1);
    40 
    41      HalUARTWrite(0, &num[temp%256/16], 1);
    42 
    43      HalUARTWrite(0, &num[temp%16], 1);
    44 
    45      HalUARTWrite(0, "
    ", 1);
    46 
    47      break;
    48 
    49     
    50 
    51    case SAMPLEAPP_PERIODIC_CLUSTERID:
    52 
    53       break;
    54 
    55  
    56 
    57     case SAMPLEAPP_FLASH_CLUSTERID:
    58 
    59       flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] );
    60 
    61       HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) );
    62 
    63       break;
    64 
    65   }
    66 
    67 }
    SampleApp_MessageMSGCB

      注意发送设备的短地址信息在pkt--srcAddr--addr--shortAddr中找到。具体各参数的定义自行查看。

      因为协调器不用发送数据,在SampleApp_ProcessEvent()函数中删除对协调器周期性发送的初始化。(如图10

     

    图10

    四、实验结果

      分别以协调器、路由器、终端方式下载程序到设备中,协调器的串口通信信息显示如图11

     

    图11

    五、实验流程图

     

    12

  • 相关阅读:
    hadoop搭建好,启动服务后,无法从web界面访问50070
    CentOS7设置静态IP
    Hadoop完全分布式环境搭建(四)——基于Ubuntu16.04安装和配置Hadoop大数据环境
    搭建大数据hadoop完全分布式环境遇到的坑
    我搭建大数据Hadoop完全分布式环境遇到的坑---hadoop: command not found
    Hadoop完全分别式环境搭建
    Hadoop完全分布式环境搭建(二)——基于Ubuntu16.04设置免密登录
    学生身体体质管理信息系统
    生活细笔——(摘自一心理)
    Javaweb课后习题——设计表单,制作读者选购图书的界面,当读者选中一本图书后,单击“确定”按钮,永“jsp:forward page=”语句将页面跳转到介绍该图书信息页面。
  • 原文地址:https://www.cnblogs.com/Donut/p/4147685.html
Copyright © 2011-2022 走看看