ZigBee学习——BDB
✨本博客参考了善学坊的教程,并总结了在实现过程中遇到的问题。
善学坊官网
文章目录
- 一、BDB简介
- 二、BDB Commissioning Modes
- 2.1 Network Steering
- 2.2 Network Formation
- 2.3 Finding and Binding(F & B)
- 2.4 Touchlink
- 三、BDB Commissioning Modes API简介
- 四、实操
一、BDB简介
BDB,全称为Base Device Behavior,直译过来就是“基础设备行为”。用一句话概括,BDB就是用来定义和控制在ZigBee物联网设备中的各种行为和状态。它决定了设备的行为模式,使得设备知道如何加入或离开网络,如何响应其他设备的信息,当需要改变状态时又应该做什么等等。
这里着重介绍BDB对于正确组建ZigBee网络的作用。
BDB主要包含以下3方面的内容:
- Commissioning Modes:Commissioning模式,定义了ZigBee设备之间组网的基本规范
- BDB Security:定义了一些网络安全规范
- Reset Methods:开发者可以使用多个复位方法
由于BDB Security和Reset Methods这两部分,开发者一般接触的比较少,所以暂时不展开讲解。Commissioning Modes是ZigBee组网的核心内容,下节课将重点讲解。
二、BDB Commissioning Modes
Commissioning Modes决定设备之间怎样建立和配置通信连接的。
BDB提供了4种主要的Commissioning模式给开发者使用,分别是Network Steering
、Network Formation
、Finding and Binding
(F & B)和Touchlink
。
2.1 Network Steering
定义了设备如何加入到ZigBee网络中,具体方式如下:
- 如果设备还没有在ZigBee网络中,那么它们会寻找一个合适的ZigBee网络并加入到其中。
- 特别地,对于路由器类型的设备,在入网成功后,允许其它设备通过本设备来加入到这个ZigBee网络中。
所有需要加入到ZigBee网络中的设备都必须要支持Network Steering。
2.2 Network Formation
Network Formation 规定协调器类型的设备需要去建立一个中心信任的安全网络。这种网络的特点是所有需要加入到网络中的设备都需要经过信任中心的同意才能加入,而协调器本身就是这个信任中心。
类似地,对于路由器类型的设备,如果条件允许的话会创建一个分布式安全网络。这里暂时不展开讲解这种网络了。
所有的协调器类型设备都必须要支持 Network Formation ,而对于路由器类型的设备来说,这是可选的模式。
2.3 Finding and Binding(F & B)
顾名思义,Finding and Binding的意思就是发现与绑定,那么发现与绑定什么呢?
ZigBee 3.0是使用Cluster(集群)来描述设备的功能的。每种设备都有各自的功能,都有各自的一系列Cluster。这里的发现与绑定是指ZigBee设备的Cluster之间的相互发现、相互绑定。随着后续章节对Cluster深入地讲解,读者将会更深入地了解到其中的原理。
所有的ZigBee设备都必须要支持Finding and Binding(F & B)。
2.4 Touchlink
一般用于两个ZigBee设备之间直接进行通信,举个例子说明其原理。
假设现在有两个支持Toucklink的ZigBee设备:
一个是无线按钮,支持通过Touchlink的方式发送一个恢复出厂设置的指令;
另一个是灯,支持接收通过Touchlink方式发来的恢复出厂设置指令并执行相应的处理。
用户可以拿着这个按钮靠近这个灯,让两者相距约2cm,然后按下按钮发送指令,这个灯会收到指令并执行相应处理。如果用户把按钮拿远一些测试,会发现灯收不到这个指令。如果用户把这个按钮拿去靠近一个新买的相同的灯测试,会发现这个灯也会收到这个指令。
从这个例子中可以总结出Touchlink具有下面这些特点:
- 通信距离短,约2cm。按钮向灯发送指令时,灯会通过检测按钮的网络信号强度来判断按钮的距离,从而决定是否处理该指令。
- 设备之间可以直接通信,可以把这个按钮拿去直接跟一个新买的相同的灯通信。
Touchlink用得相对比较少,ZigBee设备并不一定都需要支持Touchlink,开发者可以让自己开发的设备支持或不支持这个功能。
三、BDB Commissioning Modes API简介
虽然上述的Commissioning模式比较复杂,但是得益于Z-Stack 3.0 ,ZigBee设备的组网代码非常简单,只需要调用1个API就可以了。
打开配套的工程代码,可以在bdb_interface.h
文件中找到BDB Commissioning Modes的API,如图所示。
bdb_StartCommissioning(uint8 mode)
这个函数需要传入一个模式参数,可以在bdb.h中找到由协议栈定义好的模式,如图所示。
实验过程会用到的几个模式
BDB_COMMISSIONING_MODE_NWK_STEERING
BDB_COMMISSIONING_MODE_NWK_FORMATION
BDB_COMMISSIONING_MODE_FINDING_BINDING
四、实操
善学坊教程:ZigBee 3.0 组网实验
根据教程实现的过程可能遇到的问题,以及相对应的解决方案。
相关文章:

ZigBee学习——BDB
✨本博客参考了善学坊的教程,并总结了在实现过程中遇到的问题。 善学坊官网 文章目录 一、BDB简介二、BDB Commissioning Modes2.1 Network Steering2.2 Network Formation2.3 Finding and Binding(F & B)2.4 Touchlink 三、BDB Commissi…...

