ZigBee协议栈简介

article/2025/10/22 3:33:34

文章目录

  • Zigbee协议栈简介
  • 如何理解Zigbee协议栈
  • 如何使用Zigbee协议栈

Zigbee协议栈简介

  Zigbee协议分为2部分:

  1. IEEE 802.15.4定义了PHY(物理层)和MAC(介质访问层)技术规范。
  2. Zigbee联盟定义了NWK(网络层)、APS(应用程序支持层)、APL(应用层)技术规范。

  Zigbee协议栈就是将各个层定义的协议都集合在一起,以函数的形式实现,并给用户提供API,用户可以直接调用。

在这里插入图片描述

如何理解Zigbee协议栈

  TI推出的ZigBee 2007协议栈也称为Z-Stack,它是Chipcon推出其CC2430开发平台时,开发的一款商业级协议栈软件。
  Chipcon公司为自己设计的Z-Stack协议栈中提供了一个名为操作系统抽象层OSAL的协议栈调度程序。
  下图是TI公司的基于ZigBee 2007的协议栈Z-Stack-CC2530-2.3.0,所有文件目录如红色框所示,我们可以把它看做一个小型的操作系统,采用任务轮询的方法运行。
在这里插入图片描述

如何使用Zigbee协议栈

  以简单的无线数据通信为例,其一般步骤为:

  • 组网:调用协议栈组网函数、加入网络函数,实现网络的建立和节点的加入。
  • 发送:发送节点调用协议栈的发送函数,实现数据无线发送。
  • 接收:接收节点调用协议栈的无线接收函数,实现无线数据接收。

  由于协议栈都把这些函数都封装好了,因此我们用起来比较方便。大家可以了解一下下面的关键字:

  • CCMCounter with CBC-MAC(Mode of Operation)
  • HALHardware Abstraction Layer(硬件抽象层)
  • PANPersonal Area Network(个人局域网)
  • RFRadio Frequency(射频)
  • RSSIReceived Signal Strength Indicator(接收信号强度指示)

  CC2530 BasicRF文件夹结构如下图:
在这里插入图片描述

  • docs文件夹:打开文件夹,里面仅有一个名为CC2530_Software_ExamplesPDF文档,文档的主要内容是介绍Basic RF的特点、结构及使用。从中我们可以知道,里面Basic RF包含三个实验例程:无线点灯、传输质量检测、谱分析应用。
  • Ide文件夹:打开文件夹后会有三个文件夹,以及一个cc2530_sw_examples.eww工程,这个工程是上面提及的三个实验例程工程的集合。在IAR环境中打开该工程,在workspace看到如下文件夹:Ide\Settings文件夹是在每个基础实验的文件夹里都会有的,它用于保存读者自己的IAR环境设置;Ide\srf05_CC2530文件夹里面放有三个工程,即light_switch.ewwper_test.ewwspectrum_analyzer.eww
  • Source文件夹:该文件夹里面有apps文件夹和components文件夹。Source\apps文件夹存放Basic RF三个实验的应用实现的源代码;Source\components文件夹包含着Basic RF的应用程序使用不同组件的源代码。

  打开文件夹WeBee CC2530 BasicRF\ide\srf05_cc2530\iar路径里面的工程light_switch.eww(无线点灯),我们的实验就是对它进行修改的。在介绍Basic RF之前,来看看这个实验例程设计的大体结构。
在这里插入图片描述

  • Hardware layer:这是实现数据传输的基础。
  • Hardware Abstraction layer:它提供了一种接口来访问TIMERGPIOUARTADC等,这些接口都通过相应的函数进行实现。
  • Basic RF layer:为双向无线传输提供一种简单的协议。
  • Application layer:它是用户应用层,相当于用户使用Basic RF层和HAL的接口。我们通过在Application layer就可以使用到封装好的Basic RFHAL的函数。

  Basic RFTI公司提供,它包含了IEEE 802.15.4标准的数据包的收发功能,但并没有使用到协议栈,仅仅让两个结点进行简单的通信。也就是说,Basic RF仅仅是包含IEEE 802.15.4标准的一小部分。其主要特点有:

  1. 不会自动加入协议,也不会自动扫描其他节点也没有组网指示灯(LED3)。
  2. 没有协议栈里面所说的协调器、路由器或者终端的区分,节点的地位都是相等的。
  3. 没有自动重发的功能。

  Basic RF的工作过程有启动、发射和接收。使用Basic RF实现无线传输只要学会使用这些过程的相应函数就可以了。
  启动的要求如下:
  1. 确保外围器件没有问题。
  2. 创建一个basicRfCfg_t的数据结构,并初始化其中的成员,在basic_rf.h代码中可以找到:

