第四部分 提高篇-第6章 CC2530网络拓扑

实验设备
硬件:PC 机一台ZB2530;(底板、核心板、仿真器、USB 线) 一套
软件:win7 系统,IAR 8.20 集成开发环境

在讲解实验之前,先让大家看看网路拓扑的相关结构体(在AF.h文件里)。
这里写图片描述
该类型是一个枚举类型:
当 addrMode= Addr16Bit 时,对应点播方式;
当 addrMode= AddrGroup 时,对应组播方式;
当 addrMode= AddrBroadcast 时,对应广播方式。
Zigbee 的通讯方式主要有三种点播、组播、广播。点播,顾名思义就是点对点通信,也就是 2 个设备之间的通讯,不容许有第三个设备收到信息;组播,就是把网络中的节点分组,每一个组员发出的信息只有相同组号的组员才能收到。广播,最广泛的也就是 1 个设备上发出的信息所有设备都能接收到。这也是 ZigBee 通信的基本方式。

6.1广播

广播就是任何一个节点设备发出广播数据,网络中的任何设备都能收到。其实在在“基于协议栈的无线控制LED”实验里,我们已经实现过周期性广播,那还是我们开始协议栈的第一个实验,只是让大家明白协议栈的流程,并没有深入分析,在本讲,编者将为大家进一步分析协议栈。那么,什么是广播呢?所谓的广播,就是1个设备上发出的信息所有 Zigbee设备都能接收到。这也是最简单的一种拓扑,所以TI为用户写好了周期性广播的代码。

此实验是基于“协议栈中串口实验”的,只需在原工程上修改即可。周期性广播的实现步骤如下:

 初始化部分
(1) 首先,我们打开 SampleApp.eww,在 SampleApp.c 里找到图所示红色框内的代码,它就是广播通讯定义。
这里写图片描述
(2) 然后,我们在 SampleApp.c 里的 SampleApp_Init()函数里找到下面的代码。这几行代码就是广播(SampleApp_Periodic_DstAddr)参数的配置,是 TI 为客户完成的。
这里写图片描述
0xFFFF 是广播地址。 协议栈广播地址主要有 3 种类型:
具体的定义如下:
0xFFFF——数据包将被传送到网络上的所有设备,包括睡眠中的设备。对于睡眠中的设备,数据包将被保留在其父亲节点直到查询到它,或者消息超时。
0xFFFD——数据包将被传送到网络上的所有在空闲时
打开接收的设备(RXONWHENIDLE),也就是说,除了睡眠中的所有设备。
0xFFFC——数据包发送给所有的路由器,包括协调器。
(3) 接着,进行任务初始化(登记任务号、设置编号、发送时间)。
这里写图片描述

 发送部分
(4) 接着,在数据发送函数里我们将发送数据的指针指向 data[10]数组,这样就完成设置发送内容。我们可以看到接收方用于判别的簇(ID),它在 SampleApp.h 定义。
这里写图片描述
这里写图片描述
(5)接着,我们在 SampleApp_ProcessEvent()函数里调用周期性数据发送函数,让程序执行数据发送任务。
这里写图片描述
 接收部分
(6) 最后,我们通过修改 SampleApp_MessageMSGCB 函数,完成广播数据的接收。
这里写图片描述
至此,广播通讯讲解完毕。
 实验现象
将修改后的程序分别以协调器、终端的方式下载到 3 个设备,可以看到各个设备都在广播发送信息,同时也接收广播信息。

这里写图片描述

图6-1 终端接收信息

6.2组播

组播描述的就是网络中所有节点设备被分组后组内相互通信的过程。确定通信对象的就是节点的组号。下面我们在 SampleApp 例程完通过简单的修改完成组播实验。
 初始化部分
(1)在 SampleApp.c 里找到下图所示的代码,它们分别是协议栈原有广播和组播的通信定义。我们按照这个格式,定义组播通信

这里写图片描述

图6-2组播定义

(2)保存LED的状态
这里写图片描述
(3)组播参数配置
这里写图片描述
注意:由于用到SAMPLEAPP_FLASH_GROUP,所以我们在 SampleApp.h 里定义:
这里写图片描述
这里写图片描述
(4)SampleApp_ProcessEven 函数修改如下代码:
这里写图片描述
注意:注释 osal _start_timerEx 这行代码,是由于此实验没有周期性事件。
 发送部分
(5) 修改按键处理函数 SampleApp_HandleKeys。
这里写图片描述
(6) 修改组播组网发送数据 SampleApp_SendFlashMessage 函数
这里写图片描述
该函数需要首先声明。
这里写图片描述
 接收部分
(7) 修改接收数据SampleApp_MessageMSGCB 函数。
这里写图片描述
 实验现象
打开工程程序后分别选择EndDeviceEB-Pro 和 CoordinatorEB-Pro 编译后下载程序到两个Zigbee 模块按终端 S1 键时,协调器 Led2 状态改变,同时终端自身的 Led2 状态也改变,提示发送成功。

6.3点播

点播描述的就是网络中 2 个节点相互通信的过程。确定通信对象的就是节点的 16bit短地址。
 初始化部分
(1)找到 afAddrType_t SampleApp_Periodic_DstAddr;代码下面增加一行代码如下:

这里写图片描述

图6-3

(2)搜索 afAddrGroup,在它下增加对 SampleApp_P2P_DstAddr 配置,可直接复制广播的配置修改即可,增加后如下:
这里写图片描述

图6-4

 发送部分
(3)修改SampleApp_ProcessEvent函数,执行发送任务。
这里写图片描述
(4)增加发送函数
这里写图片描述

注意:
1》SampleApp_P2P_DstAddr 是我们在本文件开头自己定义的点播通信;
2》SAMPLEAPP_P2P_CLUSTERID是簇(ID), 用于接收方判别。 在 SampleApp.h中定义。
这里写图片描述
3》SampleApp_Send_P2P_Message此函数是新增的的,需要添加声明。

这里写图片描述

图6-5

(5)任务初始化(登记任务号、设置编号、发送时间)。协调器不需要周期发数据,注释协调器的周期事件.
这里写图片描述
 接收部分
(6)修改SampleApp_MessageMSGCB函数。
这里写图片描述

 实验现象
将程序分别下载到协调器、终端,连接串口。如果 有3 个模块,可将其中一个做路由器,上电可以看到只有协调器在一个周期内收到信息。 也就是说路由器和终端均与地址为 0x00(协调器)的设备通信,不与其他设备通信。确定通信对象的就是节点的短地址,实现点对点传输。

这里写图片描述

图6-6

本章参考代码

点击进入

猜你喜欢

转载自blog.csdn.net/u013162035/article/details/80979977
今日推荐