使用Docker快速部署MySQL
部署MySQL 使用Docker安装,仅仅需要一步即可,在命令行输入下面的命令 docker run -d \--name mysql \-p 3306:3306 \-e TZAsia/Shanghai \-e MYSQL_ROOT_PASSWORD123456 \mysql MySQL安装完毕!通过任意客户端工具即可连接到MySQL. 当我们执…...
力扣热题100_滑动窗口_3_无重复字符的最长子串
文章目录 题目链接解题思路解题代码 题目链接 3. 无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示…...

RM电控工程讲义
HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) 是一个回调函数,通常在STM32的HAL库中用于处理CAN(Controller Area Network)接收FIFO 0中的消息。当CAN接口在FIFO 0中有待处理的消息时,这个函数会被调用。 HAL库C…...

论文阅读:《Deep Learning-Based Human Pose Estimation: A Survey》——Part 1:2D HPE
目录 人体姿态识别概述 论文框架 HPE分类 人体建模模型 二维单人姿态估计 回归方法 目前发展 优化 基于热图的方法 基于CNN的几个网络 利用身体结构信息提供构建HPE网络 视频序列中的人体姿态估计 2D多人姿态识别 方法 自上而下 自下而上 2D HPE 总结 数据集…...
C语言——oj刷题——杨氏矩阵
目录 1. 理解杨氏矩形的特点 2. 实现杨氏矩形查找算法 3. 编写示例代码 当我们谈到杨氏矩形时,我们指的是一种在二维数组中查找目标元素的高效算法。它是由杨氏(Yan Shi)教授提出的,因此得名为杨氏矩形。 杨氏矩形问题的场景是…...
C++ 50道面试题
1. static关键字 1.全局static变量 存储位置:静态存储区,在程序运行期间一直存在 初始化: 未手动初始化的变量自动初始化为0 作用域: 从定义之处开始,到文件结束,仅能在本文件中使用 2.局部static变量…...
寒假学习记录14:JS字符串
目录 查找字符串中的特定元素 String.indexOf() (返回索引值) 截取字符串的一部分 .substring() (不影响原数组)(不允许负值) 截取字符串的一部分 .slice() (不影响原数…...

【数学建模】【2024年】【第40届】【MCM/ICM】【C题 网球运动中的“动量”】【解题思路】
一、题目 (一) 赛题原文 2024 MCM Problem C: Momentum in Tennis In the 2023 Wimbledon Gentlemen’s final, 20-year-old Spanish rising star Carlos Alcaraz defeated 36-year-old Novak Djokovic. The loss was Djokovic’s first at Wimbledon…...

无人驾驶LQR控制算法 c++ 实现
参考博客: (1)LQR的理解与运用 第一期——理解篇 (2)线性二次型调节器(LQR)原理详解 (3)LQR控制基本原理(包括Riccati方程具体推导过程) (4)【基础…...

Karnaugh map (卡诺图)
【Leetcode】 289. Game of Life According to Wikipedia’s article: “The Game of Life, also known simply as Life, is a cellular automaton devised by the British mathematician John Horton Conway in 1970.” The board is made up of an m x n grid of cells, wh…...
C# CAD 框选pdf输出
在C#中进行AutoCAD二次开发时,实现框选(窗口选择)实体并输出这些实体到PDF文件通常涉及以下步骤: public ObjectIdCollection GetSelectedEntities() {using (var acTrans HostApplicationServices.WorkingDatabase.Transaction…...

【Linux】 Linux 小项目—— 进度条
进度条 基础知识1 \r && \n2 行缓冲区3 函数介绍 进度条实现版本 1代码实现运行效果 版本2 Thanks♪(・ω・)ノ谢谢阅读!!!下一篇文章见!!! 基础知识 1 \r &&a…...

Sora和Pika,RunwayMl,Stable Video对比!网友:Sora真王者,其他都是弟
大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识…...

Go内存优化与垃圾收集
Go提供了自动化的内存管理机制,但在某些情况下需要更精细的微调从而避免发生OOM错误。本文介绍了如何通过微调GOGC和GOMEMLIMIT在性能和内存效率之间取得平衡,并尽量避免OOM的产生。原文: Memory Optimization and Garbage Collector Management in Go 本…...

【Spring】Bean 的生命周期
一、Bean 的生命周期 Spring 其实就是一个管理 Bean 对象的工厂,它负责对象的创建,对象的销毁等 所谓的生命周期就是:对象从创建开始到最终销毁的整个过程 什么时候创建 Bean 对象?创建 Bean 对象的前后会调用什么方法…...

云计算基础-存储基础
存储概念 什么是存储: 存储就是根据不同的应用程序环境,通过采取合理、安全、有效的方式将数据保存到某些介质上,并能保证有效的访问,存储的本质是记录信息的载体。 存储的特性: 数据临时或长期驻留的物理介质需要保…...

问题:人的安全知识和技能是天生的。() #媒体#知识分享#学习方法
问题:人的安全知识和技能是天生的。() 人的安全知识和技能是天生的。() 参考答案如图所示 问题:()是党和国家的根本所在、命脉所在,是全国各族人民的利益所在、幸福所在。 A.人民当家作主 B.坚持和完善…...

【数据分享】2001~2020年青藏高原植被净初级生产力数据集
各位同学们好,今天和大伙儿分享的是2001~2020年青藏高原植被净初级生产力数据集。如果大家有下载处理数据等方面的问题,您可以私信或评论。 朱军涛. (2022). 青藏高原植被净初级生产力数据集(2001-2020). 国家青藏高原数据中心. …...

【Spring MVC篇】返回响应
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【Spring MVC】 本专栏旨在分享学习Spring MVC的一点学习心得,欢迎大家在评论区交流讨论💌 目录 一、返回静态页面…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...