# 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数据。

备注:

  1. MASK:功能使能掩码,按照bit序规定功能
  2. 产品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.配网示例

  1. app 将 ssid 和 password 组成 apinfo 的 json 包
{"type": "apinfo","data": {"ssid": "test","password": "12345678"}}
  1. 将 apinfo 的 json 包,转换成 hex 格式的数据,并增加包头,包头请根据 MTU的大小判断。

如果不分包,hex 数据:007B2274797065223A20226170696E666F222C2264617461223A207B2273736964223A202274657374222C2270617373776F7264223A20223132333435363738227D7D

  1. Wi-Fi模组连上路由器后,会回复成功的状态。hex数据:

007B2274797065223A22776966695F7265706C79222C2264617461223A7B226572726F725F636F6465223A302C226465736372696265223A22636F6E6E6563746564227D7D

  1. 将上述hex转换成json格式:
{"type":"wifi_reply","data":{"error_code":0,"describe":"connected"}}

#5.nrf connect测试

-------------------------------------------------------------------------------

End.

更新时间: 2024/2/26 15:13:19