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

来源:互联网 发布:淘宝鹊桥到期 编辑:程序博客网 时间:2024/05/16 17:06

有关Zigbee知识见此链接

 

终端节点在zigbee的开发中,主要有两个功能

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

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

 

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

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

 

<1>

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

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

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

 

 

 

并通过函数启动循环广播

  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开启循环采集数据

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

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

void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ){  switch ( pkt->clusterId ) //判断标识  {    case SAMPLEAPP_PERIODIC_CLUSTERID: //与上面的那个发送标识对应    if(pkt->cmd.Data[0]==0)  //判断发来的命令    {         LED=0;    //是发给我的,灯泡亮    }      break;      

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

 

 

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

 

 

 


 

31 0