打印
[Zigbee]

CC2530网络拓扑

[复制链接]
845|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gwsan|  楼主 | 2019-8-5 14:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
实验设备
硬件:PC 机一台ZB2530;(底板、核心板、仿真器、USB 线) 一套
软件:win7 系统,IAR 8.20 集成开发环境

在讲解实验之前,先让大家看看网路拓扑的相关结构体(在AF.h文件里)。


该类型是一个枚举类型:
当 addrMode= Addr16Bit 时,对应点播方式;
当 addrMode= AddrGroup 时,对应组播方式;
当 addrMode= AddrBroadcast 时,对应广播方式。
Zigbee 的通讯方式主要有三种点播、组播、广播。点播,顾名思义就是点对点通信,也就是 2 个设备之间的通讯,不容许有第三个设备收到信息;组播,就是把网络中的节点分组,每一个组员发出的信息只有相同组号的组员才能收到。广播,最广泛的也就是 1 个设备上发出的信息所有设备都能接收到。这也是 ZigBee 通信的基本方式。


使用特权

评论回复

相关帖子

沙发
gwsan|  楼主 | 2019-8-5 14:37 | 只看该作者
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——数据包发送给所有的路由器,包括协调器。


使用特权

评论回复
板凳
gwsan|  楼主 | 2019-8-5 14:37 | 只看该作者

(3) 接着,进行任务初始化(登记任务号、设置编号、发送时间)。

        发送部分
(4) 接着,在数据发送函数里我们将发送数据的指针指向 data[10]数组,这样就完成设置发送内容。我们可以看到接收方用于判别的簇(ID),它在 SampleApp.h 定义。


使用特权

评论回复
地板
gwsan|  楼主 | 2019-8-5 14:38 | 只看该作者

(5)接着,我们在 SampleApp_ProcessEvent()函数里调用周期性数据发送函数,让程序执行数据发送任务。

        接收部分
(6) 最后,我们通过修改 SampleApp_MessageMSGCB 函数,完成广播数据的接收。

至此,广播通讯讲解完毕。


使用特权

评论回复
5
gwsan|  楼主 | 2019-8-5 14:38 | 只看该作者

        实验现象
将修改后的程序分别以协调器、终端的方式下载到 3 个设备,可以看到各个设备都在广播发送信息,同时也接收广播信息。

图6-1 终端接收信息

使用特权

评论回复
6
gwsan|  楼主 | 2019-8-5 14:39 | 只看该作者
6.2组播
组播描述的就是网络中所有节点设备被分组后组内相互通信的过程。确定通信对象的就是节点的组号。下面我们在 SampleApp 例程完通过简单的修改完成组播实验。

        初始化部分
(1)在 SampleApp.c 里找到下图所示的代码,它们分别是协议栈原有广播和组播的通信定义。我们按照这个格式,定义组播通信



图6-2组播定义
(2)保存LED的状态


使用特权

评论回复
7
gwsan|  楼主 | 2019-8-5 14:39 | 只看该作者
(3)组播参数配置

注意:由于用到SAMPLEAPP_FLASH_GROUP,所以我们在 SampleApp.h 里定义:


使用特权

评论回复
8
gwsan|  楼主 | 2019-8-5 14:39 | 只看该作者
(4)SampleApp_ProcessEven 函数修改如下代码:

注意:注释 osal _start_timerEx 这行代码,是由于此实验没有周期性事件。

使用特权

评论回复
9
gwsan|  楼主 | 2019-8-5 14:40 | 只看该作者
        发送部分
(5) 修改按键处理函数 SampleApp_HandleKeys。

使用特权

评论回复
10
gwsan|  楼主 | 2019-8-5 14:40 | 只看该作者
(6) 修改组播组网发送数据 SampleApp_SendFlashMessage 函数

该函数需要首先声明。

使用特权

评论回复
11
gwsan|  楼主 | 2019-8-5 14:41 | 只看该作者
        接收部分

(7) 修改接收数据SampleApp_MessageMSGCB 函数。


        实验现象
打开工程程序后分别选择EndDeviceEB-Pro 和 CoordinatorEB-Pro 编译后下载程序到两个Zigbee 模块按终端 S1 键时,协调器 Led2 状态改变,同时终端自身的 Led2 状态也改变,提示发送成功。


使用特权

评论回复
12
gwsan|  楼主 | 2019-8-5 14:41 | 只看该作者
6.3点播

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

图6-3

使用特权

评论回复
13
gwsan|  楼主 | 2019-8-5 14:41 | 只看该作者

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

图6-4

使用特权

评论回复
14
gwsan|  楼主 | 2019-8-5 14:42 | 只看该作者
        发送部分
(3)修改SampleApp_ProcessEvent函数,执行发送任务。

使用特权

评论回复
15
gwsan|  楼主 | 2019-8-5 14:42 | 只看该作者
(4)增加发送函数

使用特权

评论回复
16
gwsan|  楼主 | 2019-8-5 14:42 | 只看该作者
注意:

1》SampleApp_P2P_DstAddr 是我们在本文件开头自己定义的点播通信;
2》SAMPLEAPP_P2P_CLUSTERID是簇(ID), 用于接收方判别。 在 SampleApp.h中定义。


3》SampleApp_Send_P2P_Message此函数是新增的的,需要添加声明。

[color=rgba(0, 0, 0, 0.75)]图6-5



使用特权

评论回复
17
gwsan|  楼主 | 2019-8-5 14:43 | 只看该作者
(5)任务初始化(登记任务号、设置编号、发送时间)。协调器不需要周期发数据,注释协调器的周期事件.

        接收部分
(6)修改SampleApp_MessageMSGCB函数。

使用特权

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



图6-6


使用特权

评论回复
19
phosphate| | 2019-8-6 14:39 | 只看该作者
感谢分享!学习一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

3426

帖子

1

粉丝