33-ESP32-蓝牙篇-00

ops/2024/11/30 17:52:24/

理解蓝牙技术及其协议栈结构

介绍

在物联网(IoT)领域,蓝牙技术因其低功耗和易用性而成为连接设备的首选无线通信协议之一。ESP32 支持双模蓝牙 4.2,并且已经获得双模蓝牙 4.2 认证和蓝牙 LE 5.0 认证

一、蓝牙技术概述

什么是蓝牙?

蓝牙是一种用于短距离数据交换的无线技术标准。它在 2.4GHz ISM(工业、科学和医疗)频段上工作,使用跳频技术以提高抗干扰能力。蓝牙协议分为以下两种类型:

  • 经典蓝牙(Bluetooth Classic):适用于大数据传输,例如音频流传输。
  • 蓝牙低功耗(Bluetooth Low Energy, BLE):适用于小数据包传输,强调低功耗,是物联网设备的首选技术。

够同时支持经典蓝牙(Bluetooth BR/EDR)和低功耗蓝牙(Bluetooth LE)即双蓝牙模式


二、蓝牙协议栈简介

蓝牙技术通过 协议栈 实现其复杂的功能,协议栈是一组分层的软件框架,涵盖了从底层硬件通信到高层应用的所有功能。以下是 ESP32 提供的蓝牙协议栈结构:

ESP32 蓝牙协议栈结构图

在这里插入图片描述

ESP32 的蓝牙协议栈分为四层:应用层(Applications)配置文件层(Profiles)主机层(Hosts)控制器层(Controller)。其中最主要的是 主机(Host)控制器(Controller) 这两大板块。这两大部分通过HCI(Host Controller Interface)相互通信。控制器负责处理底层硬件相关的任务,如物理链路管理、基带处理等;而主机则负责上层协议的实现,比如逻辑链路控制、服务发现等与软件相关。

控制器(Controller)

在这里插入图片描述
这张图展示了蓝牙控制器的架构及其各个组成部分,

  • 物理层 (PHY, Physical Layer) 主要负责在物理信道上收发蓝牙数据包

  • 链路控制 (LC, Link Controller) 根据当前物理通道、逻辑通道以及逻辑传输的参数将数据有效载荷组装成蓝牙包,实现流控、应答、重传等机制。

  • 基带资源管理 (BRM, Baseband Resource Manager) 管理射频资源,确保资源的有效分配和使用。

  • 设备管理 (DM, Device Manager) 控制蓝牙设备的通用行为,包括搜索和连接到其他蓝牙设备,控制本地蓝牙设备的连接发现模式(可连接、可发现),控制本地蓝牙设备属性(如设备名称、连接密钥等)。

  • 链路管理 (LM, Link Manager) 负责创建、修改、释放蓝牙逻辑连接,维护蓝牙设备之间物理连接的参数,通过链路管理协议(LMP)和链路层协议(LL)完成。

  • 主机控制器接口 (HCI, Host Controller Interface) 作为主机与控制器之间的桥梁,使主机能够向控制器发送命令并接收来自控制器的信息。支持的硬件通信协议:包括USB、UART、SDIO等。

主机(Host)

在这里插入图片描述
这张图展示了蓝牙主机(Host)的软件实现架构,特别是针对低功耗蓝牙(BLE)的协议栈。

  • L2CAP (Logical Link Control and Adaptation Protocol) 负责创建、管理、释放通道,统一管理调度通道上传递的分组数据单元(PDU),提高服务质量(QoS),对HCI层进行传输流控、重传等机制。

  • SDP (Service Discovery Protocol) 发现其他蓝牙设备提供的profile以及profile特性,对自己感兴趣的蓝牙profile发起连接动作。

  • SMP (Security Manager Protocol) 基于专用的L2CAP通道,用于生成加密和识别用的密钥。

  • ATT 设备的数据库,由属性句柄(属性表下标索引),属性类型(由UUID定义),属性值以及访问权限组成

  • GAP (Generic Access Profile) 控制本地蓝牙设备的连接发现模式(可连接、可发现),控制本地蓝牙设备属性(如设备名称、连接密钥等)。

  • GATT (Generic Attribute Profile) 定义了两个角色:服务器(GATTS)和客户端(GATTC)。服务器提供数据,客户端访问数据。

总结

参考:
【ESP32_8266_BT篇(一)】蓝牙基础


http://www.ppmy.cn/ops/137987.html

相关文章

node.js @ffmpeg-installer/ffmpeg 桌面推流

//安装npm install --save ffmpeg-installer/ffmpeg //stream.js // 引入所需模块 const ffmpeg require(ffmpeg-installer/ffmpeg); const { exec } require(child_process); // 设置 FFmpeg 路径 const ffmpegPath ffmpeg.path; const rtmpUrl "rtmp://localhost…

多点DMALL启动招股:将在港交所上市,聚焦数字零售服务

近日,多点数智有限公司(Dmall Inc.,下称“多点”或“多点DMALL”)发布全球发售文件,于11月28日至12月3日招股,预计将于2024年12月6日在港交所主板挂牌上市。 招股书显示,多点DMALL本次全球发售的…

Qt 窗口操作函数(置顶、全屏,最大化最小化按钮设置等)

一、窗口置顶 与 取消置顶 void MainWindow::on_windowTopButton_clicked() {if (m_flags NULL){m_flags windowFlags();setWindowFlags(m_flags | Qt::WindowStaysOnTopHint);this->show();}else{m_flags NULL;setWindowFlags(m_flags);this->show();} }二、全屏显示…

【bug记录10】同一iOS webview页面中相同的两个svg图标出现部分显示或全部不显示的情况

一、问题背景 在vue项目中,同一页面中直接复制粘贴了两个相同的svg代码嵌入到html中, 在chrome浏览器中显示良好; 但是在Safari浏览器 或者 iOS WKwebview中,出现只显示一个svg或者两个都不显示的情况,但是绑定在sv…

CrystalDiskInfo:硬盘健康监测工具简介和下载

原论坛给你更好的阅读体验:CrystalDiskInfo:硬盘健康监测工具简介和下载 | 波波论坛 引言 在日常使用电脑时,硬盘的健康状态对于系统的稳定性和数据的安全性至关重要。硬盘出现故障可能会导致数据丢失,严重时甚至会使整个系统无…

【快速幂】算法

2024 - 11 - 26 - 第 33 篇 - 算法笔记 C、快速幂算法 作者(Author): 郑龙浩 / 仟濹(CSDN账号名) 快速幂算法 一、为什么接触这个算法 在做 洛谷P1045 这个算法题的时候,我发现用 普通的高精度算法,依然无法解决大数计算使用内存太大 的问题&#xff…

24/11/29 Vite

安装nodejs 直接下一步 node.js中自带NPM包(管理js库文件)管理工具 测试NPM命令 npm -v 检查版本 npm config set registry https://registry.npmmirror.com 设置远程仓库 2.安装vite vite是前端服务的工具集 vue团队主持开发 Vite 官网 使用vite安装命令 这个命令是安…

CSS浮动属性

Display 文档流 文档流是文档中可显示对象在排列时所占用的位置/空间 例如:块元素自上而下摆放,内联元素,从左到右摆放 标准流里面的限制非常多,导致很多页面效果无法实现 高矮不齐,底边对齐 空白折叠现象 无论多少…