ZigBee组网学习笔记(五)--无线数据传输
2014-12-03 20:53
423 查看
终端节点将数据 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;
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;
相关文章推荐
- ZigBee组网学习笔记(二)--信号传输质量检测
- ZigBee组网学习笔记(一)无线点灯
- 以XML格式传输数据 (1)--Ajax学习笔记
- [TCP IP详解:学习笔记]数据传输
- 【DWR】学习笔记(一):基本配置&&前后台的数据传输与处理
- 摄像头驱动之实现数据传输5_调试_学习笔记
- gstreamer学习笔记:通过gst-launch工具抓取播放的音频数据并通过upd传输
- [WCF 学习笔记] 8. 数据传输
- ZigBee组网学习笔记(八)--温湿度传感器
- 网络编程学习笔记-网络中数据传输过程的分析
- 摄像头驱动之实现数据传输4_URB_学习笔记
- Zigbee 学习计划——第5天——无线传输质量检测
- ZigBee组网学习笔记(六)--网络通讯(广播)
- USB学习笔记连载(二十一):CY7C68013A进行数据传输(一)
- 以XML格式传输数据 (2)--Ajax学习笔记
- 数据的网络传输学习笔记
- ZigBee组网学习笔记(六)--网络通讯(点播)
- ZigBee组网学习笔记(六)--网络通讯(组播)
- 摄像头驱动之实现数据传输1_框架_学习笔记
- 5.7_Android Training 学习笔记_ 使用 Volley 执行网络数据传输