ZigBee组网学习笔记(五)--无线数据传输

终端节点将数据 0123456789 无线发送到协调器, 协调器通过串口发送给 PC 上位机显示出来。 

1、 选择 CoodinatorEB, 下载到开发板 1;(作为协调器串口跟电脑连接)


2、 选择 EndDeviceEB, 下载到开发板 2;(作为终端设备无线发送数据给协调器)


workspace 目录下比较重要的两个文件夹,  Zmain 和 App。
这里我们主要用到 App,这也是用户自己添加自己代码的地方。


串口初始化参考协议栈串口实验


发送部分:
1、 登记事件,设置编号、发送时间等

SampleApp.c

uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )

case ZDO_STATE_CHANGE://当网络状态改变,如从未连到网络

osal_start_timerEx( 

//任务 ID,函数开头定义了 SampleApp_TaskID = task_id;也就是 SampleApp 初始化的任务 ID 号。

SampleApp_TaskID,

//#define SAMPLEAPP_SEND_PERIODIC_MSG_EVT 0x0001同一个任务下可以有多个事件,这个是事件的号码。我们可以定义自己的事件,但是编号不能重复。而且事件号码 16 位必须只占 1 位,所以只能定义 16 个事件。

SAMPLEAPP_SEND_PERIODIC_MSG_EVT,

#define SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT 5000 

事件重复执行的时间。这里以毫秒为单位,所以是 5s.

SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT );


2.设置发送内容。自动周期性地发送.

SampleApp.c

uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )

///#define SAMPLEAPP_SEND_PERIODIC_MSG_EVT       0x0001

if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT )
// Send the periodic message
SampleApp_SendPeriodicMessage();//周期性发送函数

uint8 data[10]={'0','1','2','3','4','5','6','7','8','9'};//自定义数据
if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,
                       SAMPLEAPP_PERIODIC_CLUSTERID,
                       10, //字节数
                       data,//指针头

                       &SampleApp_TransID,
                       AF_DISCV_ROUTE,
                       AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )


接收部分: 
接收部分需要完成 2 个任务:
a) 读取接收到的数据;

SampleApp.c

uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )

 // Received when a messages is received (OTA) for this endpoint

case AF_INCOMING_MSG_CMD:
        SampleApp_MessageMSGCB( MSGpkt );//
将接收到的数据包进行处理的函数


case SAMPLEAPP_PERIODIC_CLUSTERID:
HalUARTWrite(0,"I get data\n",11);//用于提示有数据
      HalUARTWrite(0, &pkt->cmd.Data[0],10);//打印收到数据
      HalUARTWrite(0,"\n",1);  //回车换行,便于观察
  
所有的数据和信息都在函数传入来的 afIncomingMSGPacket_t *pkt 里面,进入
afIncomingMSGPacket_t 的定义,它是一个结构体

 typedef struct
{
//信息
.........
.........
//数据
afMSGCommandFormat_t   cmd;  /* Application Data */
} afIncomingMSGPacket_t; 

 又是一个结构体,继续进入。
// Generalized MSG Command Format
typedef struct
{
byte TransSeqNumber;
uint16 DataLength; // Number of bytes in TransData
byte *Data;
} afMSGCommandFormat_t;


b) 把数据通过串口发送给 PC 机。

void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
uint16 flashTime;
switch ( pkt->clusterId )
case SAMPLEAPP_PERIODIC_CLUSTERID:
HalUARTWrite(0,"I get data\n",11);//用于提示有数据
HalUARTWrite(0, &pkt->cmd.Data[0],10); //打印收到数据
HalUARTWrite(0,"\n",1);  //回车换行,便于观察
break;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃果冻不吐果冻皮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值