# Combo模组蓝牙配网协议
- 本蓝牙配网协议无需MCU参与。
#版本记录
日期 | 版本 | 说明 |
2022.11.16 | V0.1 | 初版 |
#1.蓝牙广播包规范:
蓝牙广播包格式遵循蓝牙 4.0 规范,由若干 AD Structure 组成(参见 Bluetooth 4.2 Core Specification, Volume 3, Part C, Chapter 11),每一个 AD Structure 结构由 Length、 AD Type、 ADData 组成。
如下图所示:
#1.1 蓝牙广播包内容
广播包标准数据段:
TYPE | LEN | VALUE |
0x01(flags) | 0x02 | 0x06 |
0x03(service uuid) | 0x03 | 0x0922 |
0x09(Local name) | 0x03 | "MX" |
0xFF(manufacture data) | 0x13 | 自定义数据段 |
自定义数据段:
自定义数据段 | |
字节序 | 内容 |
byte[0]--byte[1] | Company ID |
byte[2] | MASK |
byte[3]--byte[8] | MAC地址 |
byte[9]--byte[17] | 9个字节,用户通过指令可配: AT+STARTSMART=6, hexstring 其中hexstring最长18个字节,就是这个广播内容的hex string数据。 |
备注:
- MASK:功能使能掩码,按照bit序规定功能
- 产品ID,Product ID,Product ID为6位字符串,固定为ascii "000000"
Bit序 | 功能说明 |
1~0 | (预留)蓝牙版本,00:BLE4.0; 01:BLE4.2;10:BLE5.0;11:BLE5.0以上 |
2 | 配网状态标识,0:非配网状态;1:配网状态 |
3 | 0:不进行安全认证; 1:进行安全认证 |
4 | 0:不进行数据传输加密; 1:进行数据传输加密 |
7~5 | 保留将来使用,全部填0 |
#2.蓝牙连接服务
服务声明为 Primary Service, Service UUID 为 0x0922
#2.1 Characteristics说明
服务包含以下 2 个 Characteristics
Characteristics Name | Write Characteristics | Notify Characteristics |
Characteristics UUID | 0xAAB1 | 0xAAB2 |
Requirement | Mandatory | Mandatory |
Properties | Write | Notify |
Permission | Write | None |
备注 | APP -> WiFi | WiFi -> APP |
#2.2 协议帧
协议帧详情 | 原始数据 | 加密数据 |
JSON | sdfhisdhfs=dhldjkfhslhf |
#2.2.1 SAR 分包方式
若一条数据包长度大于 MTU,则需要分片发送出去,对应的,接收端需要重组这些分片消息。
本协议基于 Mesh GATT Bear 层的分片和重组机制,数据包格式如下:
SAR | Data | |||
Octet 0 | Octet 1 | Octet 2 | ...... | Octet n |
SAR说明:
数值 | 描述 |
0x00 | 完整数据包 |
0x01 | 分片数据包第1包 |
0x10 | 分片数据包第2~n包 |
0x11 | 分片数据包最后一包 |
#2.2.2 原始数据
原始数据采用JSON格式,JSON数据包中必须包含键值:Type,模组在完整接收蓝牙包后先判断Type,根据Type进行数据处理,Type值如下:
键值 | 值 | 说明 |
Type | apinfo | WiFi配置信息数据包 |
wifi_reply | WiFi连接状态回传 |
#2.2.3 apinfo
APP->WiFi
说明: APP将路由的信息等发送给WiFi模组
{
"type": "apinfo",
"data": {
"ssid": "xxx",
"password": "xxx"
}
}
#2.2.4 wifi_reply
WiFi->APP
说明:WiFi模组收到apinfo,连上路由器后,回复 connected
给APP。 若连接超时30S,WiFi模组将返回APP失败原因
{
"type": "wifi_reply",
"data": {
"error_code": 0,
"describe": "connected"
}
}
WiFi连接状态回传内容说明:
JSONKey | error_code | describe |
Object | 0 | connected |
1 | ap not found | |
2 | rssi too low | |
3 | fail connected |
#3.配网流程图
#4.配网示例
- app 将 ssid 和 password 组成 apinfo 的 json 包
{"type": "apinfo","data": {"ssid": "test","password": "12345678"}}
- 将 apinfo 的 json 包,转换成 hex 格式的数据,并增加包头,包头请根据 MTU的大小判断。
如果不分包,hex 数据:007B2274797065223A20226170696E666F222C2264617461223A207B2273736964223A202274657374222C2270617373776F7264223A20223132333435363738227D7D
- Wi-Fi模组连上路由器后,会回复成功的状态。hex数据:
007B2274797065223A22776966695F7265706C79222C2264617461223A7B226572726F725F636F6465223A302C226465736372696265223A22636F6E6E6563746564227D7D
- 将上述hex转换成json格式:
{"type":"wifi_reply","data":{"error_code":0,"describe":"connected"}}
#5.nrf connect测试
-------------------------------------------------------------------------------
End.
← Softap 配网协议 固件下载 →