文章目录
-
- 前言
- 一、设置可发现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设备名称
对照上文的蓝牙广播数据类型定义的描述,可知
02 01 06 字段设置广播模式
0A 09 41695468696E6B6572 字段表示:
0A: 此字段数据长度为10
09 :完整的设备名称
41695468696E6B6572:设备名称AiThinker的十六进制表示
我们在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
以上参数皆可通过指令
AT+BLEGATTSCHAR?参数说明:
我们拎出一个来解读一下
+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接收数据,配置透传模式为:
BLE透传助手app上对应为
5.开启透传
配置好透传参数之后我们还不能马上进入透传,我们需要先将client端(本例为手机)开启侦听。我们在BLE调试助手上点击第1号service的第6号characteristic右边的箭头
此时Server端(模组)返回
+WRITE:0,1,6,1,2,
表示此时client端(手机)的第1号service的第6号characteristic已经开启侦听。client端开启侦听后即开设置进入透传
响应:
OK
> //等待输入数据
此时可以透传收发数据了
模组发送数据到手机:
在串口调试助手输入"Hello AiThinker"
我们可以在BLE调试助手的第1号service的第6号characteristic看到接收到的数据如下
手机发送数据到模组:
在BLE调试助手的第1号service的第5号characteristic输入数据,点击发送即可
退出透传发送
+++ (不带\r\n)
即可