×

Zigbee开发实战指南

消耗积分:2 | 格式:rar | 大小:31 MB | 2017-12-01

分享资料个

  前 言

  I 学习使用建议

  到目前为止,在电子界,如果想进入微控制器领域的学习,绝大多数的人依然认为,

  要从 51 单片机,或者 8 位 AVR 开始。诚然,这是一条比较合理的路径,但是,我们就

  第一个提出这个观点,就是现在有一条更为可行的路径。

  首先,是什么路径可以让初学者能够快捷地进入 MCU 领域?

  这条路径就是 Zigbee。以 CC2530 为例,由于它的内核是一个增强型的 8051 内核,

  所以,CC2530 编程的风格跟 51 单片机可以说是一样的。换句话来说,现在我们完全可

  以从 Zigbee 开始学习,进入 MCU 领域。当然相比于 51 单片机的 4 个 8 位控制端口,C

  C2530 只有 21 个控制端口,管口资源相对紧张,但是,现在我需要的是学习简单 MCU

  的编程,所以,我们相信,以后业界进入 MCU 学习会是从 Zigbee 开始。

  其次,为什么选择从 Zigbee 开始,而不是继续沿着前人的脚印?

  这是因为 Zigbee 除了可以裸机编程之外,还可以应用协议栈来完成无线数据的收

  发。所谓协议栈,就是芯片生产厂商,为用户事先写好的函数库,用户可以直接调用现

  成的功能函数,比如:组网函数、数据发送函数、数据接收函数、睡眠函数等等,来实

  现用户想达到的功能。所谓裸机编程,就是说,用户可以不应用协议栈,来实现编程,

  也就是说,所有函数用户自己编写。所以,Zigbee 不单只可以让我们学会简单 MCU 的

  编程,还可以在原来基础上,直接学习人家工程师是怎样编程的,也就是协议栈函数的

  编写,学习怎样去调用现成的函数库,这个对于以后嵌入式系统的学习有极大的帮助,

  当然,还可以学习到怎么实现数据的无线传输。

  所以,以后初学者想进入微控制器的领域,完全可以从 Zigbee 开始。

  为了让有兴趣的初学者能轻松学习 MCU,进入弱电控制领域,为了让有基础的爱

  好者快捷地学好用好 Zigbee,秉火开发出一套 Zigbee 学习套件。

  II

  秉火 Zigbee 套件主要包括:49 个例程和相应的 49 个教程。

  例程/教程 组成:

  q 第一部分、裸机实验,主要介绍 CC2530 编程开发环境、CC2530 的编程风格和 CC2530 单片机的基本功能;

  q 第二部分、协议栈基础实验,主要讲解 BasicRF 和协议栈的一些基础实验;

  q 第三部分、协议栈应用实验,主要讲解如何基于 BasicRF 或者基于协议栈,开发出符合用户需要的功能。

  最后,建议用户应该从第一部分开始学习,然后是后面的第二、第三部分,但是,

  在学习过程中,用户应该将着重点放在第二、第三部分。另外,这里需要说明一下,就

  是:本教程是针对例程写出来的,也就是最终的目的是希望用户掌握 CC2530 相关应用

  程序的编写,所以,用户可以根据自己的需要来选择性学习本教程。

  II Zigbee 是什么?如何应用?

  答:Zigbee 是一种全新无线网络数据通信技术。换句话说,Zigbee 就是一块具有数

  据收发功能的单片机,其内核是一个增强型的 8051,所以编程风格与大家所学的 51 单

  片机是一脉相承的,所以说,其实大家一早就接触过 Zigbee 了。当然,由于 TI 为用户

  写好了协议栈,所以,我们只要在协议栈的基础上,加上自己的裸机程序,然后调用组

  网函数和数据收发函数,就可以实现数据的无线传输了。

  III Zigbee 协议栈是什么?如何应用?

  答:首先,什么是协议栈?相信大家都有这样一个困惑,就是:看了一段时间的 Z

  igbee 协议栈,感觉 Zigbee 协议栈像程序,又不像,很是混乱。若是程序,只需添加应

  用部分,好像又不是很明白。

  下面做几点解释:

  (1)协议是个标准,是约定。每个厂商的协议栈有区别,也就是函数名称和参数可能

  有区别。

  (2)协议栈是协议的实现,可以理解为代码,函数库,供上层应用调用。商业化的协

  III

  议栈就是给你写好了底层的代码,符合协议标准,提供给你一个功能模块给你调用。

  其次,Zigbee 协议栈如何应用?

  (1)其实大家需要关心的就是协议栈应用逻辑,也就是说,数据从哪里到哪里,怎么

  存储、处理;还有系统里的设备之间的通信顺序是什么,也就是说,哪个负责数据发送,

  哪个负责接收。

  (2)当需要数据通信时,需要做的是:第一,调用组网函数给你组建你想要的网络,

  也就是说,是点对点的点播,还是一组一组的组播,或者是没有限制,发出去的数据其

  他所有的 Zigbee 设备都可以接收的广播;第二,调用无线数据发送函数,当然,接收端

  就调用接收函数;

  (3)当设备没事干的时候,就调用睡眠函数;要干活的时候就调用唤醒函数。

  总结一句:具体应用时,不需要关心协议栈是怎么写的,里面的每条代码是什么意

  思,除非要做协议栈研究;我们需要做的是,调用组网函数组网,然后调用数据发送、

  接收函数。

  IV Zigbee 开发

  首先我对 Zigbee 一窍不通,如果我想通过 Zigbee 实现简单组网进行简单数据传输,

  要自己写通信协议吗?这个开发难度大不大?周期要多久?

  答:不用自己写协议;开发难度不大,周期也不长,最简单的就是买 2 块秉火 Zig

  bee 开发板(或模块),在例程基础上修改就行了。怎么修改?大致如下:写好裸机驱动,

  然后移植驱动文件,并调用组网和数据发送/接受函数就可以了。

  V 总结

  首先,在此衷心地感谢您选用 秉火 Zigbee 。

  然后,在接下来的日子里,秉火将会跟您一起分享学习 Zigbee 的经验,同时,也很

  欢迎您对秉火在秉火 Zigbee 的例程、教程上面存在的不足,予以指出,相信在您我共同

  的分享下,我们将会学到更多的知识。开源共享,共同进步。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'Zigbee开发实战指南',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);