ESP32 Classic Bluetooth AT 示例

[English]

本文档主要提供在 ESP32 设备上运行 ESP32 Classic Bluetooth® AT 命令集 命令的详细示例。

重要

固件默认不支持 Classic Bluetooth 命令,请参考文档 如何启用 ESP-AT 经典蓝牙 使能 Classic Bluetooth 命令。

以普通传输模式在移动电话或者 PC 和 ESP32 之间建立 SPP 连接并且设置 IO 能力为 NoInputNoOutput

在本例中,移动电话或 PC 为主机,ESP32 为从机。该示例展示了如何建立 SPP 连接。

  1. Classic Bluetooth 初始化。

    命令:

    AT+BTINIT=1
    

    响应:

    OK
    
  2. Classic Bluetooth SPP 协议初始化并且设置角色为 slave。

    命令:

    AT+BTSPPINIT=2
    

    响应:

    OK
    
  3. 设置 Classic Bluetooth 设备名称。

    命令:

    AT+BTNAME="EXAMPLE"
    

    响应:

    OK
    
  4. 设置 Classic Bluetooth 扫描模式为可发现可连接。

    命令:

    AT+BTSCANMODE=2
    

    响应:

    OK
    
  5. 设置 Classic Bluetooth 安全参数。设置 io_capNoInputNoOutputpin_typefixedpin_code to 9527

    命令:

    AT+BTSECPARAM=3,1,"9527"
    

    响应:

    OK
    
  6. 开启 Classic Bluetooth SPP 协议。

    命令:

    AT+BTSPPSTART
    

    响应:

    OK
    
  7. 移动电话或者 PC 发起连接。

    移动电话或 PC 应能找到名为 “EXAMPLE” 的蓝牙设备。如果移动电话或 PC 发起连接并成功建立连接,ESP32 将提示:

    +BTSPPCONN:0,"e0:24:81:47:90:bc"
    

    说明:

    • 您获取到的地址可能与上述响应中的不同。

  8. 发送 4 字节数据。

    命令:

    AT+BTSPPSEND=0,4
    

    响应:

    >
    

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

    输入 4 字节数据,例如输入数据是 test,之后 AT 将会输出以下信息。

    OK
    

    说明:

    • 若输入的字节数目超过 AT+BTSPPSEND 命令设定的长度 (n),则系统会响应 busy p...,并发送数据的前 n 个字节,发送完成后响应 OK

    • AT 输出 > 字符后,数据中的特殊字符不需要转义字符进行转义,也不需要以新行结尾(CR-LF)。

  9. 接收 4 字节数据。

    假设移动电话或者 PC 发送 4 字节的数据(数据为 test),则系统会提示:

    +BTDATA:4,test
    
  10. 断开 Classic Bluetooth SPP 连接。

    命令:

    AT+BTSPPDISCONN=0
    

    响应:

    +BTSPPDISCONN:0,"e0:24:81:47:90:bc"
    
    OK
    

    说明:

    • 您获取到的地址可能与上述响应中的不同。

以透传模式在移动电话或者 PC 和 ESP32 之间建立 SPP 连接并且设置 IO 能力为 NoInputNoOutput

在本例中,移动电话或 PC 为主机,ESP32 为从机。该示例展示了如何建立 SPP 连接。

  1. Classic Bluetooth 初始化。

    命令:

    AT+BTINIT=1
    

    响应:

    OK
    
  2. Classic Bluetooth SPP 协议初始化并且设置角色为 slave。

    命令:

    AT+BTSPPINIT=2
    

    响应:

    OK
    
  3. 设置 Classic Bluetooth 设备名称。

    命令:

    AT+BTNAME="EXAMPLE"
    

    响应:

    OK
    
  4. 设置 Classic Bluetooth 扫描模式为可发现可连接。

    命令:

    AT+BTSCANMODE=2
    

    响应:

    OK
    
  5. 设置 Classic Bluetooth 安全参数。设置 io_capNoInputNoOutputpin_typefixedpin_code9527

    命令:

    AT+BTSECPARAM=3,1,"9527"
    

    响应:

    OK
    
  6. 开启 Classic Bluetooth SPP 协议。

    命令:

    AT+BTSPPSTART
    

    响应:

    OK
    
  7. 移动电话或者 PC 发起连接。

    移动电话或 PC 应能找到名为 “EXAMPLE” 的蓝牙设备。如果移动电话或 PC 发起连接并成功建立连接,ESP32 将提示:

    +BTSPPCONN:0,"e0:24:81:47:90:bc"
    

    说明:

    • 您获取到的地址可能与上述响应中的不同。

  8. 在透传模式下发送数据。

    命令:

    AT+BTSPPSEND
    

    响应:

    OK
    
    >
    

    上述响应表示 AT 已经进入透传模式。

    说明:

    • AT 进入透传模式后,串口收到的数据会传输到移动电话或者 PC 端。

  9. 停止发送数据。

    在透传发送数据过程中,若识别到单独的一包数据 +++,则系统会退出透传发送。此时请至少等待 1 秒,再发下一条 AT 命令。请注意,如果直接用键盘打字输入 +++,有可能因时间太慢而不能被识别为连续的三个 +。更多介绍请参考 AT+BTSPPSEND

    重要

    使用 +++ 可退出透传发送数据,回到正常 AT 命令模式。您也可以使用 AT+BTSPPSEND 命令恢复透传。

  10. 断开 Classic Bluetooth SPP 连接。

    命令:

    AT+BTSPPDISCONN=0
    

    响应:

    +BTSPPDISCONN:0,"e0:24:81:47:90:bc"
    
    OK
    

    说明:

    • 您获取到的地址可能与上述响应中的不同。

