ESP32-WROVER-E蓝牙学习笔记(1)

1、概述

1.1蓝牙结构

    蓝⽛牙是⼀一种短距通信系统,其关键特性包括鲁棒性、低功耗、低成本等。蓝⽛牙系统分为两种不不同的技术:经典蓝⽛牙 (Classic Bluetooth) 和蓝⽛牙低功耗 (Bluetooth Low Energy)。

 

    整体结构上,蓝⽛牙可分为控制器器 (Controller) 和主机 (Host) 两⼤大部分:控制器器包括了了PHY、 Baseband、 Link Controller、 Link Manager、 Device Manager、 HCI 等模块,⽤用于硬件接⼝口管理理、链路路管理理等等;主机则包括了了 L2CAP、 SMP、 SDP、 ATT、 GATT、 GAP 以及各种规范,构建了了向应⽤用层提供接⼝口的基础,⽅方便便应⽤用层对蓝⽛牙系统的访问。主机可以与控制器器运⾏行行在同⼀一个宿主上,也可以分布在不不同的宿主上。

1.2 框架

1.2.1控制器

ESP32 的控制器器同时⽀支持 Classic BT 和 BLE,⽀支持的蓝⽛牙版本为 4.2。控制器器中主要集成了了 H4 协议、 HCI、 Link Manager、 Link Controller、 Device Manager、 HW Interface 等功能

2、经典蓝牙

2.1概述

    ESP-IDF 中的蓝⽛牙主机协议栈源于 BLUEDROID,后经过改良以配合嵌⼊入式系统的应⽤用。在底层中,蓝⽛牙主机协议栈通过虚拟 HCI 接⼝口,与蓝⽛牙双模控制器器进⾏行行通信;在上层中,蓝⽛牙主机协议栈将为⽤用户应⽤用程序提供⽤用于协议栈管理理和规范的 API。
    协议 (Protocol) 定义了了完成特定功能的消息格式和过程,例例如数据传输、链路路控制、安全服务和服务信息交换等。另⼀一⽅方⾯面,蓝⽛牙规范 (Profile) 则定义了了蓝⽛牙系统中从 PHY 到L2CAP 及核⼼心规范外的其他协议所需的功能和特性。
目前,主机协议栈⽀支持的经典蓝⽛牙规范和协议如下。
• 规范: GAP、 A2DP (SNK)、 AVRCP (CT)
• 协议: L2CAP、 SDP、 AVDTP、 AVCTP

如图 2-1 所示, L2CAP 和 SDP 是经典蓝⽛牙最⼩小主机协议栈的必备组成部分, AVDTP、AV/C 和 AVCTP 并不不属于核⼼心规范,仅⽤用于特定规范

2.2.1 L2CAP

    “蓝⽛牙逻辑链路路控制和适配协议” (L2CAP) 是 OSI 2 层协议,⽀支持上层的协议复⽤用、分段和重组及服务质量量信息的传递。 L2CAP 可以让不不同的应⽤用程序共享⼀一条 ACL-U 逻辑链路路。应用程序和服务协议可通过⼀一个⾯面向信道的接⼝口,与 L2CAP 进⾏行行交互,从⽽而与其他设备上的等效实体进⾏行行连接。
    L2CAP 信道共⽀支持 6 种模式,可通过 L2CAP 信道配置过程进⾏行行选择,不不同模式的应⽤用场合不不同,主要差别在于可提供的 QoS 不不同。这些模式分别是:
基本 L2CAP 模式
• 流量量控制模式
• 重传模式
• 加强重传模式
• 流模式
• 基于 LE Credit 的流量量控制模式
其中, ACL-U 逻辑链路路⽀支持的操作模式包括基本 L2CAP 模式、加强重传模式和流模式。L2CAP 信道为⽀支持的固定信道,也⽀支持“帧校验序列列” (FCS)

2.2.2 SDP

服务发现协议 (SDP) 允许应用程序发现其他对等蓝牙设备提供的服务,并确定可用服务的特征。 SDP 包含 SDP 服务器器和 SDP 客户端之间的通信。服务器维护一个描述服务特性的服务记录表。客户端可通过发出 SDP 请求,从服务器器维护的服务记录表中进行行信息检索。
SDP 客户端和服务器器都部署在主机协议栈中,该模块仅供 A2DP 和 AVRCP 等规范使⽤用,⽬目前并不不为⽤用户应⽤用程序提供 API
 


2.2.3 GAP

