您的位置:首页 > 其它

浅析ZigBee的应用层开发之终端结点

2017-08-16 16:51 225 查看
终端节点在zigbee的开发中,主要有两个功能

<1>将采集到的信息发送给协调器(coordinator)

<2>接受协调器发送过来的命令,并执行

 

以sample app为例,简单的广播方式传送信息为例

当运行程序,操作系统启动,注册好应用层ID后,开始任务轮询。

 

<1>

在函数 uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )中会完成应用层调用函数的所有处理函数

并且设置广播传送的时间间隔

#define SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT   2000  //两秒广播一次

 

 

 

并通过函数启动循环广播

[cpp] view
plain copy

if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT )  

{  

  // Send the periodic message  

  SampleApp_SendPeriodicMessage();  

  

  // Setup to send message again in normal period (+ a little jitter)  

  osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT,  

      (SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0x00FF)) );  

  

  // return unprocessed events  

  return (events ^ SAMPLEAPP_SEND_PERIODIC_MSG_EVT);  

}  

 

 

因此可以以相同的方式,给终端route开启循环采集数据

[cpp] view
plain copy

void SampleApp_SendPeriodicMessage( void )   

{     

    

//采集信息process  

  

  if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,  

                       SAMPLEAPP_PERIODIC_CLUSTERID,  

                       length,  

                       array[],  

                       &SampleApp_TransID,  

                       AF_DISCV_ROUTE,  

                       AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )  

  {  

  }  

  else  

  {  

    // Error occurred in request to send.  

  }  

}  

此时协调器则会收到终端采集到的信息,2秒更新一次

 

<2>当协调器通过广播的形式发送来命令时,终端只要判定是不是给自己的命令,是则执行,否则跳过

接受到信息则会调用该处理函数

[cpp] view
plain copy

void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )  

{  

  

  switch ( pkt->clusterId ) //判断标识  

  {  

    case SAMPLEAPP_PERIODIC_CLUSTERID: //与上面的那个发送标识对应  

  

    if(pkt->cmd.Data[0]==0)  //判断发来的命令  

    {  

         LED=0;    //是发给我的,灯泡亮  

    }  

      break;  

        

......................................................

 

 

 此时已经可以开发基本的小项目了,比如说多个传感器采集农田的信息,发送给协调器,协调器通过网络把数据传到你的网页上,在线观看。还可以把命令反馈回去,控制终端结点上的继电器等等改善环境。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: