什么是 ZigBee 协议栈呢?

它和 ZigBee 协议有什么关系呢?协议是一系列的通信标准通信双方需要共同按照这一标准 进行正常的数据发射和接收。协议栈是协议的具体实现形式,通俗点来理解就是协议栈是协 议和用户之间的一个接口,开发人员通过使用协议栈来使用这个协议的,进而实现无线数据 收发。 图 1 展示了 ZigBee 无线网络协议层的架构图。ZigBee 的协议分为两部分,IEEE 802.15.4 定义了 PHY(物理层)和 MAC(介质访问层)技术规范;ZigBee 联盟定义了 NWK

(网络层)、APS(应用程序支持子层)、APL(应用层)技术规范。ZigBee 协议栈就是将 各个层定义的协议都集合在一直,以函数的形式实现,并给用户提供 API(应用层),用户可 以直接调用。

图 1 ZigBee 无线网络协议层

  1. 如何使用 ZigBee 协议栈

协议栈是协议的实现,可以理解为代码,函数库,供上层应用调用,协议较底下的层与应用是相互独立的。商

业化的协议栈就是给你写好了底层的代码,符合协议标准,提供给你一个功能模块给你调用。你需要关心的就 是你的应用逻辑,数据从哪里到哪里,怎么存储,处理;还有系统里的设备之间的通信顺序什么的,当你的应 用需要数据通信时,调用组网函数给你组建你想要的网络;当你想从一个设备发数据到另一个设备时,调用无 线数据发送函数;当然,接收端就调用接收函数;当你的设备没事干的时候,你就调用睡眠函数;要干活的时 候就调用唤醒函数。所以当你做具体应用时,不需要关心协议栈是怎么写的,里面的每条代码是什么意思。除 非你要做协议研究。每个厂商的协议栈有区别,也就是函数名称和参数可能有区别,这个要看具体的例子、说 明文档。

怎么使用 ZigBee 协议栈?举个例子,用户实现一个简单的无线数据通信时的一般步骤:

1、组网:调用协议栈的组网函数、加入网络函数,实现网络的建立与节点的加入。

2、发送:发送节点调用协议栈的无线数据发送函数,实现无线数据发送。

3、接收:接收节点调用协议栈的无线数据接收函数,实现无线数据接收。 是不是看上去很简单啊,其实协议栈很多都封装好了,下面我们大概看看无线发送函数:

afStatus_t AF_DataRequest( afAddrType_t *dstAddr,endPointDesc_t *srcEP,uint16 cID,

uint16 len,uint8 *buf, uint8 *transID,uint8 options,uint8 radius)

用户调用该函数即可实现数据的无线数据的发送,此函数中有 8 个参数,用户需要将每个参数的含义理解以后, 才能熟练使用该函数进行无线数据通信的目的。现在只讲其中最重要的两个参数,其它参数不需要死记硬背, 以后用多了自然就记住了。

uint16 len, //发送数据的长度;

uint8 *buf, //指向存放发送数据的缓冲区的指针。

至于调用该函数后,如何初始化硬件进行数据发送等工作,用户不需要关心,ZigBee 协议栈己经将所需要的工 作做好了,我们只需要调用相应的 API 函数即可,而不必关心具体实现细节。看起来是不是很简单呢,是不是 有动手试试的冲动。先别急还要先安装 ZigBee 协议栈才能进行开发调试呢,下面就动手安装 ZigBee 协议栈 吧。

2. ZigBee 协议栈的安装、编译与下载

双击..\相关资料与软件\Zigbee 开发软件\ZStack-CC2530-2.5.1a.exe 进行安装,路径你可以选择默认,同样 你也可以选择你想要安装的位置。也许有人就困惑了,装完之后不是应该有个桌面图标的么?其实所谓的安装 协议栈只是把一些文件解压到你安装的目录下。好了,协议栈是安装好了,可是怎么用它呢?装了肯定要用啊 是吧,别急,我们先来看看这个协议栈的目录。

Components,顾名思义这个是放我们的库的文件夹,里面放了一些我们用到的 ZDO,driver,hal,zcl 等库 的代码

Documents,这个不用说大家都知道是放 TI 的开发文档的,里面很多都是讲述协议栈的 API 的有空时可以看 看

Projects,这个文件夹放的是 TI 协议栈的例子程序,一个个例子程序都是以一个个 project 的形式给我们的,

学好这些例子程序里面的一两个,基本你能做事情了。

