【Zigbee技术入门教程-01】Zigbee无线组网技术入门的学习路线
【Zigbee技术入门教程-01】Zigbee无线组网技术入门的学习路线
广东职业技术学院 欧浩源
一、引言
在物联网技术应用的知识体系中,Zigbee无线组网技术是非常重要的一环,也是大家感觉比较难以掌握的一个部分。Zigbee无线组网技术之所以让你感有学习难度,不是因为它真的复杂,而是它看起来很复杂,让人望而止步。另一方面则是Zigbee技术在应用层面上将硬件和软件完成融为一个体系,要求开发人员既要有扎实的硬件技术,又要有清晰的软件思维。
目前,尽管有不少关于Zigbee无线组网的技术书籍写得非常棒,但对于初学者入门来说可能还是有点难。由于工作需要和形势所迫,我自己摸索着学习Zigbee无线组网技术。其入门过程可谓一波三折,碰过不少障碍,走过不少弯路,吃过不少苦头。所以,在这里结合自己学习Zigbee技术的过程,和大家分享一下学习体会,探讨一下学习路线。大家互助互勉,共同进步。
二、关于Zigbee与Z-Stack
明明看的是关于Zigbee协议的技术教材,为什么里面的内容讲的却是Z-Stack协议栈的内容呢?相信有不少初学者都要这样的疑问。
Zigbee是基于IEEE 802.15.4标准的低功耗局域网协议。该协议的物理层(PHY)和介质访问层(MAC)由IEEE 802.15.4标准来定义;网络层(NWK)和应用层(APP)则由Zigbee联盟来定义。
Z-Stack是TI公司提供的一套符合Zigbee协议标准的协议栈。用户可以使用其提供的程序框架和API函数进行应用项目的开发。该协议栈经过了Zigbee联盟的认可,并且被全球很多企业作为商业级协议栈。实际上,Z-Stack只是一个半开源的协议栈,其中的MAC层和ZMAC层并没有全部开源,但用户可以使用其提供的API来调用相关的库函数。

