ESP32学习笔记_Bluetooth(2)——Bluetooth Stack、GAP

server/2025/2/25 9:17:56/

文章目录

    • Bluetooth Stack
    • GAP
      • Roles when Operating over BR/EDR Physical Transport
      • Roles when Operating over an LE Physical Transport
        • Defines compliance requirements
        • Device Connection Establishment Process

摘要:这篇博文介绍了 ESP32 蓝牙协议栈的相关内容,主要包括 ESP-IDF 支持的两种蓝牙协议栈(Bluedroid 和 Apache NimBLE),它们各自的特点和适用场景;以及蓝牙系统的整体结构,分为控制器和主机两部分,以及它们的功能模块;最后描述了通用访问配置文件(GAP)的目的、配置文件角色、可发现模式和程序、连接模式和程序、安全模式和程序,以及设备连接建立过程


参考资料:《Bluetooth Core Specification v 5.0》

《Supplement to the Bluetooth Core Specification》

《Assigned Numbers》

ESP32蓝牙教程 Michael_ee

蓝牙 API - ESP32 - — ESP-IDF 编程指南 latest 文档》



Bluetooth Stack

ESP-IDF 目前支持两个主机堆栈(蓝牙协议栈),基于 Bluedroid 的堆栈(默认)支持传统蓝牙和低功耗蓝牙 (Bluetooth® LE),而基于 Apache NimBLE 的堆栈仅支持低功耗蓝牙

  • 对于同时涉及传统蓝牙和低功耗蓝牙的用例,应该选用 Bluedroid
  • 对于仅涉及低功耗蓝牙的用例,建议选用 NimBLE,在代码占用和运行时,NimBLE 对内存的要求较低,因此适用于此类场景

Bluedroid 是 Android 平台和 ESP32 上常用的蓝牙协议栈。它提供了完整的蓝牙主机和控制器功能,支持蓝牙经典(BR/EDR)和蓝牙低功耗(BLE);Bluedroid 已被广泛应用于 Android 设备和 ESP32 系统,能够通过提供标准的 HCI 接口与硬件控制器通信;Bluedroid 是一个稳定的协议栈,但由于它具有较大的代码库和相对较高的资源需求,可能不适合资源有限的嵌入式设备

Apache MyNewt NimBLE 是一个轻量级、灵活、高度可配置且符合 Bluetooth® SIG 认证的蓝牙低功耗 (Bluetooth LE) 协议栈,提供主机和控制器功能,专注于低功耗蓝牙设备的高效能实现,与 Bluedroid 不同,NimBLE 更加简化,旨在提供更好的性能和更少的内存占用,适用于嵌入式应用和低功耗设备

ESP-IDF 支持专为 ESP32 平台和 FreeRTOS 移植的 NimBLE 主机栈,底层控制器与 Bluedroid 中使用的相同,提供 VHCI 接口

ESP-IDF 支持大多数 NimBLE 特性,包括蓝牙低功耗网状网络 (Bluetooth Low Energy Mesh),通过保留 NimBLE 所有现有 API 并提供一个统一的 ESP-NimBLE API 用于初始化,移植层变得更简洁,从而简化了应用开发者的工作

在这里插入图片描述

图源:NimBLE-based Host APIs - ESP32 - — ESP-IDF 编程指南 latest 文档
BLE User Guide — Apache Mynewt latest documentation

从整体结构上,蓝牙可分为控制器 (Controller) 和主机 (Host) 两大部分:

  • 控制器包括了以下模块:PHY、Baseband、Link Controller、Link Manager、Device Manager、HCI 等,这些模块用于硬件接口管理、链路管理等功能
  • 主机则包括了以下模块:L2CAP、SMP、SDP、ATT、GATT、GAP,这些模块构建了向应用层提供接口的基础,方便应用层对蓝牙系统的访问

主机可以与控制器运行在同一个宿主上,也可以分布在不同的宿主上
在这里插入图片描述

图源:esp32_bluetooth_architecture_cn
通过软硬件分层的设计,底层不变,可以方便的切换上层程序(应用层软件)

场景一(ESP-IDF 默认)
ESP32 的系统上,选择 Bluedroid 为蓝牙主机,并通过 VHCI(软件实现的虚拟 HCI 接口)接口,访问控制器。此场景下,Bluedroid 和控制器都运行在同一宿主上(即 ESP32 芯片),不需要额外连接运行蓝牙主机的 PC 或其它主机设备

