ESP32 AT指令设置可发现BLE设备名 && 与手机进行ble数据透传


文章目录

    • 前言
    • 一、设置可发现BLE设备名
        • 1. 蓝牙广播包浅析
        • 2. 开始广播 && 发现BLE设备名称
    • 二、与手机进行ble数据透传
        • 1. 初始化蓝牙server模式
        • 2. 连接蓝牙
        • 3. 设置BLE透传参数
        • 5.开启透传

前言

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

一、设置可发现BLE设备名

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

1. 蓝牙广播包浅析

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

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

Length AD Type AD 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
0x14 16 bit UUID 列表
0x15 128 bit UUID 列表
0x16 16 bit UUID Service 前 2 字节是 UUID,后面是 Service 的数据
0x17 公开目标地址
0x18 随机目标地址
0x19 Appearance(外观)
0x1A
0x1B
0x1C
0x1D
0x1E
0x1F
0x20 32 bit UUID Service 前 4 字节是 UUID,后面是 Service 的数据
0x21 128 bit UUID Service 前 16 字节是 UUID,后面是 Service 的数据
~~~
0x29 PB-ADV
0x2A Mesh Message
0x2B Mesh 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模式

1
2
3
4
5
6
 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=,,,,
功能:配置 BLE 透传模式。分别选择两个 characteristic,?个?于发送数据,?个?于接收数据,作为数据通信的收发通道。
这条指令一共要设置5个参数:

? 0:清除 BLE SPP 设置参数;之后的四个参数?需填写。
? 1:设置 BLE SPP 参数;之后的四个参数必须填写。
我们一般设置为1
:发送数据的 characteristic 所在的 service 的序号
:发送数据的 characteristic 的序号。 作为 BLE server,要求此 characteristic 服务特征的属性?持 notify 或者 indicate
:接收数据的 characteristic 所在的 service 的序号。
:接收数据的 characteristic 的序号;
以上参数皆可通过指令AT+BLEGATTSCHAR?查询所得
在这里插入图片描述
AT+BLEGATTSCHAR?参数说明:
:服务序号,从 1 起始递增
:服务特征的序号,从 1 起始递增
:服务特征的 UUID
:服务特征的属性
:特征描述符序号
:特征描述符的 UUID

我们拎出一个来解读一下
+BLEGATTSCHAR:“char”,1,6,0xC305,0x10
表示:
characteristic 所在的 service 的序号为1;
characteristic 的序号为6;
服务特征的 UUID为0xC305;
服务特征的属性为0x10 (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)
即可