ZigBee学前话

     学ZigBee这么久,终于下决心写一些关于ZigBee讲解的文章了,不管写的好与坏,仅仅是想把我学到的一些东西介绍给大家,避免像我这样走了很多弯路。不论你是如何接触到ZigBee这东西的,做项目也好,做设计也罢,在学习之前都应该摆正对于ZigBee的认知,这对于学习ZigBee或者做产品都是有益而无害的,我就是对于ZigBee没有一个正确的认识,有些想法从一开始就是错误的,等产品做出来的才意识到就太晚了。我写这些大家可以作为一个参考,其他很多网络上的资源也是同样如此,只是作为参考,不要以为前人写的就一定是对的,他们很多都是在探索的时候写下的一些想法,往往东西做完或者研究完后就不知道该写什么东西了,所以在探索的过程中往往想法会有错误,因此对于自己的问题网上如果有对应的解决方法,不要直接用,或者直接相信就是这个样子的,要经过验证正确后再用。扯远了,下面说说ZigBee这玩意儿。

    ZigBee大概在04年吧,这时候推出了ZigBee标准,之后十年之内国内的ZigBee一直处于研究状态,大多是高校的研究,近两年使用ZigBee做无线家居的公司似乎多了起来,但是大批量,成规模的应用还确实没有听说过。国外也鲜有听说哪有大规模的应用这东西,不过小范围小规模的使用还是有的。就我个人认为,这主要跟ZigBee的定位有很大关系,ZigBee定位为近距离、低功耗、低速率、低成本的双向无线通讯技术,其主要用于距离短、功耗低且传输速率不高的各种电子设备之间进行数据传输以及典型的有周期性数据、间歇性数据和低反应时间数据传输的应用,由于其距离和低速率的限制,使得其应用也收到了限制。如果说短距离,那么Wifi完全可以满足要求,而且其带宽非常大,传输的信息也比ZigBee多,因此ZigBee主要应用的地方就限制到了低功耗和自组网上。
     有很多人在使用ZigBee后都抱怨ZigBee性能不好,无法通讯,距离不够远等等问题,出现这种问题本身是没有正确认识ZigBee,ZigBee本身定位是一种低功耗,近距离,低速率的产品,因此如果想传的很远本来就是超出了定义范围,不过现在TI推出了功放模块,理论上可放大信号1~2千米左右。另外通信速率也是一个瓶颈,我测试过ZigBee的通信速率,通讯速率和发送字节数,发送间隔有着如下图所示的关系(详细参数不在提供),裸跑通信速率理论值为250Kbps,而实际只能达到25Kbps,也就是说1s能传输3K字节左右的数据。这个速率在通信上看来确实挺小的,但是如果仅仅是用于控制应该说是足够的,因此这个东西到底好不好要看它用在什么地方,有没有发挥出它的强项。



       说了这么多,其实还是有很多人想知道如何去学习协议栈的,在学习协议栈应该有哪些心理准备呢?根据我学习的经验,我觉得应该得有一下几点认识:

       1、如果你学过计算机系统或者计算机网络,那么学习这个协议栈可能会轻松一些,因为ZigBee协议本身是一个无线通讯协议,有一个微操作系统控制,其网络通信基本上和计算机网络差不多,因此学过计算机网络的同学学习这个会快一点。

        2、学这个到底有没有用。如果你是想往技术的道路上发展,如果你有足够的时间,学习这个绝对是有用的,它对你理解操作系统的工作方式(虽然这个和windows差的很远很远,不过学了这个对理解操作系统有很大帮助,可以了解数据流向,消息机制,任务等概念),了解计算机网络的工作原理,了解无线传输的机制等等,学习协议栈绝对是有益无害的。

        3、这个可不可以速成。速成当然是不可能的,但是有些做设计或者仅仅是使用该芯片作为一个数据传输的载体或者其他目的不想深入了解的,就是直接给现成的代码就能用的那些,当然也有对策,推荐一本书籍<ZigBee无线传感器网络设计与实现>这本书里面详细的讲解了串口,无线通信,添加任务,发送接收等等例程,让你立刻就能投入到有趣的实验当中去。当然如果你有足够的时间,深入学习ZigBee协议栈,那么就要从头开始一点一点的学习了。如果想要深入了解该协议的话,短时间内是难全部搞懂的,

        4、如果要好好学,学好了用这个开发产品,那么应该从哪里开始学呢?我觉得要想学好ZigBee协议栈,如果你有足够的时间,那么最好有两块ZigBee的开发板。首先可以了解CC2530这个芯片的使用,CC2530其实就是一个51加上一个RF模块,学习时可以把这个当做51来用,试着裸奔点亮几个小灯,调试一下串口。对这个芯片有了一个大体的了解后,再去研究协议栈。协议栈说白了就是写在CC2530芯片里的一个程序,这个程序到底是如何工作的就是深入研究协议栈的内容了。可以从main函数开始看起,这个系统其实很简单,抓住主干后再去考虑其枝叶,那样学习起来就会非常快,否则会堙没在协议栈的代码海洋中。

5、协议栈的工作方式其实就是这样的,打个比方来说,就好像这有一排抽屉,一个人在准备完成后(初始化完成后),开始挨个检查抽屉里面是否有纸条(消息,如果有消息则该任务置位),如果有纸条则看看纸条是什么指示,按照指示的内容和地点去做要做的事(通过该任务的回调处理任务事件),执行完后返回来接着检查第二个抽屉,。。。以此类推直到检查完最后一个(最后一个为应用层任务,我们可以把自己的任务添加到该层,通过自己的程序来通知系统需要哪些工作),比如说我们让系统发送一串数据,则直接调用串口发送函数即可,发送函数将数据放到发送缓冲区后系统自动将数据发出。通过这个主干然后慢慢了解其内部具体的工作方式即可。

        6、Z-Stack的学习,Z-Stack里面最难的就是网络的通信了,因为ZigBee本身就是一个自组网的协议,其精髓也就在这里面,这里有一个资料叫做《ZigBee协议栈中文说明》详细的讲述了ZigBee协议的各个过程,如果需要深入学习的就好好看看这个资料吧。

        好了说了这么多了,现在也不早了已经快要深夜1点了,明天还要上班,大了真是熬不了夜了,就先这样吧,有什么再慢慢补充吧,总之学习前要明确自己学习的态度,学习的方向,学习的难度等等,这样有计划的,有目的的去学习,将会事半功倍。



  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值