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

来源:互联网 发布:魔方矩阵有什么用 编辑:程序博客网 时间:2024/05/17 01:15

终端节点在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
  1. if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT )  
  2. {  
  3.   // Send the periodic message  
  4.   SampleApp_SendPeriodicMessage();  
  5.   
  6.   // Setup to send message again in normal period (+ a little jitter)  
  7.   osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT,  
  8.       (SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0x00FF)) );  
  9.   
  10.   // return unprocessed events  
  11.   return (events ^ SAMPLEAPP_SEND_PERIODIC_MSG_EVT);  
  12. }  

 

 

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

[cpp] view plain copy
  1. void SampleApp_SendPeriodicMessage( void )   
  2. {     
  3.     
  4. //采集信息process  
  5.   
  6.   if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,  
  7.                        SAMPLEAPP_PERIODIC_CLUSTERID,  
  8.                        length,  
  9.                        array[],  
  10.                        &SampleApp_TransID,  
  11.                        AF_DISCV_ROUTE,  
  12.                        AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )  
  13.   {  
  14.   }  
  15.   else  
  16.   {  
  17.     // Error occurred in request to send.  
  18.   }  
  19. }  

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

 

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

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

[cpp] view plain copy
  1. void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )  
  2. {  
  3.   
  4.   switch ( pkt->clusterId ) //判断标识  
  5.   {  
  6.     case SAMPLEAPP_PERIODIC_CLUSTERID: //与上面的那个发送标识对应  
  7.   
  8.     if(pkt->cmd.Data[0]==0)  //判断发来的命令  
  9.     {  
  10.          LED=0;    //是发给我的,灯泡亮  
  11.     }  
  12.       break;  
  13.         

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

 

 

 此时已经可以开发基本的小项目了,比如说多个传感器采集农田的信息,发送给协调器,协调器通过网络把数据传到你的网页上,在线观看。还可以把命令反馈回去,控制终端结点上的继电器等等改善环境。

原创粉丝点击