Bluetooth LE AT 示例

[English]

本文档主要介绍 Bluetooth® Low Energy AT 命令集 的使用方法,并提供在 ESP32-C2 设备上运行这些命令的详细示例。

简介

ESP-AT 当前仅支持 Bluetooth LE 4.2 协议规范,本文档中的描述仅适用于 Bluetooth LE protocol 4.2 协议规范。请参考 核心规范 4.2 获取更多信息。

Bluetooth LE 协议架构

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 个射频信道。频率范围:2402 MHz 到 2480 MHz。

  • LL:LL 层主要负责创建、修改和释放逻辑链路(以及,如果需要,它们相关的逻辑传输),以及与设备之间的物理链路相关的参数的更新。它控制链路层状态机处于 准备广播监听/扫描发起连接已连接 五种状态之一。

  • HCI:HCI 层向主机和控制器提供一个标准化的接口。该层可以由软件 API 实现或者使用硬件接口 UARTSPIUSB 来控制。

  • 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 客户端

Bluetooth LE 客户端读写服务特征值

以下示例同时使用两块 ESP32-C2 开发板,其中一块作为 Bluetooth LE 服务端(只作为 Bluetooth LE 服务端角色),另一块作为 Bluetooth LE 客户端(只作为 Bluetooth LE 客户端角色)。这个例子展示了应如何使用 AT 命令建立 Bluetooth LE 连接,完成数据通信。

重要

