首页 > 学院 > 开发设计 > 正文

11 单播初体验

2019-11-08 03:20:02
字体:
来源:转载
供稿:网友

1、刚开始,我们确实需要借助官方模板,添加简单的代码,做出通信基本收发实验,建立感性的认识。

2、然后,在官方代码基本实验基础上,了解相关的概念,掌握通信过程中原理,结合自己的理解,自己动手做一个个性化实验,验证我们的理解。

单播

在Zigbee网络里,模块之间要进行通信,发射模块非常明确知道接收模块的网络地址,以这个地址发送数据给接收模块,叫单播。

Zigbee模块的地址特点:

模块在入网的时候,父节点随机分配网络地址给子节点。但是协调器模块在网络里的地址永远是0x0000.

在同一个工程里面通过选项卡控制不同的文件的编译细节!复制SimonAPP.c文件作为Enddevice.c文件,然后选择不同选项卡,通过文件的option设置,利用Exclude from build选项设置某个文件在某个选项卡下是否参与编译!!!

发送单个字符

发送模块—终端节点

在Enddevice.c文件里的SimonApp_MY_EVT事件处理中按钮1 按下的相关处理代码:

if ( events & SimonApp_MY_EVT ) { if(0==P1_1) {//按钮3按下 LS164_BYTE(3); char theMessageData[] ={8}; SimonApp_DstAddr.addrMode = (afAddrMode_t)Addr16Bit; SimonApp_DstAddr.addr.shortAddr = 0x0000; // Take the first endpoint, Can be changed to search through endpoints SimonApp_DstAddr.endPoint =SimonApp_ENDPOINT ; AF_DataRequest( &SimonApp_DstAddr, &SimonApp_epDesc, SimonApp_CLUSTERID, 1,//(byte)osal_strlen( theMessageData ) + 1, (byte *)&theMessageData, &SimonApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ); P1SEL &=0Xfe;// 翻转LED P1DIR |=0X01; P1_0 ^=1; } if(0==P2_0) {//按钮4按下 LS164_BYTE(4); } if(0==P0_5) {//按钮5按下 LS164_BYTE(5); } return (events ^ SimonApp_MY_EVT); }

接收模块—协调器

接收的大概过程是,当终端模块发送数据时候,协调器模块底层任务拿到这个无线数据,给我们应用层任务发送一个AF_INCOMING_MSG_CMD在消息处理里,我们把有用数据拿出来在数码管上显示。

SimonAPP.c里面:

void SimonApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ){ switch ( pkt->clusterId ) { case SimonApp_CLUSTERID: // "the" message#if defined( LCD_SUPPORTED ) HalLcdWriteScreen( (char*)pkt->cmd.Data, "rcvd" );#elif defined( WIN32 ) WPRINTSTR( pkt->cmd.Data );#endif LS164_BYTE(pkt->cmd.Data[0]); break; }}

发送字符串

发送模块

在Enddevice.c文件里的SimonApp_MY_EVT事件处理中按钮1 按下的相关处理代码:

if ( events & SimonApp_MY_EVT ) { if(0==P1_1) {//按钮3按下 LS164_BYTE(3); char theMessageData[] ="Hello Simon"; SimonApp_DstAddr.addrMode = (afAddrMode_t)Addr16Bit; SimonApp_DstAddr.addr.shortAddr = 0x0000; // Take the first endpoint, Can be changed to search through endpoints SimonApp_DstAddr.endPoint =SimonApp_ENDPOINT ; AF_DataRequest( &SimonApp_DstAddr, &SimonApp_epDesc, SimonApp_CLUSTERID, (byte)osal_strlen( theMessageData ) + 1, (byte *)&theMessageData, &SimonApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ); P1SEL &=0Xfe;// 翻转LED P1DIR |=0X01; P1_0 ^=1; } if(0==P2_0) {//按钮4按下 LS164_BYTE(4); } if(0==P0_5) {//按钮5按下 LS164_BYTE(5); } return (events ^ SimonApp_MY_EVT); }

接收模块

1.因为要接收字符串,移植串口模块化文件,添加UART.C UART.h头文件到 工程源文件目录!!!

2.在ZMain.c文件的main 靠近模块void InitUart();初始化串口!!!

3.取消TI默认对串口的配置,在main函数找到 HalDriverInit函数,通过该函数修该宏定义: 把宏#define HAL_UART FALSE

4.在ZMain,c添加UART.h头文件初始化算完成了

5.在SimonApp_MessageMSGCB函数中添加: Uart_Send_String(pkt->cmd.Data,pkt->cmd.DataLength); 记得在SDApp.c文件添加UART.h头文件

这里写图片描述


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表