typedef struct {uint16 myAddr;    /* 16位的短地址(就是节点的地址) */uint16 panId;     /* 节点的“PAN ID”             */uint8 channel;    /* RF通道(必须在11至26之间     */uint8 ackRequest; /* 目标确认就置为true          */
#ifdef SECURITY_CCM   /* 是否加密,预定义里取消了加密 */uint8 *securityKey;uint8 *securityNonce;
#endif
} basicRfCfg_t;

  3. 调用basicRfInit函数进行协议的初始化,在basic_rf.c代码中可以找到:

uint8 basicRfInit ( basicRfCfg_t *pRfConfig );

函数功能是对Basic RF的数据结构初始化,设置模块的传输通道、短地址和PAD ID
  发送过程如下:
  1. 创建一个buffer,把payload放入其中,Payload不大于103个字节。
  2. 调用basicRfSendPacket函数发送,并查看其返回值。在basic_rf.c中可以找到:

uint8 basicRfSendPacket ( uint16 destAddr, uint8 *pPayload, uint8 length )

参数destAddr是目的短地址,pPayload是指向发送缓冲区的指针,length是发送数据长度。函数功能是给目的短地址发送指定长度的数据,发送成功刚返回SUCCESS,失败则返回FAILED
  接收过程如下:
  1. 上层通过basicRfPacketIsReady函数来检查是否收到一个新数据包。在basic_rf.c中可以找到:

uint8 basicRfPacketIsReady ( void );

函数功能是检查模块是否已经可以接收下一个数据,如果准备好了,则返回TRUE
  2. 调用basicRfReceive函数,把收到的数据复制到buffer中。代码可以在basic_rf.c中找到:

uint8 basicRfReceive ( uint8 *pRxData, uint8 len, int16 *pRssi );

函数功能是接收来自Basic RF层的数据包,并为所接收的数据和RSSI值配缓冲区。


http://chatgpt.dhexx.cn/article/4TM1Rf5i.shtml

相关文章

[zigbee][z-Stack]协议栈简介及工作流程

文章目录 什么是zigbee协议栈?如何使用zigbee协议栈?z-Stack工作流程 什么是zigbee协议栈? 协议栈是协议的具体实现形式,通俗点来理解就是协议栈是协议和用户之间的一个缺口,开发人员通过使用协议栈来使用这个协议的&…

相机标定和双目相机标定标定原理推导及效果展示

文章目录 前言一、相机标定1.相机的四个坐标系2.相机的畸变 二、张正友标定法1.求解内参矩阵与外参矩阵的积2.求解内参矩阵3.求解外参矩阵4.标定相机的畸变参数5.双目标定6.极线矫正(立体校正) 三、视差图与深度图 前言 参考了一些大佬的文章&#xff0c…

视觉基础之相机标定

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达 基于视觉的图像处理,通常要在实验前进行相机的标定,以获取相应的参数。为方便查阅,遂将常用到的三种相机标定总结如下。 相机内参标定…

照相机标定

一.相机标定的原理 1.1 相机如何成像: 相机成像系统中,共包含四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系。 1.1.1 世界坐标系: 世界坐标系(world coordinate),也称为测量坐…

Opencv——相机标定

相机标定的目的:获取摄像机的内参和外参矩阵(同时也会得到每一幅标定图像的选择和平移矩阵),内参和外参系数可以对之后相机拍摄的图像就进行矫正,得到畸变相对很小的图像。 相机标定的输入:标定图像上所有…

为什么需要对相机标定?

以下内容来自系统教程如何搞定单目/鱼眼/双目/阵列 相机标定? 点击领取相机标定资料和代码 为什么需要对相机标定? 我们所处的世界是三维的,而相机拍摄的照片却是二维的,丢失了其中距离/深度的信息。从数学上可以简单理解为&…

1. 相机标定原理(学习笔记)