在以下步骤中以 ESP32-C2 Bluetooth LE 服务端 开头的操作只需要在 ESP32-C2 Bluetooth LE 服务端执行即可,以 ESP32-C2 Bluetooth LE 客户端 开头的操作只需要在 ESP32-C2 Bluetooth LE 客户端执行即可。

  1. 初始化 Bluetooth LE 功能。

    ESP32-C2 Bluetooth LE 服务端:

    命令:

    AT+BLEINIT=2
    

    响应:

    OK
    

    ESP32-C2 Bluetooth LE 客户端:

    命令:

    AT+BLEINIT=1
    

    响应:

    OK
    
  2. ESP32-C2 蓝牙 LE 服务器获取其 MAC 地址。

    命令:

    AT+BLEADDR?
    

    响应:

    +BLEADDR:"24:0a:c4:d6:e4:46"
    OK
    

    说明:

    • 您查询到的地址可能与上述响应中的不同,请记住您的地址,下面的步骤中会用到。

  1. ESP32-C2 Bluetooth LE 服务端发现服务特征。

    命令:

    AT+BLEGATTSCHAR?
    

    响应:

    +BLEGATTSCHAR:"char",1,1,0xC300
    +BLEGATTSCHAR:"char",1,2,0xC301
    +BLEGATTSCHAR:"char",1,3,0xC302
    +BLEGATTSCHAR:"char",1,4,0xC303
    +BLEGATTSCHAR:"char",1,5,0xC304
    +BLEGATTSCHAR:"char",1,6,0xC305
    +BLEGATTSCHAR:"char",1,7,0xC306
    +BLEGATTSCHAR:"char",1,8,0xC307
    +BLEGATTSCHAR:"char",2,1,0xC400
    +BLEGATTSCHAR:"char",2,2,0xC401
    
    OK
    
  2. ESP32-C2 Bluetooth LE 服务端开始广播,之后 ESP32-C2 Bluetooth LE 客户端开始扫描并且持续 3 秒钟。

    ESP32-C2 Bluetooth LE 服务端:

    命令:

    AT+BLEADVSTART
    

    响应:

    OK
    

    ESP32-C2 Bluetooth LE 客户端:

    命令:

    AT+BLESCAN=1,3
    

    响应:

    OK
    +BLESCAN:"5b:3b:6c:51:90:49",-87,02011a020a0c0aff4c001005071c3024dc,,1
    +BLESCAN:"c4:5b:be:93:ec:66",-84,0201060303111809095647543147572d58020a03,,0
    +BLESCAN:"24:0a:c4:d6:e4:46",-29,,,0
    

    说明:

    • 您的扫描结果可能与上述响应中的不同。

  3. 建立 Bluetooth LE 连接。

    ESP32-C2 Bluetooth LE 客户端:

    命令:

    AT+BLECONN=0,"24:0a:c4:d6:e4:46"
    

    响应:

    +BLECONN:0,"24:0a:c4:d6:e4:46"
    
    OK
    

    说明:

    • 输入上述命令时,请使用您的 ESP32-C2 Bluetooth LE 服务端地址。

    • 如果 Bluetooth LE 连接成功,则会提示 +BLECONN:0,"24:0a:c4:d6:e4:46

    • 如果 Bluetooth LE 连接失败,则会提示 +BLECONN:0,-1

  4. ESP32-C2 Bluetooth LE 客户端发现服务。

    命令:

    AT+BLEGATTCPRIMSRV=0
    

    响应:

    +BLEGATTCPRIMSRV:0,1,0x1800,1
    +BLEGATTCPRIMSRV:0,2,0x1801,1
    +BLEGATTCPRIMSRV:0,3,0xA002,1
    +BLEGATTCPRIMSRV:0,4,0xA003,1
    
    OK
    

    说明:

    • ESP32-C2 Bluetooth LE 客户端查询服务的结果,比 ESP32-C2 Bluetooth LE 服户端查询服务的结果多两个默认服务(UUID: 0x1800 和 0x1801),这是正常现象。正因如此,对于同一服务,ESP32-C2 Bluetooth LE 客户端查询的 <srv_index> 值等于 ESP32-C2 Bluetooth LE 服户端查询的 <srv_index> 值 + 2。例如上述示例中的服务 0xA002,当前在 ESP32-C2 Bluetooth LE 客户端查询到的 <srv_index> 为 3,如果在 ESP32-C2 Bluetooth LE 服户端通过 AT+BLEGATTSSRV? 命令查询,则 <srv_index> 为 1。

  5. ESP32-C2 Bluetooth LE 客户端发现特征值。

    命令:

    AT+BLEGATTCCHAR=0,3
    

    响应:

    +BLEGATTCCHAR:"char",0,3,1,0xC300,0x02
    +BLEGATTCCHAR:"char",0,3,2,0xC301,0x02
    +BLEGATTCCHAR:"char",0,3,3,0xC302,0x08
    +BLEGATTCCHAR:"char",0,3,4,0xC303,0x04
    +BLEGATTCCHAR:"char",0,3,5,0xC304,0x08
    +BLEGATTCCHAR:"char",0,3,6,0xC305,0x10
    +BLEGATTCCHAR:"desc",0,3,6,1,0x2902
    +BLEGATTCCHAR:"char",0,3,7,0xC306,0x20
    +BLEGATTCCHAR:"desc",0,3,7,1,0x2902
    +BLEGATTCCHAR:"char",0,3,8,0xC307,0x02
    
    OK
    
  6. ESP32-C2 Bluetooth LE 客户端读取一个特征值。

    命令:

    AT+BLEGATTCRD=0,3,1
    

    响应:

    +BLEGATTCRD:0,1,0
    
    OK
    

    说明:

    • 请注意目标特征值必须要有读权限。

    • 如果 ESP32-C2 Bluetooth LE 客户端读取特征成功,ESP32-C2 Bluetooth LE 服务端则会提示 +READ:0,"7c:df:a1:b3:8d:de"

  7. ESP32-C2 Bluetooth LE 客户端写一个特征值。

    命令:

    AT+BLEGATTCWR=0,3,3,,2
    

    响应:

    >
    

    符号 > 表示 AT 准备好接收串口数据,此时您可以输入数据,当数据长度达到参数 <length> 的值时,执行写入操作。

    OK
    

    说明:

    • 如果 ESP32-C2 Bluetooth LE 客户端写特征描述符成功,ESP32-C2 Bluetooth LE 服务端则会提示 +WRITE:<conn_index>,<srv_index>,<char_index>,[<desc_index>],<len>,<value>

  8. Indicate 一个特征值。

    ESP32-C2 Bluetooth LE 客户端:

    命令:

    AT+BLEGATTCWR=0,3,7,1,2
    

    响应:

    >
    

    符号 > 表示 AT 准备好接收串口数据,此时您可以输入数据,当数据长度达到参数 <length> 的值时,执行写入操作。

    为了接收 ESP32-C2 Bluetooth LE 服务端发送过来的数据(通过 notify 方式或者 indicate 方式),ESP32-C2 Bluetooth LE 客户端需要提前向服务端注册。对于 notify 方式,需要写入值 0x0001,对于 indicate 方式,需要写入值 0x0002。在本例中写入 0x0002 来使用 indicate 方式。

    OK
    

    说明:

    • 如果 ESP32-C2 Bluetooth LE 客户端写特征描述符成功,ESP32-C2 Bluetooth LE 服务端则会提示 +WRITE:<conn_index>,<srv_index>,<char_index>,<desc_index>,<len>,<value>

    ESP32-C2 Bluetooth LE 服务端:

    命令:

    AT+BLEGATTSIND=0,1,7,3
    

    响应:

    >
    

    符号 > 表示 AT 准备好接收串口数据,此时您可以输入数据,当数据长度达到参数 <length> 的值时,执行 indicate 操作。

    OK
    

    说明:

    • 如果 ESP32-C2 Bluetooth LE 客户端接收到 indication, 则会提示 +INDICATE:<conn_index>,<srv_index>,<char_index>,<len>,<value>

    • 对于同一服务,ESP32-C2 Bluetooth LE 客户端的 <srv_index> 值等于 ESP32-C2 Bluetooth LE 服户端的 <srv_index> 值 + 2,这是正常现象。

    • 对于服务中特征的权限,您可参考文档 如何自定义低功耗蓝牙服务