简单来说,Zigbee是一个符合国际标准的协议,而Z-Stack则是实现该协议的具体代码。如果前者是一个建筑图纸,那么后者就是按照图纸修建的建筑物。所以,学习基于CC2530芯片的Zigbee无线组网技术,实际上就是学习Z-Stack协议栈的结构和运行机理,并且在其基础上进行项目开发。
三、学习Z-Stack协议栈的基本思路
古语有云:物有本末,事有终始,知所先后,则近道矣。
在进行Z-Stack协议栈的具体学习之前,必须先掌握CC2530芯片的开发流程及几个基础外设的应用。如果没有这方面的硬件基础,在看HAL层中的代码,你会觉得自己在看天书。在项目应用开发中,会因为应用场景的不同,使用不同的硬件电路,这个时候,不但要求你能够读懂硬件底层的代码,还要能够根据硬件的不同设计底层代码。
对于Z-Stack协议栈,最好先从整体上掌握其程序架构,通过分析Z-Stack的代码,把任务标识符、任务初始化函数、任务事件列表和任务事件处理函数列表几个关键的代码的关系理清楚,从根本上理解OSAL的运行机理,并掌握任务、事件、消息等基本概念。然后理解其任务的调度算法,把事件的产生和事件的处理的来龙去脉弄清楚,最后,自己能够根据项目需求创建任务,处理事件。
上述的两部分内容看起来跟Zigbee无线组网没有多大的关系,而然,你要进行Zigbee无线组网技术的开发,又离不开上面两个部分的内容。当你比较扎实的掌握了上面两部分内容之后,就可以很顺利进行无线组网和无线数据传输。至于信道、PANID、协调器、路由器、终端设备、广播、单播、组播、绑定等概念和应用,那都是水到渠成的事情了。
我觉得可以把Z-Stack理解为:Z-Stack = OSAL + CC2530 + RF
从总体上看,Z-Stack协议栈是一个用OSAL操作系统通过任务轮询方式来管理CC2530底层硬件和IEEE 802.15.4无线网络的体系结构。那么,你要学习Zigbee无线网络应用的基本路径也就清晰了。
四、学习Z-Stack协议栈的参考路线
从我自己的学习过程来看,学习Z-Stack协议栈可以分为三个部分:CC2530微控制器的硬件基础开发、OSAL操作系统的基本应用和RF无线网络应用开发。
在CC2530微控制器的基础学习中,我们掌握其中几个最基础的功能模块就可以了,至于DAM传输、Flash读写和低功耗控制等,你在后面的项目开发中,碰到什么再学什么,没有太大困难的。
[CC2530基础的学习内容参考]:
1-IAR开发环境的建立与项目开发流程。
2-通用I/O端口的输入和输出控制。
3-中断系统及外部中断应用。
4-定时/计数器原理及其应用。
5-串行接口原理及其应用。
6-ADC工作原理及其应用。
7-CC2530基础技能综合实训案例。
<关于这一部分的内容已经在本博客的《CC2530入门基础教程》的系列在论坛发布了。>
OSAL是一个基于轮转查询方式的操作系统。在OSAL操作系统的学习过程中,我们要掌握的是如何在OSAL中实现对CC2530基础模块的控制。对于一些没有操作系统概念或者没有具体接触过操作系统的人来说,那是有一定难度的。而然,你要真正的踏进Zigbee无线网络应用的大门,这是必经之路。
[OSAL基础的学习参考内容]:
1-理解OSAL的运行机理及相关概念。
2-基于OSAL的跑马灯程序。
3-自定义任务的创建及事件处理。
4-基于OSAL的按键驱动及任务同步。
5-基于OSAL的串口数据收发应用。
6-基于OSAL的ADC数据采集。
7-基于OSAL的基础技能综合实训案例。
最后才是基于IEEE 802.15.4无线网络应用的学习。在这里并不是单一内容的学习,而是结合前面两个部分的内容,对Z-Stack协议栈进行系统性的综合应用学习。
[无线网络应用的学习参考内容]:
1-基于BasicRF的点对点通信。
2-Z-Stack协议栈的结构及基本概念。
3-Z-Stack协议栈中的HelloWorld。
4-Z-Stack协议栈中的三种通讯方式。
5-Z-Stack协议栈中的绑定技术。
6-Z-Stack协议栈中的多点自组织网络。
7-Z-Stack协议栈的基础技能综合实训案例。
五、个人学习体会
在应用层面上,Zigbee无线网络技术的难点不是射频数据收发部分,也不是网络组建管理部分, 但需要开发者具备硬件开发基础和软件编程思维。在阅读Z-Satck协议栈代码过程中,有大量的数组、指针、结构体、宏定义、条件编译等内容,所以要求开发者有扎实的C语言功底,如果你有阅读过操作系统源码的经验的话,那会事半功倍。
技术书籍是需要看的,最好结合着源码来看。虽然技术书籍可以带你从整体上认识Z-Satck协议栈,但是会比较抽象,离开源码你无法形象地摸清其中的脉络。在阅读书籍和源码的时候关键是理解,而理解的最好方法是动手编写代码进行验证。你可以首先运行最原始的Z-Stack协议栈,让它跑起来。在这个过程中,你可以设置一些断点,看看程序的运行路径,可以加深你对概念的理解。然后,你可以试着按照书上或者你自己的构想,修改代码,出现错误就找出原因;运行成功你的理解又会前进一步。就这样一步一个脚印的慢慢迈向Zigbee无线网络ying应用的大门。这时候有人就会说,没有开发板怎么办?我只能回答你:“放弃吧”。学习Zigbee无线网络技术最起码你需要三个开发板。
在学习过程中遇到问题怎么办?简单,网上搜索就会有很多资料,而且都很不错的,基本上能解决入门学习的所有问题。实际上,有很多博客文章记录了作者遇到问题和解决问题的过程,非常有针对性,对初学者来说非常有帮助,而且很多是技术书籍没有讲到的。在学习过程中,利用技术书籍和技术博客,结合Z-Stack协议栈源码,边理解边实践,我相信您会很快的掌握其技术要点和开发技能的。
六、小结
Z-Stack协议栈之所以复杂,那是因为它看起来复杂而已。技术的学习往往都没有捷径,只有循序渐进,扎实前行,才能真正把握本质和内涵。对于那些兴趣浓厚或者目标坚定的初学者来说,我相信掌握Zigbee无线组网技术的入门技能是不会化太长时间的。
如果能够完成上面三个部分内容的学习,我想Zigbee无线组网技术应该可以入门的了,但是你要达到精通的水平还不够,还得需要通过很多项目开发的不断锤炼。
【Zigbee技术入门教程-01】Zigbee无线组网技术入门的学习路线的更多相关文章
- 《JavaScript语言入门教程》记录整理:入门和数据类型
目录 入门篇 js介绍 历史 基本语法 数据类型 概述 null 和 undefined 数值 字符串 对象 函数 数组 本系列基于阮一峰老师的<JavaScrip语言入门教程>或< ...
- 【CC2530入门教程-01】IAR集成开发环境的建立与项目开发流程
[引言] 本系列教程就有关CC2530单片机应用入门基础的实训案例进行分析,主要包括以下6部分的内容:1.CC2530单片机开发入门.2.通用I/O端口的输入和输出.3.外部中断初步应用.4.定时/计 ...
- 【CC2530入门教程-01】CC2530微控制器开发入门基础
[引言] 本系列教程就有关CC2530单片机应用入门基础的实训案例进行分析,主要包括以下6部分的内容:[1]CC2530微控制器开发入门基础.[2]通用I/O端口的输入和输出.[3]外部中断初步应用. ...
- 【转】BCSphere入门教程01:Immediate Alert--不错
原文网址:http://www.ituring.com.cn/article/117570 写在前面 智能硬件开发的起点是智能硬件,在本教程中的每一章节,首先会列出您的蓝牙智能硬件所需要支持的Serv ...
- 大爽Python入门教程 0-1 安装python
大爽Python入门公开课教案 点击查看教程总目录 一 如何找到下载地址并下载 下面展示找到下载地址的方法步骤 嫌步骤太慢可直接跳到第4步, 查看详细下载地址 使用搜索引擎搜索python 打开搜索结 ...
- Angular系列----AngularJS入门教程01:AngularJS模板 (转载)
是时候给这些网页来点动态特性了——用AngularJS!我们这里为后面要加入的控制器添加了一个测试. 一个应用的代码架构有很多种.对于AngularJS应用,我们鼓励使用模型-视图-控制器(MVC)模 ...
- ExtJS入门教程01,Window如此简单,你怎能不会?
这是一系列ExtJS教程,今天的是第一篇,主要介绍ExtJS中Window的基本用法.希望大家能够支持! 来吧,创建一个漂亮的弹出窗 var win = Ext.create("Ext.Wi ...
- 一步步Cobol 400 上手自学入门教程01 - 基础概念
先学习基础概念 1.COBOL字符:包含: User-defined words 用户定义字符 System-names Reserved words 关键字 2.用户定义字符User-defin ...
- MFC入门教程01 Windows编程基础
随机推荐
- ArcGIS 网络分析[4] 网络数据集深入浅出之连通性、网络数据集的属性及转弯要素
前面介绍完了如何创建网络数据集.如何使用网络分析功能,当然还有的读者会迷惑于一些更深层次的问题,比如网络数据集的连通性问题等. 因为不可能面面俱到,我只能挑重点来阐述,我觉得网络数据集的连通性.属性和 ...
- ArcGIS 网络分析[2.2] 服务区分析
什么是服务区? 我们先提一个很常见的社会现象:一个医院,如果要发起抢救,那么10分钟内能去多远? 时间就是生命,当结合道路网的阻力进行最短路径分析时,得到的可达的覆盖区域,这个区域就是服务区. 服务区 ...
- Macaca自动化工具之uirecorder脚本录制
UI Recorder功能介绍 支持所有用户行为: 键盘事件, 鼠标事件, alert, 文件上传, 拖放, svg, shadow dom 支持无线native app录制, 基于macaca实现: ...
- [数据清洗]- Pandas 清洗“脏”数据(三)
预览数据 这次我们使用 Artworks.csv ,我们选取 100 行数据来完成本次内容.具体步骤: 导入 Pandas 读取 csv 数据到 DataFrame(要确保数据已经下载到指定路径) D ...
- Python 项目实践三(Web应用程序)第四篇
接着上节继续学习,本章将建立用户账户 Web应用程序的核心是让任何用户都能够注册账户并能够使用它,不管用户身处何方.在本章中,你将创建一些表单,让用户能够添加主题和条目,以及编辑既有的条目.你还将学习 ...
- Netty对Protocol Buffer多协议的支持(八)
Netty对Protocol Buffer多协议的支持(八) 一.背景 在上篇博文中笔者已经用代码演示了如何在netty中使用Protocol Buffer,然而细心的用户可能会发现一个明显的不足之处 ...
- TurnipBit开发板“趣味赛”:平衡力大比拼
让孩子在快乐自由的游戏中培养编程思维 平衡力大挑战是我们经常经常玩的的一个小游戏,脑补画面的话比较常见的是单腿平衡力大比拼,摇晃幅度小者胜利.游戏好玩归好玩,但是想要公平判断胜负却不容易.下面就教大家 ...
- 用AndroidStudio发布Libs到Bintray jCenter
1 RootProject[根目录]build.gradle中添加如下插件引用 dependencies { ....... classpath 'com.jfrog.bintray.gradle:g ...
- 漫话JavaScript与异步·第三话——Generator:化异步为同步
一.Promise并非完美 我在上一话中介绍了Promise,这种模式增强了事件订阅机制,很好地解决了控制反转带来的信任问题.硬编码回调执行顺序造成的"回调金字塔"问题,无疑大大提 ...
- Nexus私服忘记用户名密码解决4步走
1 停止nexus服务 [root@node001 bin]# /usr/local/nexus/nexus-2.14.5-02/bin/nexus stop******************** ...