zigbee开发入门

image-20230113221733046

zigbee是一种物联网领域常用的短距离通信技术。

👨🏻‍💻更新至:什么是zigbee?

一.什么是zigbee?

简介

ZigBee技术是一种双向的无线通信技术,具有近距离、低复杂度、低功耗、低数据速率、低成本的特点。说白了它就是一种和蓝牙wifi一样短距离的通讯协议。

  • zigbee的传输速率低,但是响应速度非常快,功耗也很低,因此很适合用来传输简单的控制信号。
  • zigbee可以使用mesh拓扑结构,就是下图右边这种网状结构。这些无线通信协议实际上就是把一个个设备给连接起来进行信息交流,我们称这一个个设备就是节点。而左边是wifi使用的星型结构,wifi路由器是一个中心节点,周围的节点比如手机、笔记本电脑这些都连接在中心节点上,如果这个中心节点挂了,整个网络都瘫痪了。而右图这种mesh结构,挂了一个节点,只影响局部的联网情况,不容易影响大局。当然zigbee也可以构建星型网络和树状网络,主要是它支持上万个节点的网状网络的构建和维护,还能自动组网。
    image-20230113150728364
  • zigbee3.0:以前zigbee有许多标准,不同领域有不同的标准,但是2016年的zigbee3.0协议,将所有的zigbee协议统一起来,因此以后只需要遵循zigbee3.0协议即可实现不同领域的通信。
  • zigbee联盟:zigbee联盟,是一个由众多企业和组织组成的一个联盟,比如华为小米这些公司。他们聚集在一起,共同促进zigbee协议的发展,修复bug维护zigbee协议,还作为认证平台对相关应用进行认证。

结构

类比计算机网络的TCP/IP协议栈,zigbee协议包含物理层,mac层,网络层,应用层

image-20230113152428278

  • 物理层:物理层采用的是IEEE 802.15.4协议。这一层主要规定,怎么把信号变成电磁波发送出去,接收到的电磁波又怎么处理。
  • Mac层:一个网络中很多节点,如果大家都想发数据难免会冲突混乱,而mac层就是用来协调这一问题,使通讯更可靠有序。
  • 网络层(核心层):这是整个zigbee协议的核心,构建星型,树状和网状网络就是由这一层实现的,并且还实现了自组网(比如一个网络中的设备被拿的太远断掉了连接,将它拿回来时能自动连接网络)。这一层还负责数据的传输和网络安全管理
  • 应用层:规定了对象的属性和规范,告诉不同设备之间怎么理解发过来的信号,zigbee开发主要基于这一层。zigbee3.0之前的不同领域的协议的区别也主要在这一层。

zigbee设备类型

  • 协调器:zigebee网络的起点,第一个设备,用于发送网络信标、建立一个网络、管理网络节点、存储网络节点信息、寻找一对节点间的路由信息并且不断的接收信息。一旦网络建立完成,这个协调器的作用就像路由器节点,但是不能加入其它网络。

  • 路由器:它执行的功能包括允许其它设备加入这个网络,跳跃路由,辅助子树下电池供电终端的通信。

  • ZigBee终端设备:一个终端设备对于维护这个网络设备没有具体的责任,所以它可以睡眠和唤配,看它自己的选择。

    因此它能作为电池供电节点。比如远程控制的插线板的每一个插孔,都可以单独被网络控制。

如下图,紫色是协调器,黄色是路由器,而绿色则是终端。

image-20230114160451020

zigbee技术方案商

要实现zigbee协议,就是要实现符合这套协议的硬件和软件,也就是芯片和代码。而目前主要有三家公司干这事:

  • sidicon labs
  • NPX
  • Texas Instruments

Texas Instruments的资料比较开放,芯片cc2530成本低,因此适合初学者学习。

这三家的技术方案都可以互相连接,因为都遵循zigbee3.0协议。

相关基础知识和工作原理

这里推荐一个b站视频:

了解以下内容:

  • zigbee工作的频段和信道

  • 信息的传输过程,和tcp/ip协议栈很像

  • pan ID,e-pan ID,Mac地址,短地址

  • endpoint分类

  • cluster通信模型

  • 安全问题