Bluetooth LE 连接加密

以下示例同时使用两块 ESP32-C2 开发板,其中一块作为 Bluetooth LE 服务端(只作为 Bluetooth LE 服务端角色),另一块作为 Bluetooth LE 客户端(只作为 Bluetooth LE 客户端角色)。这个例子展示了怎样加密 Bluetooth LE 连接。

重要

  • 在以下步骤中以 ESP32-C2 Bluetooth LE 服务端 开头的操作只需要在 ESP32-C2 Bluetooth LE 服务端执行即可,以 ESP32-C2 Bluetooth LE 客户端 开头的操作只需要在 ESP32-C2 Bluetooth LE 客户端执行即可。

  • 加密绑定 是两个不同的概念。绑定 只是加密成功后在本地存储了一个长期的密钥。

  • ESP-AT 最多允许绑定 10 个设备。

  1. 初始化 Bluetooth LE 功能。

    ESP32-C2 Bluetooth LE 服务端:

    命令:

    AT+BLEINIT=2
    

    响应:

    OK
    

    ESP32-C2 Bluetooth LE 客户端:

    命令:

    AT+BLEINIT=1
    

    响应:

    OK
    
  2. ESP32-C2 Bluetooth LE 服务端获取 Bluetooth LE 地址。

    命令:

    AT+BLEADDR?
    

    响应:

    +BLEADDR:"24:0a:c4:d6:e4:46"
    OK
    

    说明:

    • 您查询到的地址可能与上述响应中的不同,请记住您的地址,下面的步骤中会用到。

  1. ESP32-C2 Bluetooth LE 服务端发现服务特征。

    命令:

    AT+BLEGATTSCHAR?
    

    响应:

    +BLEGATTSCHAR:"char",1,1,0xC300
    +BLEGATTSCHAR:"char",1,2,0xC301
    +BLEGATTSCHAR:"char",1,3,0xC302
    +BLEGATTSCHAR:"char",1,4,0xC303
    +BLEGATTSCHAR:"char",1,5,0xC304
    +BLEGATTSCHAR:"char",1,6,0xC305
    +BLEGATTSCHAR:"char",1,7,0xC306
    +BLEGATTSCHAR:"char",1,8,0xC307
    +BLEGATTSCHAR:"char",2,1,0xC400
    +BLEGATTSCHAR:"char",2,2,0xC401
    
    OK
    
  2. ESP32-C2 Bluetooth LE 服务端开始广播,之后 ESP32-C2 Bluetooth LE 客户端开始扫描并且持续 3 秒钟。

    ESP32-C2 Bluetooth LE 服务端:

    命令:

    AT+BLEADVSTART
    

    响应:

    OK
    

    ESP32-C2 Bluetooth LE 客户端:

    命令:

    AT+BLESCAN=1,3
    

    响应:

    OK
    +BLESCAN:"5b:3b:6c:51:90:49",-87,02011a020a0c0aff4c001005071c3024dc,,1
    +BLESCAN:"c4:5b:be:93:ec:66",-84,0201060303111809095647543147572d58020a03,,0
    +BLESCAN:"24:0a:c4:d6:e4:46",-29,,,0
    

    说明:

    • 您的扫描结果可能与上述响应中的不同。

  3. 建立 Bluetooth LE 连接。

    ESP32-C2 Bluetooth LE 客户端:

    命令:

    AT+BLECONN=0,"24:0a:c4:d6:e4:46"
    

    响应:

    +BLECONN:0,"24:0a:c4:d6:e4:46"
    
    OK
    

    说明:

    • 输入上述命令时,请使用您的 ESP32-C2 Bluetooth LE 服务端地址。

    • 如果 Bluetooth LE 连接成功,则会提示 +BLECONN:0,"24:0a:c4:d6:e4:46

    • 如果 Bluetooth LE 连接失败,则会提示 +BLECONN:0,-1

  4. ESP32-C2 Bluetooth LE 客户端发现服务。

    命令:

    AT+BLEGATTCPRIMSRV=0
    

    响应:

    +BLEGATTCPRIMSRV:0,1,0x1800,1
    +BLEGATTCPRIMSRV:0,2,0x1801,1
    +BLEGATTCPRIMSRV:0,3,0xA002,1
    +BLEGATTCPRIMSRV:0,4,0xA003,1
    
    OK
    

    说明:

    • ESP32-C2 Bluetooth LE 客户端查询服务的结果,比 ESP32-C2 Bluetooth LE 服户端查询服务的结果多两个默认服务(UUID: 0x1800 和 0x1801),这是正常现象。正因如此,对于同一服务,ESP32-C2 Bluetooth LE 客户端查询的 <srv_index> 值等于 ESP32-C2 Bluetooth LE 服户端查询的 <srv_index> 值 + 2。例如上述示例中的服务 0xA002,当前在 ESP32-C2 Bluetooth LE 客户端查询到的 <srv_index> 为 3,如果在 ESP32-C2 Bluetooth LE 服户端通过 AT+BLEGATTSSRV? 命令查询,则 <srv_index> 为 1。

  5. ESP32-C2 Bluetooth LE 客户端发现特征值。

    命令:

    AT+BLEGATTCCHAR=0,3
    

    响应:

    +BLEGATTCCHAR:"char",0,3,1,0xC300,0x02
    +BLEGATTCCHAR:"char",0,3,2,0xC301,0x02
    +BLEGATTCCHAR:"char",0,3,3,0xC302,0x08
    +BLEGATTCCHAR:"char",0,3,4,0xC303,0x04
    +BLEGATTCCHAR:"char",0,3,5,0xC304,0x08
    +BLEGATTCCHAR:"char",0,3,6,0xC305,0x10
    +BLEGATTCCHAR:"desc",0,3,6,1,0x2902
    +BLEGATTCCHAR:"char",0,3,7,0xC306,0x20
    +BLEGATTCCHAR:"desc",0,3,7,1,0x2902
    +BLEGATTCCHAR:"char",0,3,8,0xC307,0x02
    
    OK
    
  6. 设置加密参数。设置 auth_reqSC_MITM_BOND,服务端的 iocapKeyboardOnly,客户端的 iocapKeyboardDisplaykey_size16init_key3, rsp_key3

    ESP32-C2 Bluetooth LE 服务端:

    命令:

    AT+BLESECPARAM=13,2,16,3,3
    

    响应:

    OK
    

    ESP32-C2 Bluetooth LE 客户端:

    命令:

    AT+BLESECPARAM=13,4,16,3,3
    

    响应:

    OK
    

    说明:

    • 在本例中,ESP32-C2 Bluetooth LE 服务端输入配对码,ESP32-C2 Bluetooth LE 客户端显示配对码。

    • ESP-AT 支持 Legacy PairingSecure Connections 两种加密方式,但后者有更高级别的优先级。如果对端也支持 Secure Connections,则会采用 Secure Connections 方式加密。

  7. ESP32-C2 Bluetooth LE 客户端发起加密请求。

    命令:

    AT+BLEENC=0,3
    

    响应:

    OK
    

    说明:

    如果 ESP32-C2 Bluetooth LE 服务端成功接收到加密请求,ESP32-C2 Bluetooth LE 服务端则会提示 +BLESECREQ:0

  8. ESP32-C2 Bluetooth LE 服务端响应配对请求。

    命令:

    AT+BLEENCRSP=0,1
    

    响应:

    OK
    

    说明:

    • 如果 ESP32-C2 Bluetooth LE 客户端成功收到配对响应,则 ESP32-C2 Bluetooth LE 客户端将会产生一个 6 位的配对码。

    • 在本例中,ESP32-C2 Bluetooth LE 客户端则会提示 +BLESECNTFYKEY:0,793718。配对码为 793718

  9. ESP32-C2 Bluetooth LE 客户端回复配对码。

    命令:

    AT+BLEKEYREPLY=0,793718
    

    响应:

    OK
    

    执行这个命令之后,在 ESP32-C2 Bluetooth LE 服务端和 ESP32-C2 Bluetooth LE 客户端会有一些对应信息提示。

    ESP32-C2 Bluetooth LE 服务端:

    +BLESECKEYTYPE:0,16
    +BLESECKEYTYPE:0,1
    +BLESECKEYTYPE:0,32
    +BLESECKEYTYPE:0,2
    +BLEAUTHCMPL:0,0
    

    ESP32-C2 Bluetooth LE 客户端:

    +BLESECNTFYKEY:0,793718
    +BLESECKEYTYPE:0,2
    +BLESECKEYTYPE:0,16
    +BLESECKEYTYPE:0,1
    +BLESECKEYTYPE:0,32
    +BLEAUTHCMPL:0,0
    

    您可以忽略以 +BLESECKEYTYPE 开头的信息。信息 +BLEAUTHCMPL:0,0 中的第二个参数为 0 表示加密成功,为 1 表示加密失败。