相机标定(Camera Calibration)-学习笔记 文章目录 相机标定(Camera Calibration)-学习笔记一、简介二、原理1. 坐标系 *coordinates*2. 相机参数 *camera matrix*2.1 外参数矩阵2.2 内参数矩阵2.3 畸变矩阵2.3.1 径向畸变2.3.2 切向畸变 2.4 小结 三、相机标定方法1. 张正友相机…

相机标定目的及原理

相机标定的目的: 相机标定的目的有两个,一个就是矫正由于镜头畸变造成的图片的变形,例如,现实中的直线,拍摄成图像后会外凸或内凹,进行相机标定后可以对这种情况进行校正;另一个是根据获得得图像…

Python之OpenCV相机标定方法

本文结合OpenCV官方样例,对官方样例中的代码进行修改,使其能够正常运行,并对自己采集的数据进行实验和讲解。 一、准备 OpenCV使用棋盘格板进行标定,如下图所示。为了标定相机,我们需要输入一系列三维点和它们对应的…

相机标定,内参数与外参数

相机标定 简介 所谓的相机标定就是将外界世界的坐标信息转化为计算机(自带相机/摄像头)可以理解的“距离”,将世界坐标系转换到相机坐标系。我们可以理解为从一个坐标系转换到另一个坐标系所需要的转换关系就是相机标定。 简单滴说&#x…

相机标定——张氏标定法

目录 前言动机为什么要进行相机标定什么是张氏标定法 张氏标定法的原理透镜成像原理世界坐标系到相机坐标系的转换相机坐标系到图像坐标系的转换图像坐标系到像素坐标系单应性矩阵内参求解外参求解Matlab实操 前言 动机 前段时间在整机械臂的手眼标定,也就是标定3D…

相机标定系列(三)利用matlab进行相机标定

相机标定系列(三)利用matlab进行相机标定 文章目录 相机标定系列(三)利用matlab进行相机标定前言一、棋盘格图像的采集二、单目相机标定三、双目相机标定 前言 matlab的应用程序中含有对双目相机和单目相机的标定工具箱&#xff…

机器视觉——相机标定

1 机器视觉为什么要做相机标定 机器视觉是采用相机成像来实现对三维场景的测量、定位、重建等过程。是一个利用二维图像进行三维反推的过程,我们所处的世界是三维的,而图像或者照片是二维的,可以把相机认为是一个函数,输入量是一…

相机标定篇——相机标定

认为相机标定是三维重建的核心,研究生期间主要方向为结构光三维重建 必要的数学知识 线性方程求解 Gauss消元法;LU分解;Cholesky分解 最小二乘问题-线性方法 特征值分解;奇异值分解;超定线性方程;最小二乘…

【相机标定】相机内参

相机标定 相机在计算机视觉方面的一些应用一般需要相机标定。我们总是听到标定这个词,那么具体标定的是什么呢?相机的拍摄是一个三维到二维(透视投影)的过程,这个过程可以用数学模型去表述,标定便是计算这…

什么是相机标定

1. 相机标定的定义及作用 相机标定是指借助标定板来计算单个或多个相机的内参、外参和镜头畸变参数。 作用: 将畸变的图像恢复为正常的图像,为后续进行拼接、SLAM等奠定基础。 多相机标定可以将所有相机输出变换到同一个坐标系。 相机标定是三维视觉…

相机标定究竟在标定什么?

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达 相机标定可以说是计算机视觉/机器视觉的基础,但是初学者不易上手,本文将给读者整理一遍相机标定的逻辑,并在文末回答评论区提出的问题…

相机标定(Camera calibration)

简介 摄像机标定(Camera calibration)简单来说是从世界坐标系换到图像坐标系的过程,也就是求最终的投影矩阵 P P P 的过程,下面相关的部分主要参考UIUC的计算机视觉的课件(网址Spring 2016 CS543 / ECE549 Computer vision)。 …

相机参数标定(camera calibration)及标定结果如何使用

重要更新:本文的第二次更新已发布。为了不破坏现有内容的结构,故重新开始新的一篇文章。同时本文的一些内容也会涵盖进去。 欢迎关注。 《第二更,相机参数标定基础:从小孔成像开始到单双目标定》 关于实践部分,可参…

相机标定详解

内参、外参、畸变参数三种参数与相机的标定方法与相机坐标系的理解 相机标定(Camera calibration)原理、步骤 相机标定详解 最近做项目要用到标定,因为是小白,很多东西都不懂,于是查了一堆的博客,但没有…