ZigBee无线数据传输

  本次实验实现终端节点将数据0123456789通过无线发送到协调器,协调器通过串口发送给PC上位机显示出来,此实验是基于SampleApp工程进行的。
  打开SampleApp.c文件,搜索找到函数void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ),在case SAMPLEAPP_PERIODIC_CLUSTERID:下面加入HalUARTWrite(0, "I get data\n", 11);
  选择CoodinatorEB,下载到开发板1(作为协调器串口跟电脑连接)。
  选择EndDeviceEB,下载到开发板2(作为终端设备无线发送数据给协调器)。

发送部分

  发送部分(可以将这部分内容理解成是发送终端需要执行的):
  1. 登记事件,设置编号、发送时间等。打开SampleApp.c文件,找到SampleApp事件处理函数uint16 SampleApp_ProcessEvent(uint8 task_id, uint16 events),找到函数中下面的代码:

/* Received whenever the device changes state in the network */
case ZDO_STATE_CHANGE: /* 当网络状态改变时,如从未连上状态到连上网络状态 */
    SampleApp_NwkState = ( lustered_t ) ( MSGpkt->hdr.status );
    /* 协调器、路由器或者终端都执行 */
    if ( ( SampleApp_NwkState == DEV_ZB_COORD ) || ( SampleApp_NwkState == DEV_ROUTER ) || ( SampleApp_NwkState == DEV_END_DEVICE ) ) {
   
        /* Start sending the periodic message in a regular interval. */
        osal_start_timerEx ( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT );
    } else {
   
        /* Device is no longer in the network */
    }

    break;

7行是代码的关键部分,函数的这三个参数决定了周期性发送数据的命脉。分别查看它们的定义:

  • SampleApp_TaskID是任务ID,函数开头定义了SampleApp_TaskID = task_id;,也就是SampleApp初始化的任务ID号。
  • SAMPLEAPP_SEND_PERIODIC_MSG_EVT的解释是Application Events (OSAL) - These are bit weighted definitions.,定义为#define SAMPLEAPP_SEND_PERIODIC_MSG_EVT 0x0001,同一个任务下可以有多个事件,这个是事件的号码。我们可以定义自己的事件,但是编号不能重复,而且事件号码16位必须只占1位,所以只能定义16个事件。
  • SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT的解释是Send Message Timeout Every 5 seconds,定义为#define SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT 5000,即事件重复执行的时间。这里以毫秒为单位,所以是5s,也就是实验为什么隔约5s收到数据的原因,这里可以改成你需要发送数据的时间间隔。

  登记好事件后,看第二行代码可以知道,如果网络一直处于连接状态,就不会再次进入这个函数了,所以这段代码相当于初始化,只执行1次。
  2. 设置发送内容,自动周期性地发送:在同一个函数下面可以找到如下代码:

/* Send a message out -- This event is generated by a timer (setup in SampleApp_Init()). */
if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT ) 
  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值