两个 ESP32-C2 开发板之间建立 SPP 连接,以及在 UART-Bluetooth LE 透传模式下传输数据

以下示例同时使用两块 ESP32-C2 开发板,其中一块作为 Bluetooth LE 服务端(只作为 Bluetooth LE 服务端角色),另一块作为 Bluetooth LE 客户端(只作为 Bluetooth LE 客户端角色)。这个例子展示了应如何建立 Bluetooth LE 连接,以及建立透传通信 Bluetooth LE SPP (Serial Port Profile, UART-Bluetooth LE 透传模式)。

重要

在以下步骤中以 ESP32-C2 Bluetooth LE 服务端 开头的操作只需要在 ESP32-C2 Bluetooth LE 服务端执行即可,以 ESP32-C2 Bluetooth LE 客户端 开头的操作只需要在 ESP32-C2 Bluetooth LE 客户端执行即可。

  1. 初始化 Bluetooth LE 功能。

    ESP32-C2 Bluetooth LE 服务端:

    命令:

    AT+BLEINIT=2
    

    响应:

    OK
    

    ESP32-C2 Bluetooth LE 客户端:

    命令:

    AT+BLEINIT=1
    

    响应:

    OK
    
  1. ESP32-C2 蓝牙 LE 服务器获取其 MAC 地址。

    命令:

    AT+BLEADDR?
    

    响应:

    +BLEADDR:"24:0a:c4:d6:e4:46"
    OK
    

    说明:

    • 您查询到的地址可能与上述响应中的不同,请记住您的地址,下面的步骤中会用到。

  2. ESP32-C2 Bluetooth LE 服务端设置广播参数。

    命令:

    AT+BLEADVPARAM=50,50,0,0,7,0,,
    

    响应:

    OK
    
  3. ESP32-C2 Bluetooth LE 服务端设置广播数据。

    命令:

    AT+BLEADVDATA="0201060A09457370726573736966030302A0"
    

    响应:

    OK
    
  4. ESP32-C2 Bluetooth LE 服务端开始广播。

    命令:

    AT+BLEADVSTART
    

    响应:

    OK
    
  5. ESP32-C2 Bluetooth LE 客户端开始扫描,持续 3 秒。

    命令:

    AT+BLESCAN=1,3
    

    响应:

    OK
    +BLESCAN:"24:0a:c4:d6:e4:46",-78,0201060a09457370726573736966030302a0,,0
    +BLESCAN:"45:03:cb:ac:aa:a0",-62,0201060aff4c001005441c61df7d,,1
    +BLESCAN:"24:0a:c4:d6:e4:46",-26,0201060a09457370726573736966030302a0,,0
    

    说明:

    • 您的扫描结果可能与上述响应中的不同。

  6. 建立 the Bluetooth LE 连接。

    ESP32-C2 Bluetooth LE 客户端:

    命令:

    AT+BLECONN=0,"24:0a:c4:d6:e4:46"
    

    响应:

    +BLECONN:0,"24:0a:c4:d6:e4:46"
    
    OK
    

    说明:

    • 输入上述命令时,请使用您的 ESP32-C2 Bluetooth LE 服务端地址。

    • 如果 Bluetooth LE 连接成功,则会提示 +BLECONN:0,"24:0a:c4:d6:e4:46

    • 如果 Bluetooth LE 连接失败,则会提示 +BLECONN:0,-1

  7. ESP32-C2 Bluetooth LE 服务端查询服务。

    命令:

    AT+BLEGATTSSRV?
    

    响应:

    +BLEGATTSSRV:1,1,0xA002,1
    +BLEGATTSSRV:2,1,0xA003,1
    
    OK
    
  8. ESP32-C2 Bluetooth LE 服务端发现特征。

    命令:

    AT+BLEGATTSCHAR?
    

    响应:

    +BLEGATTSCHAR:"char",1,1,0xC300
    +BLEGATTSCHAR:"char",1,2,0xC301
    +BLEGATTSCHAR:"char",1,3,0xC302
    +BLEGATTSCHAR:"char",1,4,0xC303
    +BLEGATTSCHAR:"char",1,5,0xC304
    +BLEGATTSCHAR:"char",1,6,0xC305
    +BLEGATTSCHAR:"char",1,7,0xC306
    +BLEGATTSCHAR:"char",1,8,0xC307
    +BLEGATTSCHAR:"char",2,1,0xC400
    +BLEGATTSCHAR:"char",2,2,0xC401
    
    OK
    
  9. ESP32-C2 Bluetooth LE 客户端发现服务。

    命令:

    AT+BLEGATTCPRIMSRV=0
    

    响应:

    +BLEGATTCPRIMSRV:0,1,0x1800,1
    +BLEGATTCPRIMSRV:0,2,0x1801,1
    +BLEGATTCPRIMSRV:0,3,0xA002,1
    +BLEGATTCPRIMSRV:0,4,0xA003,1
    
    OK
    

    说明:

    • ESP32-C2 Bluetooth LE 客户端查询服务的结果,比 ESP32-C2 Bluetooth LE 服户端查询服务的结果多两个默认服务(UUID: 0x1800 和 0x1801),这是正常现象。正因如此,对于同一服务,ESP32-C2 Bluetooth LE 客户端查询的 <srv_index> 值等于 ESP32-C2 Bluetooth LE 服户端查询的 <srv_index> 值 + 2。例如,上述示例中的服务 0xA002,当前在 ESP32-C2 Bluetooth LE 客户端查询到的 <srv_index> 为 3,如果在 ESP32-C2 Bluetooth LE 服户端通过 AT+BLEGATTSSRV? 命令查询,则 <srv_index> 为 1。

  10. ESP32-C2 Bluetooth LE 客户端发现特征。

    命令:

    AT+BLEGATTCCHAR=0,3
    

    响应:

    +BLEGATTCCHAR:"char",0,3,1,0xC300,0x02
    +BLEGATTCCHAR:"char",0,3,2,0xC301,0x02
    +BLEGATTCCHAR:"char",0,3,3,0xC302,0x08
    +BLEGATTCCHAR:"char",0,3,4,0xC303,0x04
    +BLEGATTCCHAR:"char",0,3,5,0xC304,0x08
    +BLEGATTCCHAR:"char",0,3,6,0xC305,0x10
    +BLEGATTCCHAR:"desc",0,3,6,1,0x2902
    +BLEGATTCCHAR:"char",0,3,7,0xC306,0x20
    +BLEGATTCCHAR:"desc",0,3,7,1,0x2902
    +BLEGATTCCHAR:"char",0,3,8,0xC307,0x02
    
    OK
    
  11. ESP32-C2 Bluetooth LE 客户端配置 Bluetooth LE SPP。

    选择支持写操作的服务特征(characteristic)作为写通道发送数据,选择支持 notify 或者 indicate 的 characteristic 作为读通道接收数据。

    命令:

    AT+BLESPPCFG=1,3,5,3,7
    

    响应:

    OK
    
  12. ESP32-C2 Bluetooth LE 客户端使能 Bluetooth LE SPP。

    命令:

    AT+BLESPP
    

    响应:

    OK
    
    >
    

    上述响应表示 AT 已经进入 Bluetooth LE SPP 模式,可以进行数据的发送和接收。

    说明:

    • ESP32-C2 Bluetooth LE 客户端开启 Bluetooth LE SPP 透传模式后,串口收到的数据会通过 Bluetooth LE 传输到 ESP32-C2 Bluetooth LE 服务端。

  13. ESP32-C2 Bluetooth LE 服务端配置 Bluetooth LE SPP。

    选择支持 notify 或者 indicate 的 characteristic 作为写通道发送数据,选择支持写操作的 characteristic 作为读通道接收数据。

    命令:

    AT+BLESPPCFG=1,1,7,1,5
    

    响应:

    OK
    
  14. ESP32-C2 Bluetooth LE 服务端使能 Bluetooth LE SPP。

    命令:

    AT+BLESPP
    

    响应:

    OK
    
    >
    

    上述响应表示 AT 已经进入 Bluetooth LE SPP 模式,可以进行数据的发送和接收。

    说明:

    • ESP32-C2 Bluetooth LE 服户端开启 Bluetooth LE SPP 透传模式后,串口收到的数据会通过 Bluetooth LE 传输到 ESP32-C2 Bluetooth LE 客户端。

    • 如果 ESP32-C2 Bluetooth LE 客户端端没有先开启 Bluetooth LE SPP 透传,或者使用其他设备作为 Bluetooth LE 客户端,则 ESP32-C2 Bluetooth LE 客户端需要先开启侦听 Notify 或者 Indicate。例如,ESP32-C2 Bluetooth LE 客户端如果未开启透传,则应先调用 AT+BLEGATTCWR=0,3,7,1,1 开启侦听,ESP32-C2 Bluetooth LE 服务端 才能成功实现透传。

    • 对于同一服务,ESP32-C2 Bluetooth LE 客户端的 <srv_index> 值等于 ESP32-C2 Bluetooth LE 服务端的 <srv_index> 值 + 2,这是正常现象。

