ESP-AT 系列: BT 命令介绍和使用

简介

现在 ESP-AT 命令支持两个经典蓝牙 Profile, SPPA2DP, 但不是所有的模组都默认支持 BT 的命令, 目前只有 WROVER-32 的 release bin 默认打开了 BT SPP 命令.
如果客户需要使用 A2DP 命令, 需要使用带 PSRAM 的模组, 并且更改 partition 分区表, 因为默认的 partition 分区表里给app.bin 分配的大小是 1.5MB, 如果再打开 A2DP 的命令, 编译出来的固件大概会是 1.7MB, 建议有这样需求的客户使用 8MB flash 或者更大的模组, 并且需要带 PSRAM.

Note:

  • v2.0.0.0 之后的版本, 才默认打开 BT SPP 命令, 以前的不具有 BT 功能;
  • 也可以 make SILENCE=1 编译, 会减少 bin 大小, 但是不会有 log 信息出来

1. 基础 BT 命令

在使用经典蓝牙的时候, 第一步就是初始化经典蓝牙协议栈, 这是使用其他 BT 命令的前提条件.

初始化 BT

AT+BTINIT=1

OK

如果使用完之后, 也可以关闭协议栈.

关闭 BT

AT+BTINIT=0

OK

初始化 BT 之后, 可以做一些参数设置, 比如设备名字, 发现模式, 加密参数等等.

设置名字

AT+BTNAME="EXAMPLE"

OK

设置名字这个应该不用过多解释, 一看就懂.

设置发现模式

AT+BTSCANMODE=2 

OK

参数 2, 表示是可发现可连接, 另外两个参数 0 和 1, 可以参照指令文档.
一般这里建议支持设置为 2, 就可以了, 如果是被连接上之后不想再被连接, 可以再设置为 0.

Tips

  • 这条命令是能被连接的必要条件, 必须要设置

加密参数

AT+BTSECPARAM=3,1,"9527"  // NO input NO output, fixed PIN code, 9527

OK

这条命令用来设置 IO capabillity, PIN type 以及 PIN code

Tips

  • ESP-AT BT 同时支持 Simple pairLegacy pair, 如果对端设置也支持 Simple pair 的话, 就不会走 Legacy pair 的流程.

发现周边设备

// General inquiry mode, inquiry duration: 10, inquiry response: 10
AT+BTSTARTDISC=0,10,10

OK

每个参数的定义以及范围, 请参考命令手册, 下面我们举一个完整的例子:

AT+BTINIT=1

OK
AT+BTSCANMODE=2

OK
AT+BTSTARTDISC=0,10,10
+BTSTARTDISC:50:8f:4c:f2:84:19,xcg,0x2,0x3,0x2d0,-65
+BTSTARTDISC:50:8f:4c:f2:84:19,,0x2,0x3,0x2d0,-69
+BTSTARTDISC:50:8f:4c:f2:84:19,,0x2,0x3,0x2d0,-70
+BTSTARTDISC:50:8f:4c:f2:84:19,,0x2,0x3,0x2d0,-64
+BTSTARTDISC:a8:9c:ed:b0:06:ff,,0x2,0x3,0x2d0,-65

OK

同样子, 参数的描述请参考命令手册.

+BTSTARTDISC:<bt_addr>,<dev_name>,<major_dev_class>,<minor_dev_class>,<major_srv_class>

2. BT SPP 命令

上面是通用的 BT 命令, 我们现在介绍 SPP Profile 相关的命令
首先还是初始化 Profile, 在这之前需要初始化 BT 协议栈.

初始化 SPP Profile

AT+BTSPPINIT=2   

OK

这里的参数可以选择 0, 1, 2, 其中:

  • 0: 表示关闭 SPP profile
  • 1: 表示初始化为 Master
  • 2 表示初始化为 Slave

在一般的应用场景中, 都是模组被 PC 和手机连接的较为常见, 这里我们就举例初始化为 Slave.
如果客户需要用两块 ESP32 AT 来测试的话, 可以分别初始化两块模组为 MasterSlave.

