ESP32 常用蓝牙AT指令使用例程

安信可 ESP32 专题 专栏收录该内容
21 篇文章 15 订阅

前言

    最近有不少朋友买了我们安信可的esp32系列模组反馈BLE无法显示设置的设备名称、无法与手机透传的问题,是不是模组或者固件有问题?
在这里插入图片描述
    今天手把手教大家怎么设置可发现设备名及怎么与手机进行数据透传。文中的原理部分是我整理零碎资料和在黑暗中摸索所得,也许不完全正确,如果有误欢迎指出。

一、设置可发现BLE设备名

上车前请准备:
(1) 安信可esp32-s模组/开发板USB转TTL、BLE调试助手(应用市场下载)、串口调试助手

1. 蓝牙广播包浅析

我们先来看一下乐鑫的AT手册关于BLE设备名的资料
在这里插入图片描述
我们从描述中可以知道,如果我们需要在手机扫描时即可获取BLE设备名称,需要通过AT+BLEADVDATA设置广播包。那么广播包需要如何设置呢,我们先来看一下广播包格式

蓝牙广播数据包格式如下:

LengthAD TypeAD Date
广播数据长度广播数据类型广播数据内容

每个字段的含义如下:
Length表示有效数据的长度,最大为0x1E(31);
AD Type表示广播数据的类型,此字段非常重要,决定广播包的含义
AD Date 广播数据内容,最多29字节(Length和AD Type个占一个字节)

蓝牙广播数据类型定义:

AD Type含义备注
0x01广播模式
0x02非完整的 16 bit UUID 列表
0x03完整的 16 bit UUID 列表
0x04非完整的 32 bit UUID 列表
0x05完整的 32 bit UUID 列表
0x06非完整的 128 bit UUID 列表
0x07完整的 128 bit UUID 列表
0x08缩写的设备名称
0x09完整的设备名称
0x0A广播包的信号强度
0x0B
0x0C
0x0D
0x0E
0x0F
0x10
0x11带外安全管理
0x12(Slave)连接间隔范围
0x13
0x1416 bit UUID 列表
0x15128 bit UUID 列表
0x1616 bit UUID Service前 2 字节是 UUID,后面是 Service 的数据
0x17公开目标地址
0x18随机目标地址
0x19Appearance(外观)
0x1A
0x1B
0x1C
0x1D
0x1E
0x1F
0x2032 bit UUID Service前 4 字节是 UUID,后面是 Service 的数据
0x21128 bit UUID Service前 16 字节是 UUID,后面是 Service 的数据
~~~
0x29PB-ADV
0x2AMesh Message
0x2BMesh Beacon
~~~
0xFF厂商自定义数据

2. 开始广播 && 发现BLE设备名称

AT+BLEINIT=2 //BLE初始化,将模块设为server端。
AT+BLENAME="AiThinker" //设置BLENEME名并用转换器获得它的16进制数。
在这里插入图片描述
AT+BLEADVDATA="0201060A0941695468696E6B6572" //广播设备名称
对照上文的蓝牙广播数据类型定义的描述,可知
02 01 06 字段设置广播模式
0A 09 41695468696E6B6572 字段表示:
0A: 此字段数据长度为10
09 :完整的设备名称
41695468696E6B6572:设备名称AiThinker的十六进制表示
AT+BLEADVSTART //开始广播
在这里插入图片描述
我们在BLE调试助手扫描发现了名为AiThinker 的设备,设置成功

二、与手机进行ble数据透传

1. 初始化蓝牙server模式

 AT+BLEINIT=2     //初始化BLE为server
 AT+BLEGATTSSRVCRE    //GATTS 创建服务
 AT+BLEGATTSSRVSTART   //GATTS 开启服务
 AT+BLENAME="AiThinker"   //设置BLE 设备名称      
 AT+BLEADVDATA="0201060A0941695468696E6B6572"   //广播设备名称  
 AT+BLEADVSTART        //开启BLE广播

2. 连接蓝牙

选择名为AiThinker的设备连接
在这里插入图片描述

3. 设置BLE透传参数