ESP32-C2 与手机建立 SPP 连接,以及在 UART-Bluetooth LE 透传模式下传输数据

该示例展示了如何在 ESP32-C2 开发板(仅作为低功耗蓝牙服务器角色)和手机(仅作为低功耗蓝牙客户端角色)之间建立 SPP 连接,以及如何在 UART-Bluetooth LE 透传模式下传输数据。

重要

步骤中以 ESP32-C2 Bluetooth LE 服务端 开头的操作只需要在 ESP32-C2 Bluetooth LE 服务端执行即可,而以 Bluetooth LE 客户端 开头的操作只需要在手机的蓝牙调试助手中执行即可。

  1. 在手机端下载 Bluetooth LE 调试助手,例如 LightBlue。

  2. 初始化 Bluetooth LE 功能。

    ESP32-C2 Bluetooth LE 服务端:

    命令:

    AT+BLEINIT=2
    

    响应:

    OK
    
  1. ESP32-C2 蓝牙 LE 服务器获取其 MAC 地址。

    命令:

    AT+BLEADDR?
    

    响应:

    +BLEADDR:"24:0a:c4:d6:e4:46"
    OK
    

    说明:

    • 您查询到的地址可能与上述响应中的不同,请记住您的地址,下面的步骤中会用到。

  2. ESP32-C2 Bluetooth LE 服务端设置广播参数。

    命令:

    AT+BLEADVPARAM=50,50,0,0,7,0,,
    

    响应:

    OK
    
  3. ESP32-C2 Bluetooth LE 服务端设置广播数据。

    命令:

    AT+BLEADVDATA="0201060A09457370726573736966030302A0"
    

    响应:

    OK
    
  4. ESP32-C2 Bluetooth LE 服务端开始广播。

    命令:

    AT+BLEADVSTART
    

    响应:

    OK
    
  5. 创建 Bluetooth LE 连接。

    手机打开 LightBlue APP,并打开 SCAN 开始扫描,找到 ESP32-C2 Bluetooth LE 服务端的 MAC 地址,点击 CONNECT 进行连接。此时 ESP32-C2 端应该会打印类似于 +BLECONN:0,"60:51:42:fe:98:aa" 的 log,这表示已经建立了 Bluetooth LE 连接。

  6. ESP32-C2 Bluetooth LE 服务端查询服务。

    命令:

    AT+BLEGATTSSRV?
    

    响应:

    +BLEGATTSSRV:1,1,0xA002,1
    +BLEGATTSSRV:2,1,0xA003,1
    
    OK
    
  7. ESP32-C2 Bluetooth LE 服务端发现特征。

    命令:

    AT+BLEGATTSCHAR?
    

    响应:

    +BLEGATTSCHAR:"char",1,1,0xC300
    +BLEGATTSCHAR:"char",1,2,0xC301
    +BLEGATTSCHAR:"char",1,3,0xC302
    +BLEGATTSCHAR:"char",1,4,0xC303
    +BLEGATTSCHAR:"char",1,5,0xC304
    +BLEGATTSCHAR:"char",1,6,0xC305
    +BLEGATTSCHAR:"char",1,7,0xC306
    +BLEGATTSCHAR:"char",1,8,0xC307
    +BLEGATTSCHAR:"char",2,1,0xC400
    +BLEGATTSCHAR:"char",2,2,0xC401
    
    OK
    
  8. Bluetooth LE 客户端发现特征。

    此时在手机 LightBlue 客户端选择点击 Properties 为 NOTIFY 或者 INDICATE 的服务特征(这里 ESP-AT 默认 Properties 为 NOTIFY 或者 INDICATE 的服务特征是 0xC305 和 0xC306),开始侦听 Properties 为 NOTIFY 或者 INDICATE 的服务特征。

  9. ESP32-C2 Bluetooth LE 服务端配置 Bluetooth LE SPP。

    选择支持 notify 或者 indicate 的 characteristic 作为写通道发送数据,选择支持写操作的 characteristic 作为读通道接收数据。

    命令:

    AT+BLESPPCFG=1,1,7,1,5
    

    响应:

    OK
    
  10. ESP32-C2 Bluetooth LE 服务端使能 Bluetooth LE SPP。

    命令:

    AT+BLESPP
    

    响应:

    OK
    
    >
    

    上述响应表示 AT 已经进入 Bluetooth LE SPP 模式,可以进行数据的发送和接收。

  11. Bluetooth LE 客户端发送数据。

    在 LightBlue 客户端选择 0xC304 服务特征值发送数据 test 给 ESP32-C2 Bluetooth LE 服务端,此时 ESP32-C2 Bluetooth LE 服务端可以收到 test

  12. ESP32-C2 Bluetooth LE 服务端发送数据。

    在 ESP32-C2 Bluetooth LE 服务端直接发送 test,此时 LightBlue 客户端可以收到 test