在移动电话或者 PC 和 ESP32 之间建立 SPP 连接并且设置 IO 能力为 KeyboardOnly

该过程基本和 以普通传输模式在移动电话或者 PC 和 ESP32 之间建立 SPP 连接并且设置 IO 能力为 NoInputNoOutput 描述的一样。唯一的区别在于安全参数设置。

  1. Classic Bluetooth 初始化。

    命令:

    AT+BTINIT=1
    

    响应:

    OK
    
  2. Classic Bluetooth SPP 协议初始化并且设置角色为 slave。

    命令:

    AT+BTSPPINIT=2
    

    响应:

    OK
    
  3. 设置 Classic Bluetooth 设备名称。

    命令:

    AT+BTNAME="EXAMPLE"
    

    响应:

    OK
    
  4. 设置 Classic Bluetooth 扫描模式为可发现可连接。

    命令:

    AT+BTSCANMODE=2
    

    响应:

    OK
    
  5. 设置 Classic Bluetooth 安全参数。设置 io_capKeyboardOnlypin_typevariablepin_code9527

    命令:

    AT+BTSECPARAM=2,0,"9527"
    

    响应:

    OK
    
  6. 开启 Classic Bluetooth SPP 协议。

    命令:

    AT+BTSPPSTART
    

    响应:

    OK
    
  7. 移动电话或者 PC 发起连接。

    移动电话或者 PC 可以发起连接并且产生 PIN 码,您可以在 ESP32 端输入 PIN 码。

    AT+BTKEYREPLY=0,676572
    

    如果连接建立成功,系统则会提示:

    +BTSPPCONN:0,"e0:24:81:47:90:bc"
    

    说明:

    • 您输入的 PIN 码可能与上述命令中的不同。请使用真实的 PIN 码代替。

    • 您获取到的地址可能与上述响应中的不同。

  8. 断开 Classic Bluetooth SPP 连接。

    命令:

    AT+BTSPPDISCONN=0
    

    响应:

    +BTSPPDISCONN:0,"e0:24:81:47:90:bc"
    
    OK
    

    说明:

    • 您获取到的地址可能与上述响应中的不同。

在两个 ESP32 开发板之间建立 SPP 连接

下面是使用两块 ESP32 开发板的示例,一块作为主机,另一块作为从机。

重要

