文章目錄
- 前言
- 一、設定可發現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模式
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表示?持 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)
即可
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/207790.html
標籤:其他
上一篇:Style(2):命名空間