基础实验

实验环境

  • 首先我们需要一块开发板,这里使用TI(Texas Instruments)的cc2530f256开发板,还有配套仿真器。淘宝可以购买
    image-20230114144910712
    image-20230114144943419
  • 开发板可以让我们熟悉zigbee芯片和代码的使用方法,实际生活中,那些诸如小米智能家居的产品,里面也是使用这些芯片,再连接机器本身的电路,达到联网控制的目的。
  • 然后是实验用的软件是IAR,一款嵌入式开发工具,可以把电脑上写的c语言代码编译为芯片可以理解的文件。
    image-20230114200710409
  • 我们要把程序烧录进板子里,还需要另一款软件****。
    image-20230114200657986
  • 通常买板子的商家会提供开发套件资源,这里提供下我用的这家的,下载地址(👆🏻点击获取),软件在 开发软件 目录下

软件基础使用

  • 创建工作空间和工程:
    先新建一个文件夹来存放项目所有的文件,然后进入软件:

    1. 左上角,file>new>workspace,新建工作空间。
    2. 有了工作空间,才能在工作空间里建立工程,左上角,project>create new project,选择empty project,选择新建的那个文件夹,保存。
    3. 保存工作空间和工程。

    新建

  • 源代码编写及编译:

    1. 新建源码文件:左上角 file>new>file 新建文件,然后在项目文件夹下新建一个code文件夹,专门用于保存源码,将这个文件以.c格式保存到里面。

    2. 在工程里新建一个组,将文件夹导入:右击左边栏工程名:add>add group,新建一个组。然后右击**组名>**add,将刚才创建的文件加入。

    3. 编译前的配置:
      我们需要指定开发的芯片类型,还要配置输出到板子里的文件。

      • 右击工程名>optitions,进入工程的设置界面。
      • General Options > Target > Device 设置为cc2530f256。
      • General Options > Stack/heap > XDATA 设置为0x1FF
      • linker > Config 勾选 Override default
      • linker > Output 勾选 allow C-Spy-specific extra output file
      • linker > Extra Output 先勾选Generate extra output file,再勾选 Override default,然后把里面的文件后缀改为.hex
      • **linker > Output > format > output format ** 将输出格式改为intel-extended

      源码

    4. 编译:

      • 右击工程名,点击rebuild all 即可编译
        编译
  • 下载与仿真:
    刚才我们编译后得到了一个.hex文件,现在需要把它下载到板子里,这时就需要仿真器。

    • 拿出仿真器,然后按下图连接电脑端,连接后按一下仿真器上的复位按键
      image-20230114171525590

    • 看最上面,有一个绿色的箭头,是下载并debug,这个最常用;另一个是单纯的debug不下载
      image-20230114181034416

    • 点击绿色的箭头,程序下载进板子,进入debug界面,debug界面和常见的c语言ide差不多。
      image-20230114182141398

    • 如果想看到printf的结果,可以调出终端,左上角view > Terminal I/O

      image-20230114182609268

  • 固件烧录:

    • 当我们编译之后,会发现左侧边栏多了一个output文件夹,里面有个.hex文件,这就是我们编译前设置的输出文件。.hex文件用来烧录进板子里。
      image-20230114201621957
    • 右击打开所在文件夹,可以知道.hex文件的位置,然后打开之前下载的SmartRF FlashProgrammer,找到对应位置将文件导入
      image-20230114202331057
    • action里面选择要执行的动作,擦除还是烧录
      image-20230114202614718

多工程管理

前面体验了整个流程,我们可以发现工程project是在工作空间workspace里面的,而一个工程里又可以分若干个组,这些组类似文件夹。因此IAR里就有这样一个层级结构,工作空间 => 多个工程 => 每一个工程下面若干个组

多个工程可以在侧边栏进行切换
image-20230114203716040

基础实验

基础实验一般开发板会有配套资料,包括GPIO,中断,定时器,串口通信等基础的单片机知识,可以自行跟着例程学习。