Tools,这个文件夹是放 TI 的例子程序的一些上位机之类的程序,作为工具使用。 好了,基本明白了基本架构之后,我们以一个简单的实验开始。先掌握一点必要的理论再实验效果比较好。喜 欢看书的人还可以看下面的“ZigBee 理论”掌握更多理论知识,不喜欢看书的朋友可以学完第 5 章后,再看视 频加强理论知识。

3. 协议栈无线收发控制 LED

打开工程: \1. 协议栈工作流程和无线收发控制  LED\ZStack-2.5.1a\Projects\zstack\Samples\SampleApp\CC2530DB\ SampleApp.eww ,从软件开发专业角 度讲建议大家复制工程到非中文目录,因为有些开发环境对中文路径支持的不好,虽然 IAR 支持但在实际工作 中你想别人看到你的工程,认为你很专业就照着上面做吧。有时把文件放的太深,目录太长,打开工程时 IAR 会关闭;只要将工程上移几层即可,用英文路径最专业了。我们演示就不修改,容易引起大家误会;打开工程 如下图:

如果使用 IAR 打开工程停止响应或关闭,说明你路径太长,IAR 不识别,把路径改短或移上几层目录即可解决。

App:应用层目录,这是用户创建各种不同工程的区域,在这个目录中包含了应用层的内容和这 个项目的主要内容。 HAL:硬件层目录,包含有与硬件相关的配置和 驱动及操作函数。

MAC:MAC 层目录,包含了 MAC 层的参数配 置文件及其 MAC 的 LIB 库的函数接口文件。 MT:实现通过串口可控制各层,并与各层进行 直接交互 NWK:网络层目录,包含网络层配置参数文件 网络层库的函数接口文件及 APS 层库的函数接 口。

OSAL:协议栈的操作系统。

Profile: Application framework 应用框架层 目录,包含 AF 层处理函数文件。应用框架层是 应用程序和 APS 层的无线数据接口。 Security:安全层目录,包含安全层处理函数, 比如加密函数等 Services:地址处理函数目录,包括地址模式的 定义及地址处理函数。 Tools:工程配置目录,包括空间划分及 Z-Stack 相关配置信息。

ZDO:ZDO 目录

ZMac:MAC 层目录,包括 MAC 层参数配置 及 MAC 层 LIB 库函数回调处理函数。 ZMain:主函数目录,包括入口函数及硬件配 置文件。

Output:输出文件目录,由 IAR IDE 自动生成。

带协议栈的工程怎么这么多文件夹和文件,都有什么用啊?现阶段大家只要带着这个疑问照着做实验就行了,后

面实验接触多了自然就懂了。

1. 编译协调器的程序,在 Workspace 下拉框中选择“CoordinatorEB”,在工程名上点右键选择”Rebuild All”, 第一次一定要用“Rebuild All”,后面再修改代码只用“Make”即可,没错误提示再下载到开发板当中。尽量教 大家用一些快捷方法。编译结果会有以下警告,警告可忽略的,只要没有错误就可运行的,以下警告是用来生成 量产的文件用的,想消除可看看" 2530\相关资料与软件\IAR 编译 CC2530 生成 HEX 文件.pdf"

2.下载好协调器后,再编译终端设备的程序选择“EndDeviceEB”,把仿真器换到另一块板子上,编译下载即可。

注意:旧版本协议栈显示为 EndDeviceEB-Pro,与 EndDeviceEB 只是显示名称不同,新协议栈取消了-Pro,没 影响。

两个 zigbee 节点都下载好后,分别上电看效果吧。协调器、终端通过底板上的 usb 供电并打开开关,组网成 功 后 D1 灯闪烁。协议栈工作流程分析:

zigbee 工作流程:

下面列出实验中涉及到比较重要的函数进行详解,由于是带协议栈第一个实验,我们对源码也进行注释,方便习惯看源码的同志学习。我建议大家先看 看下面的文章,再阅读一次源码加深印象,后面的例子结构基本相同,所以学好此实验,再做后面的实验就得 心应手了。用户自己添加的应用任务程序在 Zstack 中的调用过程:

main()---> osal_init_system()---> osalInitTasks()---> SampleApp_Init()

实验步骤:

1.选择 CoordinatorEB, 下载到开发板 A;作为协调器

2.选择 EndDeviceEB, 下载到开发板 B;作为终端设备

3.给两块开发板上电,通过观察 D3 来判断组网是否成功,协调器 D3 熄灭说明已建立 zigbee 网络,有终端时可入网;当终端 D3 熄灭时说明连网成功,请观察 Led1 灯的变化。下载好程 序后可以不需要仿真器了,通过底板供电即可。有显示屏的用户可以通过显示屏来观察组网 情况。

