Bluetooth® Low Energy AT 命令集
AT+BLEINIT:Bluetooth LE 初始化
AT+BLEADDR:设置 Bluetooth LE 设备地址
AT+BLENAME:查询/设置 Bluetooth LE 设备名称
AT+BLESCANPARAM:查询/设置 Bluetooth LE 扫描参数
AT+BLESCAN:使能 Bluetooth LE 扫描
AT+BLESCANRSPDATA:设置 Bluetooth LE 扫描响应
AT+BLEADVPARAM:查询/设置 Bluetooth LE 广播参数
AT+BLEADVDATA:设置 Bluetooth LE 广播数据
AT+BLEADVDATAEX:自动设置 Bluetooth LE 广播数据
AT+BLEADVSTART:开始 Bluetooth LE 广播
AT+BLEADVSTOP:停止 Bluetooth LE 广播
AT+BLECONN:建立 Bluetooth LE 连接
AT+BLECONNPARAM:查询/更新 Bluetooth LE 连接参数
AT+BLEDISCONN:断开 Bluetooth LE 连接
AT+BLEDATALEN:设置 Bluetooth LE 数据包长度
AT+BLECFGMTU:设置 Bluetooth LE MTU 长度
AT+BLEGATTSSRVCRE:GATTS 创建服务
AT+BLEGATTSSRVSTART:GATTS 开启服务
AT+BLEGATTSSRVSTOP:GATTS 停止服务
AT+BLEGATTSSRV:GATTS 发现服务
AT+BLEGATTSCHAR:GATTS 发现服务特征
AT+BLEGATTSNTFY:服务器 notify 服务特征值给客户端
AT+BLEGATTSIND:服务器 indicate 服务特征值给客户端
AT+BLEGATTSSETATTR:GATTS 设置服务特征值
AT+BLEGATTCPRIMSRV:GATTC 发现基本服务
AT+BLEGATTCINCLSRV:GATTC 发现包含的服务
AT+BLEGATTCCHAR:GATTC 发现服务特征
AT+BLEGATTCRD:GATTC 读取服务特征值
AT+BLEGATTCWR:GATTC 写服务特征值
AT+BLESPPCFG:查询/设置 Bluetooth LE SPP 参数
AT+BLESPP:进入 Bluetooth LE SPP 模式
AT+SAVETRANSLINK:设置 Bluetooth LE 开机 透传模式 信息
AT+BLESECPARAM:查询/设置 Bluetooth LE 加密参数
AT+BLEENC:发起 Bluetooth LE 加密请求
AT+BLEENCRSP:回复对端设备发起的配对请求
AT+BLEKEYREPLY:给对方设备回复密钥
AT+BLECONFREPLY:给对方设备回复确认结果(传统连接阶段)
AT+BLEENCDEV:查询绑定的 Bluetooth LE 加密设备列表
AT+BLEENCCLEAR:清除 Bluetooth LE 加密设备列表
AT+BLESETKEY:设置 Bluetooth LE 静态配对密钥
AT+BLEHIDINIT:Bluetooth LE HID 协议初始化
AT+BLEHIDKB:发送 Bluetooth LE HID 键盘信息
AT+BLEHIDMUS:发送 Bluetooth LE HID 鼠标信息
AT+BLEHIDCONSUMER:发送 Bluetooth LE HID consumer 信息
AT+BLUFI:开启或关闭 BluFi
AT+BLUFINAME:查询/设置 BluFi 设备名称
AT+BLUFISEND: 发送 BluFi 用户自定义数据
介绍
当前,ESP32 系列 AT 固件支持 蓝牙核心规范 4.2 版本。
重要
默认的 AT 固件支持此页面下的所有 AT 命令。如果您需要修改 ESP32 默认支持的命令,请自行 编译 ESP-AT 工程,在第五步配置工程里选择(下面每项是独立的,根据您的需要选择):
禁用 BluFi 命令:
Component config
->AT
->AT blufi command support
禁用 Bluetooth LE 命令:
Component config
->AT
->AT ble command support
禁用 Bluetooth LE HID 命令:
Component config
->AT
->AT ble hid command support
AT+BLEINIT:Bluetooth LE 初始化
查询命令
功能:
查询 Bluetooth LE 是否初始化
命令:
AT+BLEINIT?
响应:
若已初始化,AT 返回:
+BLEINIT:<role>
OK
若未初始化,AT 返回:
+BLEINIT:0
OK
参数
<init>:
0: 注销 Bluetooth LE
1: client 角色
2: server 角色
说明
使用 Bluetooth LE 功能时,如果您无需使用 SoftAP 模式,则建议您可以通过 AT+CWMODE 设置 Wi-Fi 模式为 Null 或 Station 模式。
使用其它 Bluetooth LE 命令之前,请先调用本命令,初始化 Bluetooth LE 角色。
Bluetooth LE 角色初始化后,不能直接切换。如需切换角色,需要先调用 AT+RST 命令重启系统,再重新初始化 Bluetooth LE 角色。
建议在注销 Bluetooth LE 之前,停止正在进行的广播、扫描并断开所有的连接。
如果 Bluetooth LE 已初始化,则 AT+CIPMODE 无法设置为 1。
示例
AT+BLEINIT=1
AT+BLEADDR:设置 Bluetooth LE 设备地址
参数
<addr_type>:
0: 公共地址 (Public Address)
1: 随机地址 (Random Address)
说明
静态地址 (Static Address) 应满足以下条件:
地址最高两位应为 1;
随机地址部分至少有 1 位为 0;
随机地址部分至少有 1 位为 1。
设置的静态地址不会被保存在 NVS 区。
示例
AT+BLEADDR=1,"f8:7f:24:87:1c:7b" // 设置随机设备地址的静态地址
AT+BLEADDR=1 // 设置随机设备地址的私有地址
AT+BLEADDR=0 // 设置公共设备地址
AT+BLENAME:查询/设置 Bluetooth LE 设备名称
参数
<device_name>:Bluetooth LE 设备名称,最大长度:32,默认名称为 “ESP-AT”。
说明
若 AT+SYSSTORE=1,配置更改将保存在 NVS 区。
通过该命令设置设备名称后,建议您执行 AT+BLEADVDATA 命令将设备名称放进广播数据当中。
示例
AT+BLENAME="esp_demo"
AT+BLESCANPARAM:查询/设置 Bluetooth LE 扫描参数
查询命令
功能:
查询 Bluetooth LE 扫描参数
命令:
AT+BLESCANPARAM?
响应:
+BLESCANPARAM:<scan_type>,<own_addr_type>,<filter_policy>,<scan_interval>,<scan_window>
OK
设置命令
功能:
设置 Bluetooth LE 扫描参数
命令:
AT+BLESCANPARAM=<scan_type>,<own_addr_type>,<filter_policy>,<scan_interval>,<scan_window>
响应:
OK
参数
<scan_type>:扫描类型
0: 被动扫描
1: 主动扫描
<own_addr_type>:地址类型
0: 公共地址
1: 随机地址
2: RPA 公共地址
3: RPA 随机地址
<filter_policy>:扫描过滤方式
0: BLE_SCAN_FILTER_ALLOW_ALL
1: BLE_SCAN_FILTER_ALLOW_ONLY_WLST
2: BLE_SCAN_FILTER_ALLOW_UND_RPA_DIR
3: BLE_SCAN_FILTER_ALLOW_WLIST_PRA_DIR
<scan_interval>:扫描间隔。本参数值应大于等于
<scan_window>
参数值。参数范围:[0x0004,0x4000]。扫描间隔是该参数乘以0.625
毫秒,所以实际的扫描间隔范围为 [2.5,10240] 毫秒。<scan_window>:扫描窗口。本参数值应小于等于
<scan_interval>
参数值。参数范围:[0x0004,0x4000]。扫描窗口是该参数乘以0.625
毫秒,所以实际的扫描窗口范围为 [2.5,10240] 毫秒。
示例
AT+BLEINIT=1 // 角色:客户端
AT+BLESCANPARAM=0,0,0,100,50
AT+BLESCAN:使能 Bluetooth LE 扫描
设置命令
功能:
开始/停止 Bluetooth LE 扫描
命令:
AT+BLESCAN=<enable>[,<duration>][,<filter_type>,<filter_param>]
响应:
+BLESCAN:<addr>,<rssi>,<adv_data>,<scan_rsp_data>,<addr_type>
OK
+BLESCANDONE
参数
<enable>:
1: 开始持续扫描
0: 停止持续扫描
[<duration>]:扫描持续时间,单位:秒。
若设置停止扫描,无需设置本参数;
若设置开始扫描,需设置本参数:
本参数设为 0 时,则表示开始持续扫描;
本参数设为非 0 值时,例如
AT+BLESCAN=1,3
,则表示扫描 3 秒后自动结束扫描,然后返回扫描结果。
[<filter_type>]:过滤选项
1: “MAC”
2: “NAME”
<filter_param>:过滤参数,表示对方设备 MAC 地址或名称
<addr>:Bluetooth LE 地址
<rssi>:信号强度
<adv_data>:广播数据
<scan_rsp_data>:扫描响应数据
<addr_type>:广播设备地址类型
说明
响应中的
OK
和+BLESCAN:<addr>,<rssi>,<adv_data>,<scan_rsp_data>,<addr_type>
在输出顺序上没有严格意义上的先后顺序。OK
可能在+BLESCAN:<addr>,<rssi>,<adv_data>,<scan_rsp_data>,<addr_type>
之前输出,也有可能在+BLESCAN:<addr>,<rssi>,<adv_data>,<scan_rsp_data>,<addr_type>
之后输出。如果您想要获得扫描响应数据,需要使用 AT+BLESCANPARAM 指令设置扫描方式为
active scan (AT+BLESCANPARAM=1,0,0,100,50)
,并且对端设备需要设置scan rsp data
,才能获得扫描响应数据。
示例
AT+BLEINIT=1 // 角色:客户端
AT+BLESCAN=1 // 开始扫描
AT+BLESCAN=0 // 停止扫描
AT+BLESCAN=1,3,1,"24:0A:C4:96:E6:88" // 开始扫描,过滤类型为 MAC 地址
AT+BLESCAN=1,3,2,"ESP-AT" // 开始扫描,过滤类型为设备名称
AT+BLESCANRSPDATA:设置 Bluetooth LE 扫描响应
参数
<scan_rsp_data>:扫描响应数据,为 HEX 字符串。例如,若想设置扫描响应数据为 “0x11 0x22 0x33 0x44 0x55”,则命令为
AT+BLESCANRSPDATA="1122334455"
。
示例
AT+BLEINIT=2 // 角色:服务器
AT+BLESCANRSPDATA="1122334455"
AT+BLEADVPARAM:查询/设置 Bluetooth LE 广播参数
查询命令
功能:
查询广播参数
命令:
AT+BLEADVPARAM?
响应:
+BLEADVPARAM:<adv_int_min>,<adv_int_max>,<adv_type>,<own_addr_type>,<channel_map>,<adv_filter_policy>,<peer_addr_type>,<peer_addr>
OK
设置命令
功能:
设置广播参数
命令:
AT+BLEADVPARAM=<adv_int_min>,<adv_int_max>,<adv_type>,<own_addr_type>,<channel_map>[,<adv_filter_policy>][,<peer_addr_type>,<peer_addr>]
响应:
OK
参数
<adv_int_min>:最小广播间隔。参数范围:[0x0020,0x4000]。广播间隔等于该参数乘以
0.625
毫秒,所以实际的最小广播间隔范围为 [20,10240] 毫秒。本参数值应小于等于<adv_int_max>
参数值。<adv_int_max>:最大广播间隔。参数范围:[0x0020,0x4000]。广播间隔等于该参数乘以
0.625
毫秒,所以实际的最大广播间隔范围为 [20,10240] 毫秒。本参数值应大于等于<adv_int_min>
参数值。<adv_type>:
0: ADV_TYPE_IND
1: ADV_TYPE_DIRECT_IND_HIGH
2: ADV_TYPE_SCAN_IND
3: ADV_TYPE_NONCONN_IND
4: ADV_TYPE_DIRECT_IND_LOW
<own_addr_type>:Bluetooth LE 地址类型
0: BLE_ADDR_TYPE_PUBLIC
1: BLE_ADDR_TYPE_RANDOM
<channel_map>:广播信道
1: ADV_CHNL_37
2: ADV_CHNL_38
4: ADV_CHNL_39
7: ADV_CHNL_ALL
[<adv_filter_policy>]:广播过滤器规则
0: ADV_FILTER_ALLOW_SCAN_ANY_CON_ANY
1: ADV_FILTER_ALLOW_SCAN_WLST_CON_ANY
2: ADV_FILTER_ALLOW_SCAN_ANY_CON_WLST
3: ADV_FILTER_ALLOW_SCAN_WLST_CON_WLST
[<peer_addr_type>]:对方 Bluetooth LE 地址类型
0: PUBLIC
1: RANDOM
[<peer_addr>]:对方 Bluetooth LE 地址
说明
如果从未设置过
peer_addr
, 那么查询出来的结果会是全零。
示例
AT+BLEINIT=2 // 角色:服务器
AT+BLEADDR=1,"c2:34:45:78:66:89"
AT+BLEADVPARAM=50,50,0,1,4,0,1,"12:34:45:78:66:88"
// 此时 Bluetooth LE 客户端扫描到的 ESP 设备的 MAC 地址为 "c2:34:45:78:66:89"
AT+BLEADVDATA:设置 Bluetooth LE 广播数据
参数
<adv_data>:广播数据,为 HEX 字符串。例如,若想设置广播数据为 “0x11 0x22 0x33 0x44 0x55”,则命令为
AT+BLEADVDATA="1122334455"
。最大长度:31 字节。
说明
如果之前已经使用命令 AT+BLEADVDATAEX=<dev_name>,<uuid>,<manufacturer_data>,<include_power> 设置了广播数据,则会被本命令设置的广播数据覆盖。
如果您想使用本命令修改设备名称,则建议在执行完该命令之后执行 AT+BLENAME 命令将设备名称设置为同样的名称。
如果需要设置更长的广播数据,请调用 AT+BLESCANRSPDATA 指令来设置。
示例
AT+BLEINIT=2 // 角色:服务器
AT+BLEADVDATA="1122334455"
AT+BLEADVDATAEX:自动设置 Bluetooth LE 广播数据
查询命令
功能:
查询广播数据的参数
命令:
AT+BLEADVDATAEX?
响应:
+BLEADVDATAEX:<dev_name>,<uuid>,<manufacturer_data>,<include_power>
OK
设置命令
功能:
设置广播数据并开始广播
命令:
AT+BLEADVDATAEX=<dev_name>,<uuid>,<manufacturer_data>,<include_power>
响应:
OK
参数
<dev_name>:字符串参数,表示设备名称。例如,若想设置设备名称为 “just-test”,则命令为
AT+BLEADVSTARTEX="just-test",<uuid>,<manufacturer_data>,<include_power>
。<uuid>:字符串参数。例如,若想设置 UUID 为 “0xA002”,则命令为
AT+BLEADVSTARTEX=<dev_name>,"A002",<manufacturer_data>,<include_power>
。<manufacturer_data>:制造商数据,为 HEX 字符串。例如,若想设置制造商数据为 “0x11 0x22 0x33 0x44 0x55”,则命令为
AT+BLEADVSTARTEX=<dev_name>,<uuid>,"1122334455",<include_power>
。<include_power>:若广播数据需包含 TX 功率,本参数应该设为
1
;否则,为0
。
说明
如果之前已经使用命令 AT+BLEADVDATA=<adv_data> 设置了广播数据,则会被本命令设置的广播数据覆盖。
此命令会自动将之前使用 AT+BLEADVPARAM 命令设置的广播类型更改为 0。
示例
AT+BLEINIT=2 // 角色:服务器
AT+BLEADVDATAEX="ESP-AT","A002","0102030405",1
AT+BLEADVSTART:开始 Bluetooth LE 广播
说明
若未使用命令 AT+BLEADVPARAM=<adv_parameter> 设置广播参数,则使用默认广播参数。
若未使用命令 AT+BLEADVDATA=<adv_data> 设置广播数据,则发送全 0 数据包。
若之前已经使用命令 AT+BLEADVDATA=<adv_data> 设置过广播数据,则会被 AT+BLEADVDATAEX=<dev_name>,<uuid>,<manufacturer_data>,<include_power> 设置的广播数据覆盖,相反,如果先使用 AT+BLEADVDATAEX,则会被 AT+BLEADVDATA 设置的广播数据覆盖。
开启 Bluetooth LE 广播后,如果没有建立 Bluetooth LE 连接,那么将会一直保持广播;如果建立了连接,则会自动结束广播。
示例
AT+BLEINIT=2 // 角色:服务器
AT+BLEADVSTART
AT+BLEADVSTOP:停止 Bluetooth LE 广播
说明
若开始广播后,成功建立 Bluetooth LE 连接,则会自动结束 Bluetooth LE 广播,无需调用本命令。
示例
AT+BLEINIT=2 // 角色:服务器
AT+BLEADVSTART
AT+BLEADVSTOP
AT+BLECONN:建立 Bluetooth LE 连接
查询命令
功能:
查询 Bluetooth LE 连接
命令:
AT+BLECONN?
响应:
+BLECONN:<conn_index>,<remote_address>
OK
若未建立连接,则响应不显示 <conn_index> 和 <remote_address> 参数。
设置命令
功能:
建立 Bluetooth LE 连接
命令:
AT+BLECONN=<conn_index>,<remote_address>[,<addr_type>,<timeout>]
响应:
若建立连接成功,则提示:
+BLECONN:<conn_index>,<remote_address>
OK
若建立连接失败,则提示:
+BLECONN:<conn_index>,-1
ERROR
若是因为参数错误或者其它的一些原因导致连接失败,则提示:
ERROR
参数
<conn_index>:Bluetooth LE 连接号,范围:[0,2]。
<remote_address>:对方 Bluetooth LE 设备地址。
[<addr_type>]:广播设备地址类型:
0: 公共地址 (Public Address)
1: 随机地址 (Random Address)
[<timeout>]:连接超时时间,单位:秒。范围:[3,30]。
说明
建议在建立新连接之前,先运行 AT+BLESCAN 命令扫描设备,确保目标设备处于广播状态。
最大连接超时为 30 秒。
如果 Bluetooth LE server 已初始化且连接已成功建立,则可以使用此命令在对等设备 (GATTC) 中发现服务。还可以使用以下 GATTC 命令:
如果 AT+BLECONN? 在 Bluetooth LE 未初始的情况下执行 (AT+BLEINIT=0),则系统不会输出
+BLECONN:<conn_index>,<remote_address>
。
示例
AT+BLEINIT=1 // 角色:客户端
AT+BLECONN=0,"24:0a:c4:09:34:23",0,10
AT+BLECONNPARAM:查询/更新 Bluetooth LE 连接参数
查询命令
功能:
查询 Bluetooth LE 连接参数
命令:
AT+BLECONNPARAM?
响应:
+BLECONNPARAM:<conn_index>,<min_interval>,<max_interval>,<cur_interval>,<latency>,<timeout>
OK
设置命令
功能:
更新 Bluetooth LE 连接参数
命令:
AT+BLECONNPARAM=<conn_index>,<min_interval>,<max_interval>,<latency>,<timeout>
响应:
OK
若设置失败,则提示以下信息:
+BLECONNPARAM: <conn_index>,-1
参数
<conn_index>:Bluetooth LE 连接号,范围:[0,2]。
<min_interval>:最小连接间隔。本参数值应小于等于
<max_interval>
参数值。参数范围:[0x0006,0x0C80]。连接间隔等于该参数乘以1.25
毫秒,所以实际的最小连接间隔范围为 [7.5,4000] 毫秒。<max_interval>:最大连接间隔。本参数值应大于等于
<min_interval>
参数值。参数范围:[0x0006,0x0C80]。连接间隔等于该参数乘以1.25
毫秒,所以实际的最大连接间隔范围为 [7.5,4000] 毫秒。<cur_interval>:当前连接间隔。
<latency>:延迟。参数范围:[0x0000,0x01F3]。
<timeout>:超时。参数范围:[0x000A,0x0C80]。超时等于该参数乘以
10
毫秒,所以实际的超时范围为 [100,32000] 毫秒。
说明
本命令要求先建立连接,并且仅支持 client 角色更新连接参数。
示例
AT+BLEINIT=1 // 角色:客户端
AT+BLECONN=0,"24:0a:c4:09:34:23"
AT+BLECONNPARAM=0,12,14,1,500
AT+BLEDISCONN:断开 Bluetooth LE 连接
执行命令
功能:
断开 Bluetooth LE 连接
命令:
AT+BLEDISCONN=<conn_index>
响应:
OK // 收到 AT+BLEDISCONN 命令
+BLEDISCONN:<conn_index>,<remote_address> // 运行命令成功
参数
<conn_index>:Bluetooth LE 连接号,范围:[0,2]。
<remote_address>:对方 Bluetooth LE 设备地址。
说明
仅支持客户端运行本命令断开连接。
示例
AT+BLEINIT=1 // 角色:客户端
AT+BLECONN=0,"24:0a:c4:09:34:23"
AT+BLEDISCONN=0
AT+BLEDATALEN:设置 Bluetooth LE 数据包长度
参数
<conn_index>:Bluetooth LE 连接号,范围:[0,2]。
<pkt_data_len>:数据包长度,范围:[0x001B,0x00FB]。
说明
需要先建立 Bluetooth LE 连接,才能设置数据包长度。
示例
AT+BLEINIT=1 // 角色:客户端
AT+BLECONN=0,"24:0a:c4:09:34:23"
AT+BLEDATALEN=0,30
AT+BLECFGMTU:设置 Bluetooth LE MTU 长度
查询命令
功能:
查询 MTU(maximum transmission unit,最大传输单元)长度
命令:
AT+BLECFGMTU?
响应:
+BLECFGMTU:<conn_index>,<mtu_size>
OK
参数
- **<conn_index>**:Bluetooth LE 连接号,范围:[0,2]。
- **<mtu_size>**:MTU 长度,单位:字节,范围:[23,517]。
说明
- 本命令要求先建立 Bluetooth LE 连接。
- 仅支持客户端运行本命令设置 MTU 的长度。
- MTU 的实际长度需要协商,响应 ``OK`` 只表示尝试协商 MTU 长度,因此设置长度不一定生效,建议调用 :ref:`AT+BLECFGMTU? <cmd-BMTU>` 查询实际 MTU 长度。
示例
AT+BLEINIT=1 // 角色:客户端
AT+BLECONN=0,"24:0a:c4:09:34:23"
AT+BLECFGMTU=0,300
AT+BLEGATTSSRVCRE:GATTS 创建服务
说明
使用 ESP32 作为 Bluetooth LE server 创建服务,需烧录带有 GATTS 配置的 mfg_nvs.bin 文件到 flash 中。
Bluetooth LE server 初始化后,请及时调用本命令创建服务;如果先建立 Bluetooth LE 连接,则无法创建服务。
如果 Bluetooth LE client 已初始化成功,可以使用此命令创建服务;也可以使用其他一些相应的 GATTS 命令,例如启动和停止服务、设置服务特征值和 notification/indication,具体命令如下:
AT+BLEGATTSSRVCRE (建议在 Bluetooth LE 连接建立之前使用)
AT+BLEGATTSSRVSTART (建议在 Bluetooth LE 连接建立之前使用)
示例
AT+BLEINIT=2 // 角色:服务器
AT+BLEGATTSSRVCRE
AT+BLEGATTSSRVSTART:GATTS 开启服务
参数
<srv_index>:服务序号,从 1 开始递增。
示例
AT+BLEINIT=2 // 角色:服务器
AT+BLEGATTSSRVCRE
AT+BLEGATTSSRVSTART
AT+BLEGATTSSRVSTOP:GATTS 停止服务
参数
<srv_index>:服务序号,从 1 开始递增。
示例
AT+BLEINIT=2 // 角色:服务器
AT+BLEGATTSSRVCRE
AT+BLEGATTSSRVSTART
AT+BLEGATTSSRVSTOP
AT+BLEGATTSSRV:GATTS 发现服务
查询命令
功能:
GATTS 发现服务
命令:
AT+BLEGATTSSRV?
响应:
+BLEGATTSSRV:<srv_index>,<start>,<srv_uuid>,<srv_type>
OK
参数
<srv_index>:服务序号,从 1 开始递增。
<start>:
0: 服务未开始;
1: 服务已开始。
<srv_uuid>:服务的 UUID。
<srv_type>:服务的类型:
0: 次要服务;
1: 首要服务。
示例
AT+BLEINIT=2 // 角色:服务器
AT+BLEGATTSSRVCRE
AT+BLEGATTSSRV?
AT+BLEGATTSCHAR:GATTS 发现服务特征
查询命令
功能:
GATTS 发现服务特征
命令:
AT+BLEGATTSCHAR?
响应:
对于服务特征信息,响应如下:
+BLEGATTSCHAR:"char",<srv_index>,<char_index>,<char_uuid>,<char_prop>
对于描述符信息,响应如下:
+BLEGATTSCHAR:"desc",<srv_index>,<char_index>,<desc_index>
OK
参数
<srv_index>:服务序号,从 1 开始递增。
<char_index>:服务特征的序号,从 1 起始递增。
<char_uuid>:服务特征的 UUID。
<char_prop>:服务特征的属性。
<desc_index>:特征描述符序号。
<desc_uuid>:特征描述符的 UUID。
示例
AT+BLEINIT=2 // 角色:服务器
AT+BLEGATTSSRVCRE
AT+BLEGATTSSRVSTART
AT+BLEGATTSCHAR?
AT+BLEGATTSNTFY:服务器 notify 服务特征值给客户端
设置命令
功能:
服务器 notify 服务特征值给客户端
命令:
AT+BLEGATTSNTFY=<conn_index>,<srv_index>,<char_index>,<length>
响应:
>
符号 >
表示 AT 准备好接收串口数据,此时您可以输入数据,当数据长度达到参数 <length>
的值时,执行 notify 操作。
若数据传输成功,则提示:
OK
参数
<conn_index>:Bluetooth LE 连接号,范围:[0,2]。
<srv_index>:服务序号,可运行 AT+BLEGATTSCHAR? 查询。
<char_index>:服务特征的序号,可运行 AT+BLEGATTSCHAR? 查询。
<length>:数据长度,最大长度:
( :ref:`MTU <cmd-BMTU>` - 3)
。
示例
AT+BLEINIT=2 // 角色:服务器
AT+BLEGATTSSRVCRE
AT+BLEGATTSSRVSTART
AT+BLEADVSTART // 开始广播,当 client 连接后,必须配置接收 notify
AT+BLEGATTSCHAR? // 查询允许 notify 客户端的特征
// 例如,使用 3 号服务的 6 号特征 notify 长度为 4 字节的数据,使用如下命令:
AT+BLEGATTSNTFY=0,3,6,4
// 提示 ">" 符号后,输入 4 字节的数据,如 "1234",然后数据自动传输
AT+BLEGATTSIND:服务器 indicate 服务特征值给客户端
设置命令
功能:
服务器 indicate 服务特征值给客户端
命令:
AT+BLEGATTSIND=<conn_index>,<srv_index>,<char_index>,<length>
响应:
>
符号 >
表示 AT 准备好接收串口数据,此时您可以输入数据,当数据长度达到参数 <length>
的值时,执行 indicate 操作。
若数据传输成功,则提示:
OK
参数
<conn_index>:Bluetooth LE 连接号,范围:[0,2]。
<srv_index>:服务序号,可运行 AT+BLEGATTSCHAR? 查询。
<char_index>:服务特征的序号,可运行 AT+BLEGATTSCHAR? 查询。
<length>:数据长度,最大长度:(MTU - 3)。
示例
AT+BLEINIT=2 // 角色:服务器
AT+BLEGATTSSRVCRE
AT+BLEGATTSSRVSTART
AT+BLEADVSTART // 开始广播,当 client 连接后,必须配置接收 indication
AT+BLEGATTSCHAR? // 查询客户端可以接收 indication 的特征
// 例如,使用 3 号服务的 7 号特征 indicate 长度为 4 字节的数据,命令如下:
AT+BLEGATTSIND=0,3,7,4
// 提示 ">" 符号后,输入 4 字节的数据,如 "1234",然后数据自动传输
AT+BLEGATTSSETATTR:GATTS 设置服务特征值
设置命令
功能:
GATTS 设置服务特征值或描述符值
命令:
AT+BLEGATTSSETATTR=<srv_index>,<char_index>,[<desc_index>],<length>
响应:
>
符号 >
表示 AT 准备好接收串口数据,此时您可以输入数据,当数据长度达到参数 <length>
的值时,执行设置操作。
若数据传输成功,则提示:
OK
参数
<srv_index>:服务序号,可运行 AT+BLEGATTSCHAR? 查询。
<char_index>:服务特征的序号,可运行 AT+BLEGATTSCHAR? 查询。
[<desc_index>]:特征描述符序号:
若填写,则设置描述符的值;
若未填写,则设置特征值。
<length>:数据长度。
说明
如果
<length>
参数值大于支持的最大长度,则设置会失败。关于 service table,请见 gatts_data.csv 。
示例
AT+BLEINIT=2 // 角色:服务器
AT+BLEGATTSSRVCRE
AT+BLEGATTSSRVSTART
AT+BLEGATTSCHAR?
// 例如,向 1 号服务的 1 号特征写入长度为 1 字节的数据,命令如下:
AT+BLEGATTSSETATTR=1,1,,1
// 提示 ">" 符号后,输入 1 字节的数据即可,例如 "8",然后设置开始
AT+BLEGATTCPRIMSRV:GATTC 发现基本服务
查询命令
功能:
GATTC (Generic Attributes Client) 发现基本服务
命令:
AT+BLEGATTCPRIMSRV=<conn_index>
响应:
+BLEGATTCPRIMSRV:<conn_index>,<srv_index>,<srv_uuid>,<srv_type>
OK
参数
<conn_index>:Bluetooth LE 连接号,范围:[0,2]。
<srv_index>:服务序号,从 1 开始递增。
<srv_uuid>:服务的 UUID。
<srv_type>:服务的类型:
0: 次要服务;
1: 首要服务。
说明
使用本命令,需要先建立 Bluetooth LE 连接。
示例
AT+BLEINIT=1 // 角色:客户端
AT+BLECONN=0,"24:12:5f:9d:91:98"
AT+BLEGATTCPRIMSRV=0
AT+BLEGATTCINCLSRV:GATTC 发现包含的服务
设置命令
功能:
GATTC 发现包含服务
命令:
AT+BLEGATTCINCLSRV=<conn_index>,<srv_index>
响应:
+BLEGATTCINCLSRV:<conn_index>,<srv_index>,<srv_uuid>,<srv_type>,<included_srv_uuid>,<included_srv_type>
OK
参数
<conn_index>:Bluetooth LE 连接号,范围:[0,2]。
<srv_index>:服务序号,可运行 AT+BLEGATTCPRIMSRV=<conn_index> 查询。
<srv_uuid>:服务的 UUID。
<srv_type>:服务的类型:
0: 次要服务;
1: 首要服务。
<included_srv_uuid>:包含服务的 UUID。
<included_srv_type>:包含服务的类型:
0: 次要服务;
1: 首要服务。
说明
使用本命令,需要先建立 Bluetooth LE 连接。
示例
AT+BLEINIT=1 // 角色:客户端
AT+BLECONN=0,"24:12:5f:9d:91:98"
AT+BLEGATTCPRIMSRV=0
AT+BLEGATTCINCLSRV=0,1 // 根据前一条命令的查询结果,指定 index 查询
AT+BLEGATTCCHAR:GATTC 发现服务特征
设置命令
功能:
GATTC 发现服务特征
命令:
AT+BLEGATTCCHAR=<conn_index>,<srv_index>
响应:
对于服务特征信息,响应如下:
+BLEGATTCCHAR:"char",<conn_index>,<srv_index>,<char_index>,<char_uuid>,<char_prop>
对于描述符信息,响应如下:
+BLEGATTCCHAR:"desc",<conn_index>,<srv_index>,<char_index>,<desc_index>,<desc_uuid>
OK
参数
<conn_index>:Bluetooth LE 连接号,范围:[0,2]。
<srv_index>:服务序号,可运行 AT+BLEGATTCPRIMSRV=<conn_index> 查询。
<char_index>:服务特征的序号,从 1 开始递增。
<char_uuid>:服务特征的 UUID。
<char_prop>:服务特征的属性。
<desc_index>:特征描述符序号。
<desc_uuid>:特征描述符的 UUID。
说明
使用本命令,需要先建立 Bluetooth LE 连接。
示例
AT+BLEINIT=1 // 角色:客户端
AT+BLECONN=0,"24:12:5f:9d:91:98"
AT+BLEGATTCPRIMSRV=0
AT+BLEGATTCCHAR=0,1 // 根据前一条命令的查询结果,指定 index 查询
AT+BLEGATTCRD:GATTC 读取服务特征值
设置命令
功能:
GATTC 读取服务特征值或描述符值
命令:
AT+BLEGATTCRD=<conn_index>,<srv_index>,<char_index>[,<desc_index>]
响应:
+BLEGATTCRD:<conn_index>,<len>,<value>
OK
参数
<conn_index>:Bluetooth LE 连接号,范围:[0,2]。
<srv_index>:服务序号,可运行 AT+BLEGATTCPRIMSRV=<conn_index> 查询。
<char_index>:服务特征序号,可运行 AT+BLEGATTCCHAR=<conn_index>,<srv_index> 查询。
[<desc_index>]:特征描述符序号:
若设置,读取目标描述符的值;
若未设置,读取目标特征的值。
<len>:数据长度。
<value>:<char_value> 或者 <desc_value>。
<char_value>:服务特征值,字符串格式,运行 AT+BLEGATTCRD=<conn_index>,<srv_index>,<char_index> 读取。例如,若响应为
+BLEGATTCRD:0,1,0
,则表示数据长度为 1,内容为 “0”。<desc_value>:服务特征描述符的值,字符串格式,运行 AT+BLEGATTCRD=<conn_index>,<srv_index>,<char_index>,<desc_index> 读取。例如,若响应为
+BLEGATTCRD:0,4,0123
,则表示数据长度为 4,内容为 “0123”。
说明
使用本命令,需要先建立 Bluetooth LE 连接。
若目标服务特征不支持读操作,则返回 “ERROR”。
示例
AT+BLEINIT=1 // 角色:客户端
AT+BLECONN=0,"24:12:5f:9d:91:98"
AT+BLEGATTCPRIMSRV=0
AT+BLEGATTCCHAR=0,3 // 根据前一条命令的查询结果,指定 index 查询
// 例如,读取第 3 号服务的第 2 号特征的第 1 号描述符信息,命令如下:
AT+BLEGATTCRD=0,3,2,1
AT+BLEGATTCWR:GATTC 写服务特征值
设置命令
功能:
GATTC 写服务特征值或描述符值
命令:
AT+BLEGATTCWR=<conn_index>,<srv_index>,<char_index>[,<desc_index>],<length>
Response:
>
符号 >
表示 AT 准备好接收串口数据,此时您可以输入数据,当数据长度达到参数 <length>
的值时,执行写入操作。
若数据传输成功,则提示:
OK
参数
<conn_index>:Bluetooth LE 连接号,范围:[0,2]。
<srv_index>:服务序号,可运行 AT+BLEGATTCPRIMSRV=<conn_index> 查询。
<char_index>:服务特征序号,可运行 AT+BLEGATTCCHAR=<conn_index>,<srv_index> 查询。
[<desc_index>]:特征描述符序号:
若设置,则写目标描述符的值;
若未设置,则写目标特征的值。
<length>:数据长度。该参数的取值范围受 gatts_data.csv 中
val_max_len
参数影响。
说明
使用本命令,需要先建立 Bluetooth LE 连接。
若目标服务特征不支持写操作,则返回 “ERROR”。
示例
AT+BLEINIT=1 // 角色:客户端
AT+BLECONN=0,"24:12:5f:9d:91:98"
AT+BLEGATTCPRIMSRV=0
AT+BLEGATTCCHAR=0,3 // 根据前一条命令的查询结果,指定 index 查询
// 例如,向第 3 号服务的第 4 号特征,写入长度为 6 字节的数据,命令如下:
AT+BLEGATTCWR=0,3,4,,6
// 提示 ">" 符号后,输入 6 字节的数据即可,如 "123456",然后开始写入
AT+BLESPPCFG:查询/设置 Bluetooth LE SPP 参数
查询命令
功能:
查询 Bluetooth LE SPP (Serial Port Profile) 参数
命令:
AT+BLESPPCFG?
响应:
+BLESPPCFG:<tx_service_index>,<tx_char_index>,<rx_service_index>,<rx_char_index>,<auto_conn>
OK
设置命令
功能:
设置或重置 Bluetooth LE SPP 参数
命令:
AT+BLESPPCFG=<cfg_enable>[,<tx_service_index>,<tx_char_index>,<rx_service_index>,<rx_char_index>][,<auto_conn>]
响应:
OK
参数
<cfg_enable>:
0: 重置所有 SPP 参数,后面参数无需填写;
1: 后面参数需要填写。
<tx_service_index>:tx 服务序号,可运行 AT+BLEGATTCPRIMSRV=<conn_index> 和 AT+BLEGATTSSRV? 查询。
<tx_char_index>:tx 服务特征序号,可运行 AT+BLEGATTCCHAR=<conn_index>,<srv_index> 和 AT+BLEGATTSCHAR? 查询。
<rx_service_index>:rx 服务序号,可运行 AT+BLEGATTCPRIMSRV=<conn_index> 和 AT+BLEGATTSSRV? 查询。
<rx_char_index>:rx 服务特征序号,可运行 AT+BLEGATTCCHAR=<conn_index>,<srv_index> 和 AT+BLEGATTSCHAR? 查询。
<auto_conn>: 自动重连标志位,默认情况下,自动重连功能被使能。
0: 禁止 Bluetooth LE 透传自动重连功能。
1: 使能 Bluetooth LE 透传自动重连功能。
说明
对于 Bluetooth LE 客户端,tx 服务特征属性必须是
write with response
或write without response
,rx 服务特征属性必须是indicate
或notify
。对于 Bluetooth LE 服务器,tx 服务特征属性必须是
indicate
或notify
,rx 服务特征属性必须是write with response
或write without response
。禁用了自动重连功能后,如果连接断开,会提示有断开连接信息提示(依赖于 AT+SYSMSG),需要重新发送连接的命令;使能的情况下,连接断开后,会自动重连, MCU 侧将感知不到连接的断开,如果对端的 MAC 发生了改变,则无法连接成功。
示例
AT+BLESPPCFG=0 // 重置 Bluetooth LE SPP 参数
AT+BLESPPCFG=1,3,5,3,7 // 设置 Bluetooth LE SPP 参数
AT+BLESPPCFG? // 查询 Bluetooth LE SPP 参数
AT+BLESPP:进入 Bluetooth LE SPP 模式
执行命令
功能:
进入 Bluetooth LE SPP 模式
命令:
AT+BLESPP
响应:
OK
>
上述响应表示 AT 已经进入 Bluetooth LE SPP 模式,可以进行数据的发送和接收。
若 Bluetooth LE SPP 状态错误 ( 对端在 Bluetooth LE 连接建立后未使能 Notifications ),则返回:
ERROR
说明
示例
AT+BLESPP // 进入 Bluetooth LE SPP 模式
AT+BLESECPARAM:查询/设置 Bluetooth LE 加密参数
查询命令
功能:
查询 Bluetooth LE SMP 加密参数
命令:
AT+BLESECPARAM?
响应:
+BLESECPARAM:<auth_req>,<iocap>,<enc_key_size>,<init_key>,<rsp_key>,<auth_option>
OK
设置命令
功能:
设置 Bluetooth LE SMP 加密参数
命令:
AT+BLESECPARAM=<auth_req>,<iocap>,<enc_key_size>,<init_key>,<rsp_key>[,<auth_option>]
响应:
OK
参数
<auth_req>:认证请求。
0: NO_BOND
1: BOND
4: MITM
8: SC_ONLY
9: SC_BOND
12: SC_MITM
13: SC_MITM_BOND
<iocap>:输入输出能力。
0: DisplayOnly
1: DisplayYesNo
2: KeyboardOnly
3: NoInputNoOutput
4: Keyboard display
<enc_key_size>:加密密钥长度。参数范围:[7,16]。单位:字节。
<init_key>:多个比特位组成的初始密钥。
<rsp_key>:多个比特位组成的响应密钥。
<auth_option>:安全认证选项:
0: 自动选择安全等级;
1: 如果无法满足之前设定的安全等级,则会断开连接。
说明
<init_key>
和<rsp_key>
参数的比特位组合模式如下:Bit0: 用于交换初始密钥和响应密钥的加密密钥;
Bit1: 用于交换初始密钥和响应密钥的 IRK 密钥;
Bit2: 用于交换初始密钥和响应密钥的 CSRK 密钥;
Bit3: 用于交换初始密钥和响应密钥的 link 密钥(仅用于 Bluetooth LE 和 BR/EDR 共存模式)。
示例
AT+BLESECPARAM=1,4,16,3,3,0
AT+BLEENC:发起 Bluetooth LE 加密请求
参数
<conn_index>:Bluetooth LE 连接号,范围:[0,2]。
<sec_act>:
0: SEC_NONE;
1: SEC_ENCRYPT;
2: SEC_ENCRYPT_NO_MITM;
3: SEC_ENCRYPT_MITM。
说明
使用本命令前,请先设置安全参数、建立与对方设备的连接。
示例
AT+RESTORE
AT+BLEINIT=2
AT+BLEGATTSSRVCRE
AT+BLEGATTSSRVSTART
AT+BLEADDR?
AT+BLESECPARAM=1,0,16,3,3
AT+BLESETKEY=123456
AT+BLEADVSTART
// 使用 Bluetooth LE 调试 app 作为 client 与 ESP32 设备建立 Bluetooth LE 连接
AT+BLEENC=0,3
AT+BLEENCRSP:回复对端设备发起的配对请求
参数
<conn_index>:Bluetooth LE 连接号,范围:[0,2]。
<accept>:
0: 拒绝;
1: 接受。
说明
使用本命令后,AT 会在配对请求流程结束后输出配对结果。
+BLEAUTHCMPL:<conn_index>,<enc_result>
<conn_index>:Bluetooth LE 连接号,范围:[0,2]。
<enc_result>:
0: 加密配对成功;
1: 加密配对失败。
示例
AT+BLEENCRSP=0,1
AT+BLEKEYREPLY:给对方设备回复密钥
参数
<conn_index>:Bluetooth LE 连接号,范围:[0,2]。
<key>:配对密钥。
示例
AT+BLEKEYREPLY=0,649784
AT+BLECONFREPLY:给对方设备回复确认结果(传统连接阶段)
参数
<conn_index>:Bluetooth LE 连接号,范围:[0,2]。
<confirm>:
0: 否
1: 是
示例
AT+BLECONFREPLY=0,1
AT+BLEENCDEV:查询绑定的 Bluetooth LE 加密设备列表
查询命令
功能:
查询绑定的 Bluetooth LE 加密设备列表
命令:
AT+BLEENCDEV?
响应:
+BLEENCDEV:<enc_dev_index>,<mac_address>
OK
参数
<enc_dev_index>:已绑定设备的连接号。该参数不一定等于命令 AT+BLECONN 查询出的 Bluetooth LE 连接列表中的
conn_index
参数。范围:[0,14]。<mac_address>:MAC 地址。
说明
ESP-AT 最多允许绑定
15
个设备。如果绑定的设备数量超过 15 个,那么新绑定的设备信息会根据绑定顺序从 0 到 14 号依次覆盖之前的设备信息。
示例
AT+BLEENCDEV?
AT+BLEHIDINIT:Bluetooth LE HID 协议初始化
查询命令
功能:
查询 Bluetooth LE HID 协议初始化情况
命令:
AT+BLEHIDINIT?
响应:
若未初始化,则 AT 返回:
+BLEHIDINIT:0
OK
若已初始化,则 AT 返回:
+BLEHIDINIT:1
OK
参数
<init>:
0: 取消 Bluetooth LE HID 协议的初始化;
1: 初始化 Bluetooth LE HID 协议。
说明
Bluetooth LE HID 无法与通用 GATT/GAP 命令同时使用。
示例
AT+BLEHIDINIT=1
AT+BLEHIDKB:发送 Bluetooth LE HID 键盘信息
设置命令
功能:
发送键盘信息
命令:
AT+BLEHIDKB=<Modifier_keys>,<key_1>,<key_2>,<key_3>,<key_4>,<key_5>,<key_6>
响应:
OK
参数
<Modifier_keys>:组合键。
<key_1>:键代码 1。
<key_2>:键代码 2。
<key_3>:键代码 3。
<key_4>:键代码 4。
<key_5>:键代码 5。
<key_6>:键代码 6。
说明
更多键代码的信息,请参考 Universal Serial Bus HID Usage Tables 的 Keyboard/Keypad Page 章节。
要使此命令与 iOS 产品交互,您的设备需要先通过 MFI 认证。
示例
AT+BLEHIDKB=0,4,0,0,0,0,0 // 输入字符串 "a"
AT+BLEHIDMUS:发送 Bluetooth LE HID 鼠标信息
参数
<buttons>:鼠标按键。
<X_displacement>:X 位移。
<Y_displacement>:Y 位移。
<wheel>:滚轮。
说明
更多 HID 鼠标信息,请参考 Universal Serial Bus HID Usage Tables 的 Generic Desktop Page 和 Application Usages 章节。
要使此命令与 iOS 产品交互,您的设备需要先通过 MFI 认证。
示例
AT+BLEHIDMUS=0,10,10,0
AT+BLEHIDCONSUMER:发送 Bluetooth LE HID consumer 信息
参数
<consumer_usage_id>:consumer ID,如 power、reset、help、volume 等。详情请参考 HID Usage Tables for Universal Serial Bus (USB) 中的 Consumer Page (0x0C) 章节。
示例
AT+BLEHIDCONSUMER=233 // 调高音量
AT+BLUFI:开启或关闭 BluFi
参数
<option>:
0: 关闭 BluFi;
1: 开启 BluFi。
<auth floor>:Wi-Fi 认证模式阈值,ESP-AT 不会连接到认证模式低于此阈值的 AP:
0: OPEN(默认);
1: WEP;
2: WPA_PSK;
3: WPA2_PSK;
4: WPA_WPA2_PSK;
5: WPA2_ENTERPRISE;
6: WPA3_PSK;
7: WPA2_WPA3_PSK。
说明
您只能在 Bluetooth LE 未初始化情况下开启或关闭 BluFi (AT+BLEINIT=0)。
示例
AT+BLUFI=1
AT+BLUFINAME:查询/设置 BluFi 设备名称
参数
<device_name>:BluFi 设备名称。
说明
如需设置 BluFi 设备名称,请在运行 AT+BLUFI=1 命令前设置,否则将使用默认名称
BLUFI_DEVICE
。BluFi 设备名称最大长度为 29 字节。
示例
AT+BLUFINAME="BLUFI_DEV"
AT+BLUFINAME?
AT+BLUFISEND: 发送 BluFi 用户自定义数据
设置命令
功能:
发送 BluFi 用户自定义数据给手机端
命令:
AT+BLUFISEND=<length>
Response:
>
符号 >
表示 AT 准备好接收串口数据,此时您可以输入数据,当数据长度达到参数 <length>
的值时,开始传输数据。
若数据传输成功,则提示:
OK
参数
<length>:数据长度,单位:字节。
说明
自定义数据的长度不能超过 600 字节。
如果 ESP 收到手机发来的用户自定义数据,那么会以
+BLUFIDATA:<len>,<data>
格式打印。
示例
AT+BLUFISEND=4
// 提示 ">" 符号后,输入 4 字节的数据即可,如 "1234",然后数据会被自动发送给手机