设置指令:AT+BLESPPCFG=<cfg_enable>,<tx_srv_index>,<tx_char_index>,<rx_srv_index>,<rx_srv_index>
功能:配置 BLE 透传模式。分别选择两个 characteristic,⼀个⽤于发送数据,⼀个⽤于接收数据,作为数据通信的收发通道。
这条指令一共要设置5个参数:
<cfg_enable>:
• 0:清除 BLE SPP 设置参数;之后的四个参数⽆需填写。
• 1:设置 BLE SPP 参数;之后的四个参数必须填写。
我们一般设置为1
<tx_srv_index>:发送数据的 characteristic 所在的 service 的序号
<tx_char_index>:发送数据的 characteristic 的序号。 作为 BLE server,要求此 characteristic 服务特征的属性⽀持 notify 或者 indicate
<rx_srv_index>:接收数据的 characteristic 所在的 service 的序号。
<rx_char_index>:接收数据的 characteristic 的序号;
以上参数皆可通过指令AT+BLEGATTSCHAR?查询所得
在这里插入图片描述
AT+BLEGATTSCHAR?参数说明:
<srv_index> :服务序号,从 1 起始递增
<char_index> :服务特征的序号,从 1 起始递增
<char_uuid> :服务特征的 UUID
<char_prop> :服务特征的属性
<desc_index> :特征描述符序号
<desc_uuid> :特征描述符的 UUID

我们拎出一个来解读一下
+BLEGATTSCHAR:“char”,1,6,0xC305,0x10
表示:
characteristic 所在的 service 的序号为1;
characteristic 的序号为6;
服务特征的 UUID为0xC305;
服务特征的属性为0x10 。
但是这个0x10是什么意思呢,我们找到esp-idf源码的定义可以看到相关定义:0x10表示notify;0x20表示indicate;0x08表示write等。下图为完整定义:
在这里插入图片描述

ESP32透传写通道应选服务特征的属性为notify或者indicate的characteristic,读通道应选服务特征的属性为write的characteristic (service 端的读写通道是与client端的读写通道相反的)

从查询得知,我们可以选择第1号service的第6号characteristic发送数据,可以选择第1号service的第5号characteristic接收数据,配置透传模式为:
AT+BLESPPCFG=1,1,6,1,5

BLE透传助手app上对应为
在这里插入图片描述

5.开启透传

配置好透传参数之后我们还不能马上进入透传,我们需要先将client端(本例为手机)开启侦听。我们在BLE调试助手上点击第1号service的第6号characteristic右边的箭头
在这里插入图片描述
此时Server端(模组)返回
+WRITE:0,1,6,1,2,
表示此时client端(手机)的第1号service的第6号characteristic已经开启侦听。client端开启侦听后即开设置进入透传
AT+BLESPP //开启透传模式:

响应:
OK

> //等待输入数据

此时可以透传收发数据了

模组发送数据到手机:
在串口调试助手输入"Hello AiThinker"
我们可以在BLE调试助手的第1号service的第6号characteristic看到接收到的数据如下
在这里插入图片描述
手机发送数据到模组:
在BLE调试助手的第1号service的第5号characteristic输入数据,点击发送即可

在这里插入图片描述

在这里插入图片描述
退出透传发送
+++ (不带\r\n)
即可

三、使用静态秘钥进行蓝牙加密配对

AT+RESTORE                          // 恢复出厂设置
AT+BLEINIT=2                        // 将模组初始化为 server
AT+BLEGATTSSRVCRE                   // GATTS 创建服务
AT+BLEGATTSSRVSTART                 // GATTS 开启服务
AT+BLENAME="AiThinker"              //设置BLE 设备名称       
AT+BLEADVDATA="0201060A0941695468696E6B6572"        //广播设备名称 
AT+BLESECPARAM=1,0,16,3,3           // 设置 BLE 加密参数
AT+BLESETKEY=123456                 // 设置 BLE 配对静态秘钥 为123456。如果不设置此条指令,配对密钥为动态密钥    
AT+BLEADVSTART                      // 开始 BLE 广播,使用 APP 与ESP32 建立连接
AT+BLEENC=0,3                       // 连接后,发送此条命令即可产生加密配对请求,输入秘钥

在这里插入图片描述

在这里插入图片描述
使用密钥配对成功后,同一台手机与模组再次使用蓝牙连接不需要再输入密钥。恢复出厂设置AT+RESTORE后连接则需要再次输入密钥。

  • 有疑问请留言或发邮箱:support@aithinker.com
相关推荐
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值