在以下步骤中以 主机 开头的操作只需要在主机端执行即可,以 从机 开头的操作只需要在从机端执行即可。如果操作没有特别指明在哪端操作,则需要在主机端和从机端都执行。

  1. Classic Bluetooth 初始化。

    命令:

    AT+BTINIT=1
    

    响应:

    OK
    
  2. Classic Bluetooth SPP 协议初始化。

    主机:

    命令:

    AT+BTSPPINIT=1
    

    响应:

    OK
    

    从机:

    命令:

    AT+BTSPPINIT=2
    

    响应:

    OK
    
  3. 设置 Classic Bluetooth 设备名称。

    从机:

    命令:

    AT+BTNAME="EXAMPLE"
    

    响应:

    OK
    
  4. 设置 Classic Bluetooth 扫描模式为可发现可连接。

    从机:

    命令:

    AT+BTSCANMODE=2
    

    响应:

    OK
    
  5. 设置 Classic Bluetooth 安全参数。设置 io_capNoInputNoOutputpin_typefixedpin_code9527

    从机:

    命令:

    AT+BTSECPARAM=3,1,"9527"
    

    响应:

    OK
    
  6. 开启 Classic Bluetooth SPP 协议。

    从机:

    命令:

    AT+BTSPPSTART
    

    响应:

    OK
    
  7. 开启发现 Classic Bluetooth 周围设备。设置持续时间为 10 秒,可以收到的回应的数量为 10。

    主机:

    命令:

    AT+BTSTARTDISC=0,10,10
    

    响应:

    +BTSTARTDISC:"10:f6:05:f9:bc:4f",realme V11 5G,0x2,0x3,0x2d0,-34
    +BTSTARTDISC:"24:0a:c4:d6:e4:46",EXAMPLE,,,,-27
    +BTSTARTDISC:"10:f6:05:f9:bc:4f",realme V11 5G,0x2,0x3,0x2d0,-33
    +BTSTARTDISC:"24:0a:c4:d6:e4:46",EXAMPLE,,,,-25
    +BTSTARTDISC:"ac:d6:18:47:0c:ae",,0x2,0x3,0x2d0,-72
    +BTSTARTDISC:"24:0a:c4:d6:e4:46",EXAMPLE,,,,-26
    +BTSTARTDISC:"10:f6:05:f9:bc:4f",,0x2,0x3,0x2d0,-41
    +BTSTARTDISC:"24:0a:c4:2c:a8:a2",,,,,-50
    +BTSTARTDISC:"24:0a:c4:d6:e4:46",EXAMPLE,,,,-26
    +BTSTARTDISC:"10:f6:05:f9:bc:4f",realme V11 5G,0x2,0x3,0x2d0,-39
    +BTSTARTDISC:"24:0a:c4:d6:e4:46",EXAMPLE,,,,-23
    +BTSTARTDISC:"10:f6:05:f9:bc:4f",realme V11 5G,0x2,0x3,0x2d0,-36
    +BTSTARTDISC:"10:f6:05:f9:bc:4f",realme V11 5G,0x2,0x3,0x2d0,-41
    +BTSTARTDISC:"b4:a5:ac:16:14:8c",,0x2,0x3,0x2d0,-57
    +BTSTARTDISC:"24:0a:c4:2c:a8:a2"
    +BTSTARTDISC:"b4:a5:ac:16:14:8c"
    
    OK
    

    说明:

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

  8. 建立 SPP 连接。

    主机:

    命令:

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

    响应:

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

    说明:

    • 输入上述命令时,请使用您的从机地址。

    • 如果连接建立成功,从机端则会提示 +BTSPPCONN:0,"30:ae:a4:80:06:8e"

  9. 断开 Classic Bluetooth SPP 连接。

    从机:

    命令:

    AT+BTSPPDISCONN=0
    

    响应:

    +BTSPPDISCONN:0,"30:ae:a4:80:06:8e"
    
    OK
    

    说明:

    • 主机和从机都可以主动断开连接。

    • 如果连接被成功断开,主机端则会提示 +BTSPPDISCONN:0,"24:0a:c4:d6:e4:46"

建立 A2DP 连接并启用 A2DP Sink 播放音乐

重要

  • 使用 A2DP Sink 需要客户自己添加 I2S 部分的代码。初始化 I2S 部分的代码请参考 a2dp sink 例程

  • decoder 芯片部分的驱动代码也需要客户自行添加或使用现成的开发板。

  1. Classic Bluetooth 初始化。

    命令:

    AT+BTINIT=1
    

    响应:

    OK
    
  2. Classic Bluetooth A2DP 协议初始化并且设置角色为 sink。

    命令:

    AT+BTA2DPINIT=2
    

    响应:

    OK
    
  3. 设置 Classic Bluetooth 设备名称。

    命令:

    AT+BTNAME="EXAMPLE"
    

    响应:

    OK
    
  4. 设置 Classic Bluetooth 扫描模式为可发现可连接。

    命令:

    AT+BTSCANMODE=2
    

    响应:

    OK
    
  5. 建立连接。

    source 角色应能找到名为 “EXAMPLE” 的蓝牙设备。在本例中您可以使用您的移动电话发起连接。如果连接成功建立,ESP32 将提示:

    +BTA2DPCONN:0,"e0:24:81:47:90:bc"
    

    说明:

    • 您获取到的地址可能与上述响应中的不同。

  6. 开始播放音乐。

    命令:

    AT+BTA2DPCTRL=0,1
    

    响应:

    OK
    

    说明:

  7. 停止播放音乐。

    命令:

    AT+BTA2DPCTRL=0,0
    

    响应:

    OK
    

    说明:

  8. 断开 A2DP 连接。

    命令:

    AT+BTA2DPDISCONN=0
    

    响应:

    OK
    +BTA2DPDISCONN:0,"e0:24:81:47:90:bc"
    

查询和清除 Classic Bluetooth 加密设备列表

  1. 获取加密设备列表

    命令:

    AT+BTENCDEV?
    

    响应:

    +BTA2DPDISCONN:0,"e0:24:81:47:90:bc"
    OK
    

    说明:

    • 如果之前没有设备成功绑定过,AT 只会提示 OK

  2. 清除 Classic Bluetooth 加密设备列表。

    有两种方式可以清除加密设备列表。

    1. 通过索引值删除加密列表中的指定设备。

      命令:

      AT+BTENCCLEAR=0
      

      响应:

      OK
      
    2. 删除加密列表中的全部设备。

      命令:

      AT+BTENCCLEAR
      

      响应:

      OK