JIAJIEKEJI
ZigBee 无线传感器网络入门
佳杰科技
Dan
2012
H T T P : / / J I E L O V E D A N . T A O B A O . C O M /
http://jielovedan.taobao.com/
佳杰科技
目录
ZigBee 无线传感器网络入门 .............................................................................................. 3
前言.......................................................................................................................... 3
5.1
Zstack 协议栈 .................................................................................................. 4
5.1.1 什么是 ZigBee 协议栈 ........................................................................... 4
5.1.2 如何使用 ZigBee 协议栈 ........................................................................ 4
5.1.3
ZigBee 协议栈的安装、编译与下载 ....................................................... 5
5.2 一个简单的无线传输组网实验......................................................................... 6
5.3.1 建立一个全新的 Zstack 工程.................................................................. 7
5.3.2 协调器编程 ........................................................................................ 11
5.3.3 终端节点编程..................................................................................... 23
5.3.4 测试步骤与效果 ................................................................................. 32
5.3.5
ZigBee 数据传输实验剖析 ................................................................... 32
5.3.6 数据发送............................................................................................ 32
5.3.7 数据接收............................................................................................ 34
5.3.8
Zigbee 数据包的捕获 ......................................................................... 35
5.3.9
ZigBee 数据包的结构 .......................................................................... 37
5.3.10 本实验数据分析 ................................................................................. 38
5.3 数据收发无线组网实验 ................................................................................. 40
5.4.1 首先提出要求..................................................................................... 40
5.4.2 操作系统编程及分析 .......................................................................... 41
5.4.3 公共头文件的编程及分析 ................................................................... 43
5.4.4 协调器的编程及分析 .......................................................................... 44
5.4.5 终端的编程及分析.............................................................................. 51
5.3.11 测试步骤与效果 ................................................................................. 54
5.4 无线开关灯实验组网实现.............................................................................. 56
5.4.1 首先提出设计要求.............................................................................. 56
5.4.2 建立一个全新的工程的方法................................................................ 57
5.4.3 操作系统编程及分析 .......................................................................... 59
5.4.4 公共头文件的编程及分析 ................................................................... 61
5.4.5 协调器的编程及分析 .......................................................................... 62
5.4.6 终端的编程与分析.............................................................................. 67
http://jielovedan.taobao.com/
佳杰科技
ZigBee 无线传感器网络入门
前言
本章教程讲授思路是,从实战出发,提出设计要求,然后开始协调器,终端的编程。一
步一步的完成要求,并对代码进行分析。我们将 会对用到的函数加以详细的解释说明,配
套开发板可以直接下载完成的组网代码进行结果的测试。
ZigBee 无线传感器网络涉及电子、电路、通信、射频等多学科的知识,这对于
入门级学习来说,无形中增加了学习难度,很多读者看协议、射频电路……学了半年甚至更
长的时间,但是连基本的点对点通信都无法实现,更别说根据对 ZigBee 协议的理解来实现
正常的无线网络部署工作了。
基于此原因,本书推荐另一种学习思路,不是将学习重点放在复杂的 ZigBee
协议、射频、天线等知识,而是直接进行 ZigBee 无线网络点对点通信的学习,基本
思路是:从发送端发送一个数据,接收端接收到数据后校验收到的数据是否正确,
并给出相应的指示。很简单的功能,但是这里涉及以下问题:
数据在协议栈里面是如何流动的;
如何调用 ZigBee 协议栈提供的发送函数;
如何使用 ZigBee 协议栈进行数据的接收;
如何理解 ZigBee 协议栈;
如何利用 ZigBee 协议栈提供的函数来实现基本的无线传感器网络应用程序开发;
系统硬件对 ZigBee 协议都提供了哪些支持。
ZigBee 协议栈是采用分层的思想,各层都具有哪些功能;
一个看似简单得不能再简单的实验引起了读者对于 ZigBee 无线传感器网络技
术方方面面的思考,也正是由于上述思考,笔者才鼓起勇气带领读者去探究 ZigBee
无线网络的技术内幕,触摸那神圣的无线通信世界,感知那“传说中”的无线传感
器网络,读者的 ZigBee 无线传感器网络开发之旅由此开始……
本章只是带领读者从功能上理解协议栈,并没有给出具体的概念性的知识点,
展示了 ZigBee 无线网络中的数据传输过程,并没有对 ZigBee。协议栈进行深入的讨
论,在本书第 6 章中会对 ZigBee。协议栈的构成及工作原理进行讨论,本章的主要目的是使
读者对 ZigBee 协议栈开发有个感性的认识。
注意,本章用到的实验,都有完成好了的程序代码在本章文件夹里可以找到。大家可以
先下载程序,观察执行效果,然后再开始分析,一步一步看程序代码是如何实现的。本章所
涉及的程序都是组网完成,不牵涉路由器,这会在后面提到。
在开始实验之前,有几点设计准备在前面提到过,这里 Zstack 安装的路径为
D:\ZStack-CC2530-2.3.0-1.4.0 安装的版本为 2.3.0-1.4.0,不同版本的协议栈会有所差异。
IAR 开发软件采用的是 IAR Assembler for 8051 8.10.3 (8.10.3.40338),版本信息在 IAR 软件中
的 Help 栏的 About 栏的 Product info 中查看最顶部的编号。本实验的程序代码在文字提及的
地方采用方框包围,提及的分析代码采用编号标注。
程序代码
1 分析代码
http://jielovedan.taobao.com/
佳杰科技
5.1 Zstack 协议栈
进行 zigBee。无线传感器网络的开发,首先面临的问题是什么?是 ZigBee 协议
栈,以及由此引发的如下问题:
ZigBee 协议栈和 zigBee 协议是什么关系;
如何使用 ZigBee 协议栈进行应用程序的开发。
下面对上述问题进行逐一讲解。
5.1.1 什么是 ZigBee 协议栈
协议定义的是一系列的通信标准,通信双方需要共同按照这一标准进正常的数
据收发;协议找是协议的具体实现形式,通俗的理解为用代码实现的函数库,以便于开发人
员调用。
ZigBee 的协议分为两部分,IEEE 802.15.4 定义了物理层和 MAC 层技术规范,ZigBee 联
盟定义了网络层·安全层和应用层技术规范,ZigBee 协议栈就是将各个层定义的协议都集合
在一起,以函数的形式实现,并给用户提供一些应用层 API,供用户调用。
注意:虽然协议是统一的,但是。的具体实现形式是变化的,即不同厂商提供的协议
钱是有区别的,例如:函数名称和参数列表可能有区别,用户在选择协议找以后,需要学习
具体的例子,查看厂商提供的 Dert10 演示程序、说明文档(通常,实现协议栈的厂商会提供
一些 API 手册供用户查询)来学习各个函数的使用方式,进而快速地使用协议栈进行应用程
序的开发工作。
使用 ZigBee 协议栈进行开发的基木思路可以概括为如下三点:
用户对于 ZigBee 无线网络的开发就简化为应用层的 C 语言程序开发,用户不需要
深入研究复杂的 ZigBee 协议栈;
ZigBee 无线传感器网络中数据采集,只需要用户在应用层加入传感器的读取函数即
可;
如果考虑到节能,可以根据数据采集周期进行定时,定时时间到就唤醒 ZigBee 的
终端节点,终端节点唤醒后,自动采集传感器数据,然后将数据发送给路由器或者
直接发给协调器。
5.1.2 如何使用 ZigBee 协议栈
既然 ZigBee 协议栈已经实现了 ZigBee 协议,那么用户就可以使用协议栈提供的 API 进
行应用程序的开发,在开发过程中完全不必关心 ZigBee 协议的具体实现细节,只需要关心
一个核心的问题:应用程序数据从哪里来到哪里去。
下面举个例子,当用户应用程序需要进行数据通信时,需要按照如下步骤实现:
①调用协议栈提供的组网函数、加入网络函数,实现网络的建立与节点的加入;
②发送设备调用协议栈提供的无线数据发送函数,实现数据的发送;
③接收端调用协议栈提供的无线数据接收函数,实现数据的正确接收。
因此,使用协议栈进行应用程序开发时,开发者不需要关心协议栈是具体怎么实现的(例
如:每个函数是怎么实现的.每条函数代码是什么意思等),只需要知道协议栈提供的函数实
现什么样的功能,会调用相应的函数来实现自己的应用要求即可。
http://jielovedan.taobao.com/
佳杰科技
afStatus_t AF DataRequest(afAddrType_ t *dstAddr,
技巧提示:在 TI 推出的 ZigBee 2007 协议栈(又称作 Z-Stack )中数据发送函数如下:
1.
2. endPointDesc t *srcEP uintl6 cID,
3. uintl6 len,
4. uint8 *buf,
5. uint8 *translD,
6. uint8 options,
7.
用户调用该函数即可实现数据的无线发送,当然,在此函数中有 8 个,用户需要将每个
参数的含义理解以后,才能达到熟练应用该函数进行无线数据通信的目的。
uintB radius)
AF_DataRequest()函数中最核心的两个参数:
3.uint16 1en—一发送数据的长度;
4.uint8 *buf——指向存放发送数据的缓冲区的指针。
至于调用该函数后,如何初始化硬件进行数据发送等工作,用户不需要关心,ZigBee
协议栈己经将所需要的初始化工作初始化了,这就类似于学习 TCP/IP 编程时,用户只需要
调用相应的数据发送、接收函数即可,而不必关心具体的网卡驱动(如 DM9000, CS8900 网卡
是如何接收数据的)的具体实现细节。
5.1.3 ZigBee 协议栈的安装、编译与下载
ZigBee 协议栈具有很多版本,不同厂商提供的 ZigBee 协议栈有一定的区别,本书选用
ZigBee 2007 协议栈 ZStack-CC2530-2.3.0-1.4.0(可以在 TI 的官方网站下载)需要安装以后才
TI 公司推出的 ZigBee 2007 协议栈进行讲解。
能使用,下面讲解安装步骤
从 TI 官方网站下载 ZigBee 2007 协议栈 ZStack-CC2530-2.3.0-1.4.0.exe,双击
ZStack-CC2530-2.3.0-1.4.O.exe,即可进行协议栈的安装,默认是安装到 C 盘根目录下。
在路径 D:\ZStack-CC2530-2.3.0-1.4.0\Projects\zstack\Samples GenericApp\CC2530SB 下找
到 GenericApp.eww,如图 4-1 所示,打开该工程即可。
打开该工程后,可以看到 GenericApp 工程文件布局,如图 4-2 所示。
在图 4-2 所示的文件布局中,左侧有很多文件夹,如 App, HAL, MAC 等,这些文件夹对应
了 ZigBee 协议中不同的层,使用 ZigBee 协议栈进行应用程序的开发,一般只需要修改 App
目录下的文件即可。
http://jielovedan.taobao.com/
佳杰科技
图 4-1 GenericApp.eww 工程路径
选择不同工程
还没有编译前
程序部分 分层
提示:关于协议栈的编译与下载,请读者结合 4.2 节的数据传输实验进行学习,通过具体的
实例来展示协议栈开发的基本流程是笔者推荐的学习方法。
图 4-2 GenericApp 工程文件布局
5.2 一个简单的无线传输组网实验
尽管到此为止,读者对 ZigBee 协议的基本内容都不了解,甚至 ZigB ee 协议栈是什么也
http://jielovedan.taobao.com/
佳杰科技
可能存在诸多的疑问与不解,但是笔者也是从这些“困难”中走出来的,也理解此时读者的心
情,与其阅读那“深奥”的 ZigBee 协议栈,不如通过一个数据传输实验来对 ZigBee 协议以及
ZigBee 协议栈建立一个形象、直观的认识,这将有助于读者对 ZigBee 协议的理解。
数据传输实验的基本功能:两个 ZigBee 节点进行点对点通信,ZigBee 节点 2 发送“LED”
三个字符,ZigBee 节点 1 收到数据后,对接收到的数据进行判断,如果收到的数据是“LED",
则使开发板上的 LED 灯闪烁。数据传输实验原理图如图 4-3 所示。这就是一个简单的无线传
输组网实验。
“LED”
ZigBee 无线网
络
ZigBee 节点
2 终端节点
图 4-3 数据传输原理图
5.3.1 建立一个全新的 Zstack 工程
ZigBee 节点
1 协调器
在 ZigBee 无线传感器网络中有三种设备类型:协调器、路由器和终端节点,设备类型
是由 ZigBee 协议栈不同的编译选项来选择的。
协调器主要负责网络组建、维护、控制终端节点的加入等。路由器主要负责数据包的路
由选择,终端节点负责数据的采集,不具备路由功能。
在本实验中,ZigBee 节点 1 配置为一个协调器,负责 ZieBee 网络的组建,ZieBee 节点 2
配置为一个终端节点,上电后加入 ZigBee 节点 1 建立的网络,然后发送“LED”给节点 1 。
打开 D:\ZStack-CC2530-2.3.0-1.4.0\Projects\zstack\Samples 目录,这里是我们需要建立工
程的地方,在该目录下,以及有了 3 个文件夹,分别是“GenericApp”“SampleApp”“SimpleApp”。
下面介绍如何建立一个新的自己的 Zstack 工程。工程名为 TestA
复制 GenericApp,到本目录下。
将文件夹改名为 TestA
复制粘贴后得到的文件夹
http://jielovedan.taobao.com/
佳杰科技
打开 TestA\Source 路径如下图。
修改这 3 个文件名称,如下图所示。
打开路径 TestA\CC2530DB,将里面的文件改为
用记事本打开这 3 个文件,替换其中的 GenericApp 为 TestA,然后保存。
点击全部替换