ZigBee-Z-Stack协议栈 第一节 无线收发控制LED相关推荐

  1. 【转】深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈

    理解堆与栈 导航 深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈 深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 ...

  2. 第一章 无线收发机射频前端结构

    目录 本章内容 1.1 射频前端功能及性能参数 无线发信机射频前端 功能 无线发信机射频前端 性能参数 无线收信机射频前端 功能 无线收信机射频前端 性能参数 无线收发机射频前端 功能及指标参数 1. ...

  3. STM32-通过串口收发控制LED亮灭(使用USART1 查询法)

    实现的功能 1.电脑发送'ON' 如果已是亮灯状态则返回'the LED has been ON' 如果为熄灭状态则点亮LED并返回'the LED is ON now' 2.电脑发送'OFF' 如果 ...

  4. 第一节 基本数字输出功能LED灯

    I/O端口的原理 单片机端口是标准双向口,可以输出信号也可以输入信号. 上图的A点相当于单片机的I/O口,A可以连接5V或接地,保证了电流可以双向通过. 假设LED正常工作压降(电压差)是1.5V,正 ...

  5. 【转】深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基本工作原理

    栈基本工作原理 导航 深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈 深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第 ...

  6. 无线授时服务器接LED屏,实现ipad远程无线控制led大屏幕分以下几个步骤!

    原标题:实现ipad远程无线控制led大屏幕分以下几个步骤! 不通过电脑有线控制,实现IPAD无线式.移动式.同步无延时控制LED大屏幕(液晶屏拼接墙等大屏幕也实用),让控制大屏幕的方式变得简单化.傻 ...

  7. 关注zigbee(四)--无线收发

    对于使用者来说,最基本的就是先搞清楚无线收发. 无线收发有两种方式: 1.调用最基本的底层收发函数,即读写寄存器收发,不经过协议栈.这种收发方式最直接,但是没有安全和可靠性保障,不利于组网. 2.利用 ...

  8. 《ZigBee开发笔记》第四部分 提高篇-第9章 CC2530基于GenericApp无线收发实验

    实验设备 硬件:PC 机一台:ZB2530(底板.核心板.仿真器.USB 线) 两套 软件:win7 系统,IAR 8.20 集成开发环境 本实验是基于GenericApp无线收发,编者在第2讲也有讲 ...

  9. zigbee之Zstack协议栈使用

    zigbee之Zstack协议栈使用 前言 基于zstack协议栈开发的步骤 一.OSAL操作系统 1.操作系统工作流程 2.OSAL初始化函数 3.系统启动函数 (1)任务 (2)事件 4.OSAL ...

最新文章

  1. 如何改变java中的库包_如何在Java / Android模块化库中使两个相互独立的包相互独立?...
  2. Tomcat的账号与密码
  3. [Java5新特性] 动态代理
  4. 图像特效——摩尔纹 moir
  5. Mac 键盘符号整理
  6. 腾讯还是小公司,很难选?
  7. 查找一个数据库内的所有表的行数
  8. 【笔试/面试】—— 二叉树的深度和宽度
  9. C#:判断某个对象有没有某个键的方法
  10. 分布式 id 生成系统 滴滴 Tinyid 快速入门
  11. 关于IDEA中有关springboot快启动报错问题
  12. C# PDF转图片(JPG)
  13. html在线客服,网页在线客服代码_jQuery QQ客服
  14. STM32 EXTI外部中断
  15. [Swift]注册并购买加入Apple开发者计划。提示: “你的支付授权失败。请核对你的信息并重试,或尝试其他支付方式。请联系你的银行”...
  16. 微信QQ在线客服基本功能介绍
  17. 关于图片因错误无法显示的问题j
  18. 【重载和重写的区别】
  19. 后摩尔时代来临,语音IC封装技术一触即发
  20. 教你如何写出高质量的网络推广软文

热门文章

  1. BASIC 之父出生 | 历史上的今天
  2. 【Linux】exit(0)exit(1)return
  3. 微信小程序毕业设计 基于微信校园洗衣小程序系统开题报告
  4. 使用广播信道的数据链路层以及以太网详解!!!
  5. 机器人十大前沿热点领域(2022-2023)
  6. Oracle / PLSQL: RPAD 函数的用法
  7. 【数学】函数极限(宇哥笔记)
  8. 基础会计学习笔记5 会计科目和会计账户
  9. 上海亚商投顾:沪指全天窄幅震荡 大消费板块再掀涨停潮
  10. android 7官方壁纸百度云,LOL动态原画桌面壁纸(1~7弹)