场景二
ESP32 上运行控制器(此时设备将单纯作为蓝牙控制器使用),外接一个运行蓝牙主机的设备(如运行 BlueZ 的 Linux PC、运行 Bluedroid 的 Android 等)

此场景下,控制器和主机运行在不同宿主上,与手机、PAD、PC 的使用方式比较类似

场景三
此场景与场景二类似,特别之处在于,在 BQB(或其它认证)的控制器测试下,可以将 ESP32 作为 DUT(Device Under Test),用 UART 作为 IO 接口,接上认证测试的 PC 机,即可完成认证

在这里插入图片描述

IDF 中的 host、controller 目录,其中存放有不同芯片型号相应的库文件及接口等

路径:idf 安装路径\v5.3.1\esp-idf\components\bt



GAP

关于 GAP 在蓝牙协议栈中的作用,见ESP32学习笔记_Bluetooth(1)——蓝牙技术与 BLE 通信机制简介中的 Core Architecture 部分

这部分的原文,详见: 《Bluetooth Core Specification v 5.0》 Vol3 PartC
通用访问配置文件(Generic Access Profile,GAP)的目的如下:

  1. 引入与运输和应用配置文件使用的模式和访问程序相关的定义、建议和通用要求
  2. 描述设备在待机和连接状态下的行为,以保证蓝牙设备之间始终能够建立连接和通道,并且支持多配置文件操作。特别关注设备发现、链路建立和安全程序
  3. 规定用户界面方面的要求,主要是编码方案和过程与参数的命名,以确保用户体验

该配置文件的目的是描述:

  • 配置文件角色
  • 可发现模式和程序
  • 连接模式和程序
  • 安全模式和程序

在这里插入图片描述

GAP 与蓝牙底层架构的关系

图源:Bluetooth Core Specification v5.0

Roles when Operating over BR/EDR Physical Transport

BR/EDRBluetooth Radio/Enhanced Data Rate 的缩写,指的是蓝牙技术中的两种主要通信模式:

  • BR (Basic Rate)​基本速率,是蓝牙 1.x 版本中使用的传输速率,最高为 1 Mbps​
  • EDR (Enhanced Data Rate)​增强数据传输速率,是蓝牙 2.x 版本及更高版本中引入的,提供更高的传输速率,最高为 3 Mbps

BR/EDR 是蓝牙经典(Bluetooth Classic)模式的一部分,适用于需要较高数据传输速率的应用,如音频传输(例如蓝牙耳机)和文件传输


在 GAP 协议中,为了描述发生在 BR/EDR GAP 角色的两个设备之间的蓝牙通信,使用以下两个通用符号描述设备:

  • A-party A 方​链路建立时的分页设备(发起连接请求的设备)
  • B-party B 方​接收连接请求的设备

蓝牙GAP 协议中,“分页设备”(paging device)是指在进行蓝牙设备配对或连接时,发起连接请求的设备。分页设备通过广播其存在来寻找其他设备,并尝试建立一个连接

具体而言,“分页”(paging)指的是一种低功耗的搜索过程,设备会扫描特定的信道,并等待另一方设备响应以建立连接

在这里插入图片描述

该配置文件涵盖了由一个设备(A)发起,针对另一个设备(B)的程序,后者可能已经建立了蓝牙连接,也可能没有

图源:《Bluetooth Core Specification v5.0》

发起者和接受者通常根据此配置文件或引用此配置文件的其他配置文件执行通用程序;如果接受者同时根据多个配置文件操作,则此配置文件提供了处理这种情况的通用机制

Roles when Operating over an LE Physical Transport

LE 指的是 Bluetooth Low Energy蓝牙低功耗)技术

在 LE 通信中,有四种 GAP 角色定义:

  • 广播者
    • 在广播者角色下运行的设备是发送广告事件的设备,必须具有发射器,并且可以具有接收器
  • 观察者
    • 在观察者角色下运行的设备是接收广告事件的设备,必须具有接收器,并且可以具有发射器
  • 外设
    • 任何接受连接建立程序建立 LE 活动物理链路的设备被称为处于外设角色,运行在外设角色的设备将在链路层连接状态中处于从属角色,运行在外设角色的设备被称为外设,必须具有发射器和接收器
  • 中央设备
    • 支持中央角色的设备发起 LE 活动物理链路的建立,运行在中央角色的设备被称为中央设备。中央设备必须具有发射器和接收器