通⽤用访问规范 (GAP) 可提供有关设备可发现性、可连接性和安全性的模式和过程描述。目前,经典蓝⽛牙主机协议栈仅提供少数⼏几个 GAP API。应⽤用程序可以将这些 API ⽤用作“被动”设备,被对等蓝⽛牙设备发现并连接。然⽽而,⽬目前暂不不向客户(⽤用户应⽤用程序)提供用于发起问询 (Inquiry) 的 API。
 

2.2.4 A2DP 和 AVRCP

“高级音频分发规范” (Advanced Audio Distribution Profile, A2DP) 定义了了在 ACL 信道上,实现⾼高质量量单声道或⽴立体声⾳音频内容传输的协议和过程。 A2DP 负责处理音频流,通常与“音频/视频远程控制规范” (AVRCP) (包括音频/视频控制功能)一起使用。
 

3、低功耗蓝牙

3.1 GAP

3.1.3 概述

主要介绍了了 ESP32 BLE 通⽤用访问规范 (GAP) 接⼝口 API 的实现和使⽤用流程, GAP 协议层定义了了 BLE 设备的发现流程,设备管理理和设备连接的建立
BLE GAP 协议层采⽤用 API 调⽤用和事件 (Event) 返回的设计模式,通过事件返回来获取 API在协议栈的处理理结果。当对端设备主动发起请求时,也是通过事件返回获取对端设备的状态。 BLE 设备定义了了四类 GAP ⻆角⾊色:
• 广播者 (Broadcaster):处于这种角色的设备通过发送广播 (Advertising) 让接收者发现⾃自⼰己。这种角色只能发广播,不能被连接。
• 观察者 (Observer):处于这种⻆角色的设备通过接收广播事件并发送扫描 (Scan) 请求。这种角色只能发送扫描请求,不能被连接。
• 外围设备 (Peripheral):当广播者接受了了观察者发来的连接请求后就会进入这种角色。当设备进入了了这种⻆角色之后,将会作为从设备 (Slave) 在链路路中进行行通信。
• 中央设备 (Central):当观察者主动进行初始化,并建立一个物理理链路路时就会进入这种⻆角⾊色。这种⻆角色在链路路中同样被称为主设备 (Master)。
 

3.2  GATT

BLE ⾥里里⾯面的数据以属性 (Attribute) ⽅方式存在,每条属性由四个元素组成:
• 属性句句柄 (Attribute Handle):正如我们可以使用内存地址查找内存中的内容⼀一样,ATT 属性的句句柄也可以协助我们找到相应的属性,例如第一个属性的句句柄是0x0001,第二个属性的句句柄是 0x0002,以此类推,最⼤大可以到 0xFFFF。
• 属性类型 (Attribute UUID):每个数据有自己需要代表的意思,例如表示温度、发射功率、电池等等各种各样的信息。蓝牙组织 (Bluetooth SIG) 对常用的一些数据类型进行了了归类,赋予不不同的数据类型不不同的标识码 (UUID)。例例如 0x2A09 表示电池信息, 0x2A6E 表示温度信息。 UUID 可以是 16 ⽐比特的 (16-bit UUID),也可以是 128 比特的 (128-bit UUID)。
• 属性值 (Attribute Value):属性值是每个属性真正要承载的信息,其他 3 个元素都是为了了让对方能够更好地获取属性值。有些属性的长度是固定的,例例如电池属性(Battery Level) 的长度只有 1 个字节,因为需要表示的数据仅有 0~100%,而 1 个字节足以表示 1~100 的范围;而有些属性的长度是可变的,例如基于 BLE 实现的透传模块。
• 属性许可 (Attribute Permissions):每个属性对各自的属性值有相应的访问限制,比如有些属性是可读的、有些是可写的、有些是可读又可写的等等。拥有数据的一方可以通过属性许可,控制本地数据的可读写属性。

我们把存有数据(即属性)的设备叫做服务器器 (Server),⽽而将获取别⼈人设备数据的设备叫做客户端 (Client)。下⾯面是服务器器和客户端间的常⽤用操作:
客户端给服务端发数据:通过对服务器器的数据进行写操作 (Write),来完成数据发送工作。写操作分两种,一种是写入请求 (Write Request),一种是写⼊入命令 (Write Command),两者的主要区别是前者需要对⽅方回复响应 (Write Response),而后者不不需要对方回复响应。
服务端给客户端发数据:主要通过服务端指示 (Indication) 或者通知 (Notification) 的形式,实现将服务端更新的数据发给客户端。与写操作类似,指示和通知的主要区
别是前者需要对方设备在收到数据指示后,进行行回复 (Confirmation)。
• 客户端也可以主动通过读操作读取服务端的数据

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值