ESP-AT 当前仅支持 Bluetooth LE 4.2 协议规范,本文档中的描述仅适用于 Bluetooth LE protocol 4.2 协议规范。请参考 核心规范 4.2 获取更多信息。
Bluetooth LE 协议栈从下至上分为几个层级:Physical Layer (PHY)、Link Layer (LL)、Host Controller Interface (HCI)、Logical Link Control and Adaptation Protocol Layer (L2CAP)、Attribute Protocol (ATT)、Security Manager Protocol (SMP)、Generic Attribute Profile (GATT)、Generic Access Profile (GAP)。
PHY:PHY 层主要负责在物理信道上发送和接收信息包。Bluetooth LE 使用 40
LL:LL 层主要负责创建、修改和释放逻辑链路(以及,如果需要,它们相关的逻辑传输),以及与设备之间的物理链路相关的参数的更新。它控制链路层状态机处于 准备、广播、监听/扫描、发起连接、已连接
HCI:HCI 层向主机和控制器提供一个标准化的接口。该层可以由软件 API 实现或者使用硬件接口 UART、SPI、USB
L2CAP:L2CAP 层负责对主机和协议栈之间交换的数据进行协议复用能力、分段和重组操作。
ATT:ATT 层实现了属性服务器和属性客户端之间的点对点协议。ATT 客户端向 ATT 服务端发送命令、请求和确认。ATT 服务端向客户端发送响应、通知和指示。
SMP:SMP 层用于生成加密密钥和身份密钥。SMP 还管理加密密钥和身份密钥的存储,并负责生成随机地址并将随机地址解析为已知设备身份。
GATT:GATT 层表示属性服务器和可选的属性客户端的功能。该配置文件描述了属性服务器中使用的服务、特征和属性的层次结构。该层提供用于发现、读取、写入和指示服务特性和属性的接口。
GAP:GAP 层代表所有蓝牙设备通用的基本功能,例如传输、协议和应用程序配置文件使用的模式和访问程序。GAP 服务包括设备发现、连接模式、安全、身份验证、关联模型和服务发现。
Bluetooth LE 角色划分
在 Bluetooth LE 协议栈中不同的层级有不同的角色划分。这些角色划分互不影响。
- LL:设备可以划分为 主机 和 从机,从机广播,主机可以发起连接。
- GAP:定义了 4 种特定角色:广播者、观察者、外围设备 和 中心设备。
- GATT:设备可以分为 服务端 和 客户端。
重要
- 本文档中描述的 Bluetooth LE 服务端 和 Bluetooth LE 客户端 都是 GATT
- 当前,ESP-AT 支持 Bluetooth LE 服务端 和 Bluetooth LE 客户端
- 不论 ESP-AT 初始化为 Bluetooth LE 服务端还是 Bluetooth LE 客户端,同时连接的最大设备数量为 3。
GATT 其实是一种属性传输协议,简单的讲可以认为是一种属性传输的应用层协议。这个属性的结构非常简单。它由 服务 组成,每个服务由不同数量的 特征 组成,每个 特征
GATT 服务端 和 GATT 客户端 这两种角色存在于 Bluetooth LE 连接建立之后。GATT 服务器存储通过属性协议传输的数据,并接受来自 GATT 客户端的属性协议请求、命令和确认。简而言之,提供数据的一端称为 GATT 服务端,访问数据的一端称为 GATT 客户端。
重要
- ESP32 Bluetooth LE 服户端需烧录 ble_data.bin
- 如何生成 ble_data.bin 文件,请参考文档 自定义 Bluetooth LE Services 工具。
- ble_data.bin 文件的烧录地址,见 at_customize.csv 中 ble_data 对应的地址,或者在文件 build/download.config
二,BLE调试助手和模块连接过程
仅作笔记
参考链接:
1,硬件准备。
模块名称ESP-WROOM-32
UART0用于日志打印输出和更新固件,UART2用来接收AT指令通信。
上位机使用串口工具,USB转串口连接蓝牙模块。
手机APP使用 "BLE蓝牙调试助手",手机应用市场可下载。
2,更换蓝牙模块bin文件。
模块默认固件可能不支持,需要更新固件。我使用了
ESP32-WROOM-32_AT_Bin_V2.4.0.0.zip
链接
发布的固件 - ESP32 - — ESP-AT 用户指南 latest 文档 (espressif.com)
3,指令准备
AT+BLEINIT=2 //将esp32设置成蓝牙服务端
AT+BLEGATTSSRVCRE //GATTS 创建服务
AT+BLEGATTSSRVSTART //GATTS 开启全部服务。
AT+BLEADDR? //ESP32 蓝牙 LE 服务器获取其 MAC 地址。
AT+BLEADVPARAM=50,50,0,0,7,0,, //ESP32 Bluetooth LE 服务端设置广播参数。
AT+BLENAME="AiThinker"
AT+BLEADVDATA="0201060A0941695468696E6B6572"
AT+BLEADVSTART //
4,串口工具。扩展里发送多条指令,记得勾选“加回车换行”。
5,BLE调试助手。
6,连接成功之后,串口工具提示
+BLECONN:0,"69:60:2c:27:27:14"
+BLECONNPARAM:0,0,0,6,0,500
+BLECONNPARAM:0,0,0,9,0,2000
7,app发送数据,串口接收。
三,总结。
1,发送单个字符,速度还是比较快的,但是多个字符明显慢了,不知道什么原因。
2,断开连接之后,助手不能再发现模块了,须模块发送“AT+BLEADVSTART”指令。
3,手机自带蓝牙发现不了,必须再BLE调试助手中发现设备。
4,最后想实现透传,还没实现。