蓝牙低功耗基-蓝牙广播

news2026/4/30 19:48:34
概述广告功能是任何蓝牙LE连接中的一个关键要素。对不同的广告参数、其含义以及如何通过调整这些参数来实现应用目标(无论是降低功耗、提高可靠性还是加快设备发现过程)建立基本的理解是十分重要的。蓝牙LE中的广告功能主要用于两个主要目的。一是向邻近设备广播数据二是宣传自身存在状态以便其他设备与之建立连接。在本课程中我们将首先考察广告过程。随后将了解不同类型的广告以及广告数据包的结构。本课程仅涵盖传统广告相关内容。在本课的实践部分我们首先将学习如何将设备配置为广播器以便能够广播广告数据包而您的智能手机将对此进行扫描。随后我们将学习如何动态配置广告数据包的内容。最后我们将探讨可连接式广告以及如何手动配置外围设备的蓝牙低功耗地址。目标了解传统广播过程的基本原理以及涉及的不同广播参数(广告间隔、发射功率、信道和使用的 PHY了解广播类型(可连接与不可连接、可扫描与不可扫描等)检查蓝牙低功耗地址类型(公共、随机、静态、可解析等)学习如何在蓝牙低功耗(BluetoothLE)广播和UUID中包含数据。通过动手练习创建蓝牙LE信标。通过动手练习在设备发现阶段配置外设设备的广播数据包。广播过程广播和发现当蓝牙LE设备处于广播状态时它会发送广播数据包以宣告自身的存在并可能尝试与另一设备建立连接。这些广播数据包会按照广播间隔周期性地被发送出去。定义广播间隔:发送广播数据包的时间间隔。范围为20毫秒至10.24秒步长为0.625毫秒。广播间隔时间越短广播数据包出现的频率就越高从而也会消耗更多的电量。因此这里需要权衡的是电量消耗与广播数据包被扫描器接收的速度之间的平衡这通常被称为可发现性。为避免数据包冲突每个广告数据包在发送前都会随机延迟0-10毫秒。此举确保了拥有相同广告间隔的设备不会始终处于数据包冲突的状态。广播信道:蓝牙低功耗设备通过40个不同的频率信道进行通信。这些信道被划分为3个主要广播信道和37个次要广播信道。主要广播信道是主要用于广播目的的信道。次要广播信道有时也可用于广播目的但主要是在建立连接后用于数据传输。在整个课程中我们将仅关注主要广告信道。为确保一定程度的冗余性广播数据包会同时发送至所有三个主要的广播信道一一信道37、38和39。与此同时一台扫描设备将扫描这3个信道以查找广播设备。由于广播包对于建立连接性至关重要因此主要广播通道均经过精心挑选。尽管通道37、38和39均为连续编号但它们实际上并非相邻通道这一点从上方图表中即可看出。这三条通道之间的分隔旨在避免相邻频带间的干扰。此外这三条特定通道受使用ISM频段的其它技术所产生的噪声影响也最为轻微例如Wi-Fi技术。扫描间隔和扫描窗口与广播时段类似扫描间隔指的是扫描器对广播数据包进行扫描的频率。扫描窗口则指扫描器用于扫描数据包所花费的时间这在实际操作中代表了设备在每次扫描间隔内处于扫描状态与非扫描状态之间的轮值周期。扫描间隔:设备扫描广播数据包的时间间隔。扫描窗口:设备在每个扫描间隔内用于扫描数据包所花费的时间。两者范围从2.5毫秒到10.24秒步长为0.625毫秒。由于设备在三个不同的广播频道上进行广播扫描器将在每次扫描间隔后切换频道从而在各个广播频道之间轮换。较短的广播间隔会导致发现时间缩短但同时也会增加功耗。与此类似较高的扫描窗口与扫描间隔比虽然能缩短发现时间但也会增加功耗。连接所需时间与功耗之间的平衡始终是一个取舍问题。但如果你同时控制了扫描器和周边设备便能够选择那些彼此配合得宜的间隔时间。需注意的是整体扫描过程所消耗的电量远多于广告过程因此扫描器/中心设备通常配备的电池容量更大。扫描请求和响应当某个外围设备正在发送广播信息时中心设备也可选择向该外围设备发送扫描请求以获取广播数据包中未包含的额外信息。如果扫描请求被接受外围设备便会以所谓的扫描响应的形式做出回应同样会通过上述三大主要广播通道讲行传输扫描请求:中央设备向外围设备发送的消息用于请求广播数据包中不存在的附加信息。扫描响应:作为对扫描请求的回复发送的消息包含额外的用户数据。这是一种外围设备无需首先与中心建立连接即可发送额外数据的方法。若外围设备再无其他信息可提供它亦可选择回传一个空扫描响应。增加外围设备一次可广播的数据量的另一种方法是利用一种名为“扩展广告”的功能。借助这一功能在主广告频道上广播的广告数据包会指向在辅助广告频道上所广播的补充信息。扩展广告超出了本课程的范围我们仅会专注于传统广告。广播类型外设可以通过多种方式进行广告宣传定义可连接性与不可连接性:确定中央设备是否可以连接到外围设备。可扫描与不可扫描:确定外设是否接受来自扫描仪的扫描请求。定向与非定向:确定广告数据包是否针对特定扫描仪。在传统广告中需要涵盖四种主要的广告类型还有一个用于扫描响应但在此不作覆盖的第五种。Scannable and connectable (ADV_IND):这是最普遍的一种广告类型。如果某外设设备采用这种类型的广播方式就意味着它既具备可扫描性又具备可连接性。这意味着该外设设备在宣传自身存在的同时还允许中心设备发送扫描请求并会以扫描响应(由此具备可扫描性)的形式做出回应随后再建立连接(由此具备可连接性)Directed connectable (ADV_DIRECT_IND): 这种广播类型适用于定向广播场景即广播发布者不接受扫描请求的情况。它属于定向、可连接但不可扫描的类型。这适用于广播发布者已知晓扫描设备且仅希望快速重新连接的情况。此类情形的一个典型例子是蓝牙鼠标与电脑的连接中断后鼠标仅希望再次重新连接。在这种情况下无需接受扫描请求发送定向广播包以缩短连接过程更为便捷。Non-connectable and scannable (ADV_SCAN_IND):使用此类广播的发布者仅会接受扫描请求但不会允许与之建立连接(因此为不可连接型)Non-connectable and non-scannable (ADV_NONCONN_IND):此类广播既不接受扫描请求也不允许建立连接。这类广播的典型应用场景是信标设备在此类设备中设备无需将无线电信号模式切换为接收模式因为它们并不允许接收任何数据这进而有助于降低电池消耗。如你所见广播类型可分为可连接型或不可连接型、可扫描型或不可扫描型、定向型或非定向型。下表对四种传统广播类型及其特性进行了概述。ConnectableScannableDirectedADV_INDxxADV_DIRECT_INDxxADV_SCAN_INDxADV_NONCONN_IND蓝牙地址每一款蓝牙LE设备都会被赋予一个独特的48位地址进行识别。蓝牙地址被划分为公共或随机两类。随机地址又进一步细分为静态或私有两种类型这取决于地址是否发生变化。最后私有地址可分为可解析和不可解析两种情况。下图展示了蓝牙地址的分类方式。请注意随机和私有地址仅属于分类类型而非实际地址类型。蓝牙LE设备至少使用以下地址类型之一:Public addressRandom static addressRandom private resolvableRandom private non-resolvable注释分配给设备的公共地址来自与MAC地址相同的IEEE地址池(例如用于以太网、Wi-Fi)因此也常被称为蓝牙MAC地址。Public address公共地址是一种固定地址它由制造商在设备出厂时进行编程设定。该地址必须向IEEE注册管理机构进行登记且对于该特定设备而言具有全球唯一性且在设备的使用寿命内不可更改。获取此类地址需缴纳相应费用。Random address随机地址的使用频率要高得多因为它无需向IEEE注册且可由用户手动进行配置。这也是nRF Connect SDK中示例中的默认地址类型。它既可能是在设备内部进行编程的也可能是在运行时创建的。用户可以选择拥有静态地址或私有地址。Random static address一个随机的静态地址可被分配并固定于设备整个生命周期内。它可在启动时进行更改但运行期间则不可变更相较于公共地址这是一种成本较低的替代方案因为你无需对其进行注册。如上所述所有蓝牙低功耗设备必须使用公共地址或随机静态地址其中后者更为常见。Random private address当设备希望保护其隐私时可以使用私有地址。这是一种周期性变化的地址用于隐藏设备的身份并防止设备追踪。随机私有地址可以是可解析的或不可解析的如下所述。Resolvable random private address可解析的私有地址如其名称所示确实能够按照预期进行解析。由于扫描设备事先共享了密钥他们每次该地址变更时均可通过此密钥来识别新地址。此事先共享的密钥即为身份解析密钥(IRK)既用于生成又用于解析随机地址这个随机地址基本上仅被对端用于解析蓝牙LE设备的实际地址。该地址仍有可能是公共地址或随机静态地址。IRK使得对端能够将随机的私有地址转换为设备的真实蓝牙LE地址。Non-resolvable random private address不可解析的私有地址无法被其他设备解析仅用于防止追踪。这种类型的地址不常使用。总结来说有四种不同的地址类型:Public address:由制造商编程到设备中并在IEEE注册。Random static address:可在设备启动时配置并在整个设备生命周期内保持固定。无需向IEEE注册是公共地址的常见替代方案。Resolvable random private address:(可选)一个周期性变化的地址但可通过预共享密钥解析。Non-resolvable random private address:周期性变化且不可解析的地址。广播包让我们来分析一下广播数据包是如何结构化的。蓝牙低能耗(BLE)数据包如下图所示其主要部分属于所谓的协议数据单元(PDU)。PDU包含的是广播PDU(有时也称为广播信道PDU)或数据PDU(有时称为数据信道PDU)具体取决于该BLE数据包是用于广播还是数据传输。如图所示广播PDU由头部和负载组成。广播PDU的头部部分由以下组成:PDU Type:确定我们在广告类型中讨论的广告类型例如ADV_IND。RFU:预留用于未来使用。ChSel:如果支持LE信道选择算法#2则设置为1。TxAdd(发送地址):0或1取决于发送地址是公开还是随机。RxAdd(接收地址):0或1取决于接收地址是公开的还是随机的。Length:有效载荷的长度有关这些字段的更多信息可随时在蓝牙SIG网站上的BluetoothLE核心规范中找到。广播PDU的有效载荷分为两部分前6字节表示广播商地址(AdvA)其余部分用于实际广播数据(AdyData)AdvA:广告设备的蓝牙地址AdvData:广告数据包注释载荷结构取决于广告的类型。在进行定向广告(ADV_DIRECT_IND)时还需留出一些空间来指定接收方的地址。因此AdvData文件标识被替换为一个长度为6字节的接收方地址字段。此类广告包(ADVDIRECT_IND)并不包含载荷内容。广告数据部分如图所示。广播数据包由多个结构组成这些结构统称为广播数据结构(AD结构)。每个AD结构都包含一个长度字段、一个用于指定类型(AD类型)的字段以及一个用于存放实际数据本身的字段。需要注意的是最常见的AD类型长度为1个字节。广告数据类型由蓝牙规范定义并在nRFConnect SDK中在此处的“EIR/AD数据类型定义”下进行文档记录。以下是几个常用的数据类型我们将在后续练习中使用。Complete local name (BT_DATA_NAME_COMPLETE):这仅仅是人类用户在扫描附近设备时看到的设备名称(例如通过智能手机)。Shortened local name (BT_DATA_NAME_SHORTENED):完整本地名称的简短版本。Uniform Resource Identifier (BT_DATA_URI):用于宣传像网站地址(URL)这样的URI。Service UUID: 服务唯一标识符是一个对特定服务而言全局唯一的数字。它可以帮助扫描器识别出值得连接的设备。Manufacturer Specific Data (BT_DATA_MANUFACTURER_DATA):这是一种流行的数据类型使公司能够定义自己的自定义广告数据例如iBeacon的情况。Flags: 可标记该设备特定属性或操作模式的1位变量。这是一个设置标志位BT_LE_AD_NO_BREDR的广告数据结构示例Flags广告标志是封装在一个字节中的单比特标志意味着最多可以设置8个标志位。我们将来看看其中一些最常用的标志位。BT_LE_AD_LIMITED:设置LE有限可发现模式该模式与可连接式广播配合使用用以向中心方示意设备仅在特定时段内可用随后广播时间将超时BT_LE_AD_GENERAL:设置LE通用可发现模式用于可连接广告中表示广播在较长时间内可用(超时0)BT_LE_AD_NO_BREDR:表示不支持经典蓝牙(BR/EDR)BT_LE_AD_LIMITED 和 BT_LE_AD_GENERAL 都适用于处于外围角色的设备。设置广播练习在本练习中我们将介绍nRF Connect SDK中的核心Bluetooth LE APl。首先将学习如何启用蓝牙LE堆栈及其相关的默认配置。然后我们将深入探讨如何配置硬件以广播不可连接的广告使设备作为信标运行以便邻近的扫描设备能够看到数据。练习步骤

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2534814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…