开启 SPP 服务

AT+BTSPPSTART

OK

这个是必须操作, 建议在初始化为 Slave 之后就立刻开启. 如果是 Master , 那么这条命令不用下发.

等待被连接
这个时候, PC 或者手机的系统蓝牙设置里面应该就能扫描到我们的模组了, 在 PC 或者手机端点击链接, 有的电脑会显示连接上, 然后又断开了, 而且模组这里没有被连接的 log, 这个要紧, 请直接打开串口工具, 在端口号里选择这个 SPP 的端口, 点击连接, 就可以了, 这个时候, 连接的 log 就出来了.

+BTSPPCONN:<conn index>,<remote_addr>

数据发送
数据发送用的命令是:

// conn_index: 0, data length: 30
AT+BTSPPSEND=0,30

>
OK

这是发送指定长度数据的命令, 其实和其他 AT 命令发送方式一样, 如果想进入 BT SPP 透传, 直接输入 exe 命令:

AT+BTSPPSEND

>

如果退出透传模式, 输入 '+++'.

数据接收
如果 PC 或者手机主动发送数据, ESP-AT 这里会有 log 提示:

+BTDATA:<length>,<data>

如果是透传模式的话, 那么前面的部分就没有了, 只有 data 部分.

连接
如果我们现在用的是 ESP32 BT 连接 ESP32 BT, 那么我们可以在 Master 端发起连接:

例如:

// conn_index: 0, sec_mode: 0 -> No security, remote_address
AT+BTSPPCONN=0,0,"24:0a:c4:09:34:23"

OK

Tips

  • 这里的第二个参数目前就设置为 0, 不要设置为别的参数

3. BT A2DP 命令

A2DP 有两个角色: A2DP SinkA2DP Source.
在初始化 BT 协议栈之后, 可以选择初始化为 Sink 或者 Source.

3.1 初始化为 Sink

初始化为 Sink 之前, 需要做一些前置命令;

AT+BTINIT=1

OK
AT+BTSCANMODE=2

OK

另外设置名字以及加密参数的命令是可选的, 用户可以自行选择是否添加.

现在可以初始化 A2DP Profile:

AT+BTA2DPINIT=2

OK

这个时候就是等待被连接了, 如果 Source 端开始播放音乐了, 那么 Sink 端这里可以做一些控制, 比如:

  • 暂停
  • 开始
  • 快进
  • 下一首
  • 上一首
AT+BTA2DPCTRL=<conn_index>,<ctrl>

OK
  • ctrl: types of control.

    • 0 : stop play
    • 1 : start play
    • 2 : forward
    • 3 : backward
    • 4 : fastward start
    • 5 : fastward stop

Tips:

  • 使用 A2DP Sink 需要客户自己添加 I2S 部分的代码, 初始化 I2S 部分的代码可以加在外部 app_main 里面.
  • decoder 芯片部分的驱动代码也需要客户自行添加.

3.2 初始化为 Source

如果需要做 A2DP Source, 前面部分的初始化和上面都是一样的.

初始化为 A2DP Source:

AT+BTA2DPINIT=2

OK

设置音频源:

AT+BTA2DPSRC="https://dl.espressif.com/dl/audio/ff-16b-2c-44100hz.mp3"

目前我们仅支持 MP3 格式, 后续会支持其他音乐格式以及从本地 flash 读取音频文件.

在正式开始播放音乐之前, 还必须连接上网络, 需要连上一个连接外网的路由器, 连接的步骤这里就不重复.

开始播放音乐:

AT+BTA2DPCTRL=<conn_index>,<ctrl>

OK
  • conn_index: index of classic bluetooth A2DP connection; only 0 is supported for the single connection right now.

  • ctrl: types of control.

    • 0 : stop play
    • 1 : start play
    • 2 : suspend
发布了57 篇原创文章 · 获赞 76 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/espressif/article/details/102891588
BT