同时在多个 GAP 角色下运行
如果控制器支持,设备可以同时在多个GAP角色下运行,主机应在使用任何程序或模式之前,先读取控制器支持的链路层状态和状态组合

Defines compliance requirements

在这里插入图片描述

在这里插入图片描述

在 LE 物理传输上操作时,每个 GAP 角色的物理层和链路层功能的 GAP 遵从性要求

图源:Bluetooth Core Specification v5.0

符号释义

  • M​强制支持的功能
  • O​可选支持的功能
  • C​条件支持的功能
  • E​在配置文件角色中排除的功能
  • N/A​不适用的功能
  • C1​如果支持被动扫描,则主动扫描是可选的,否则主动扫描是强制的
  • C2​如果支持连接参数请求过程,则必选,否则可选

Device Connection Establishment Process
Sending data
Return data
A
Standby
Advertising
waiting
Connection
B
Standby
Scanning
Initiation
Connection
  1. 设备 A、B 进入空闲状态
  2. 在上层软件控制下,A 进入广播状态,向外界进入广播状态,B 进入扫描状态
  3. 当 B 扫描到数据后,进入初始化状态,发送请求连接的数据给 A
  4. 设备 A 返回数据给 B,进入连接状态
  5. B 收到返回的数据后,进入连接状态
  6. 两个设备相互交换数据

对于部分设备,可能不需要连接(如 BLE Beacon、BLE Sniffer)


http://www.ppmy.cn/server/170524.html

相关文章

web网络安全:SQL 注入攻击

SQL 注入攻击(SQL Injection)概述 SQL 注入(SQL Injection) 是Web应用程序中最常见的安全漏洞之一。攻击者通过在应用程序的输入字段中插入恶意SQL代码,能够操控数据库执行非预期操作,导致数据泄露、篡改甚…

unity学习51:所有UI的父物体:canvas画布

目录 1 下载资源 1.1 在window / Asset store下下载一套免费的UI资源 1.2 下载,导入import 1.3 导入后在 project / Asset下面可以看到 2 画布canvas,UI的父物体 2.1 创建canvas 2.1.1 画布的下面是 event system是UI相关的事件系统 2.2 canvas…

测试面试题:以一个登录窗口为例,设计一下登录界面测试的思路和方法

在测试登录窗口时,可以从 表单测试、 逻辑判断和 业务流程三个方面设计测试思路和方法。以下是一个详细的测试方案: 1. 表单测试 表单测试主要关注输入框、按钮等UI元素的正确性和用户体验。 测试点: 输入框测试 : * 或 • &#…

【Linux】初识进程概念与 fork 函数的应用

Linux相关知识点可以通过点击以下链接进行学习一起加油!初识指令指令进阶权限管理yum包管理与vim编辑器GCC/G编译器make与Makefile自动化构建GDB调试器与Git版本控制工具Linux下进度条冯诺依曼体系与计算机系统架构 进程是操作系统中资源分配和调度的核心单位&#…

【Python爬虫(63)】从0到1:打造图片与视频爬虫攻略

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取&#xff…

代码随想录第三十八天| 322. 零钱兑换 279.完全平方数 139.单词拆分 动态规划:关于多重背包,你该了解这些!

322. 零钱兑换 题目描述 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 你可以认为每种硬币的数量是无限的。 力扣题目链接 322. 零钱兑换 解题思路…

跟着李沐老师学习深度学习(十四)

注意力机制(Attention) 引入 心理学角度 动物需要在复杂环境下有效关注值得注意的点心理学框架:人类根据随意线索和不随意线索选择注意力 注意力机制 之前所涉及到的卷积、全连接、池化层都只考虑不随意线索而注意力机制则显示的考虑随意…

解锁健康密码,拥抱养生生活

在快节奏的现代生活中,健康养生愈发成为人们追求美好生活的关键。步入 2025 年,让我们从日常细节入手,开启一场充满活力的健康养生之旅。 饮食是养生的基石。一日三餐,合理搭配最为重要。多吃谷物杂粮,它们富含膳食纤维…