Card image
帮助和文档

牙刷(蓝牙+WIFI)


 PDF下载地址:wifi+ble牙刷 MCU端应用手册

 

AiLink wifi+ble牙刷MCU 端应用手册

 

 


 

版本V1.0.4

更新日期:20200818

深圳市易连物联网有限公司版权所有

 

修改记录

 

文档版本

作者

发布日期

修改说明

V0.0.1

蔡永聪

2020/03/13

初稿

V1.0.1

蔡永聪

2020/5/11

修改指令描述和更新排版

V1.0.3

蔡永聪

2020/5/12

把牙刷中立即运行当前配置指令合并到设置当前工作档位

V1.0.4

lxl

2020/8/18

为精简协议,在应用手册中屏蔽部分MCU不需要用到的指令

 

 

 


概述

本文档适用于WM06模块。

MCU使用UART控制模块,使数据在BLE或者WIFI中传输,快速实现电动牙刷的智能化。

请扫描此二维码下载AiLink APP。

 

下文中表明的MCU为与模块连接交互的芯片。

1 
说明

1.1 目的

为了便于MCU端开发人员快速实现电动牙刷的智能化。

1.2 适用人员

本文档适用于应用WM06作为电动牙刷传输数据MCU端开发人员。

1.3 关于模块

  • 模块上电需要时间进行配置,当配置完成,进入就绪时,模块会主动给MCU返回模块状态信息,详情请查看“块上报状态”。

  • 当模块BLE连接时候,数据通道是串口和BLE;如果BLE没有连接,而WIFI连接上时,数据通道是串口和WIFI

  • 模块应设置CIDVIDPIDWiFi+Ble电动牙刷CID0x0012

     

2 
工作模式

模块支持正常工作模式、断电模式和失能模式,用户可以根据自身需求合理选择模式。用户可以在设计PCB的时候,预留两种方式的电路。详情请查看硬件规格书规格书。

2.1 断电模式

  • 在此模式下,模块完全断电,需要供电才能正常工作,这种模式有利于省电。

  • 在此模式下,MCU可以根据模块的连接状态选择合适的时间断电关机,例如,在非蓝牙连接状态时,MCU工作完30s后断电关机,在蓝牙连接状态时,工作完120s后断电关机。获取模块的连接状态,也可以通过串口读取模块状态。这种做法有利于用户能够顺利传输数据到APP上,而不会出现反复关机断连问题。

    工作流程:

  1. 模块上电。

  2. 模块上电就绪后,会给MCU返回模块状态

  3. MCU设置CIDVIDPID

  4. MCU设置模块其他内容。

  5. MCU发送数据。

  6. MCU、模块断电关机。

     

     

     

3 蓝牙接口(默认)

3.1 蓝牙名称:AiLink_xxxx

注:xxxxMac地址后4个字符


      1.  

3.5 广播数据

模块广播数据内容包含:

1Company ID 。固定:496eInInet缩写,此处预留后续申请SIG company

2CID:产品类型(2bytes)(电动牙刷为0x0012

3VID:厂商ID 2byte) (由我司分配)

4PID:产品ID 2byte) (由厂商分配)

5Mac地址(MAC是固定的,小端序)

例如广播出来的自定义数据为:

6e49001200010001126134231102

6e49:为In0012CID,表示产品类型,0001VID,表示厂商ID0001PID,表示产品ID

126134231102Mac地址,因为是小端序,所以Mac地址是:02 11 23 34 61 12

 

蓝牙工具显示如下图:

 

 

 

4 AiLink协议-通用协议

通用协议描述了关于WIFIBLE的所有指令,MCU可以使用这些指令去控制模块,实现需要的功能和配置。

 

指令的格式如下:

 

Byte

Value

Description

0

0xA6

包头

1

 

Payload长度(最大16byte

2~n

 

Payload

n+1

SUM(1~n)

(1~n)校验和

n+2

0x6A

包尾(注:n+2不能超过20

 

包头和包尾是固定的,分别为0xA6,和0x6A

检验和是指byte1 + byte2 + … +byte n 的和,取低位1 byte

整个指令,数据大小的不能超过20Byte

 

4.1 
通用设置指令

这类指令是设置模块的通用功能的,无论WIFI还是BLE都需要使用到这类指令。

4.1.1 读取模块版本号  Type = 0x0e

模块接收:

Byte

Value

Description

0

0xA6

包头

1

0x01

Payload长度

2

0x0E

Type:读取模块软硬件版本号

Payload

3

0x0F

校验和

4

0x6A

包尾

模块响应:

Byte

Value

Description

0

0xA6

包头

1

0x0A

Payload长度

2

0x0E

Type:回复模块软硬件版本号

Payload

3

 

产品型号。byte3 byte4 ASCII字符,byte5为数字。

4

 

5

 

6

 

硬件版本号 H

7

 

软件版本号 S

8

 

定制版本号 P

9

 

年  实际年份=+2000

例如:2019年  

=2019-2000=19

10

 

1~12

11

 

1~31

12

Sum1~11 

校验和

13

0x6A

包尾

 

  • 举例:如软硬件版本号为 WM06H1S1.0P0_20190507

    解析:WM05为产品型号,对应实际实际数据为0x57  0x4D  0x06

    H1为硬件版本号 1,对应实际数据为 0x01

    S1.0 为软件版本号 1.0 ,对应实际数据为:0x0A(带1位小数点)

    P0 为定制版本号,对应实际数据为 0

    年:2019-2000=19,对应实际数据 0x13

    返回:A6  0A  0E  57  4D  06  01  0A  00  13  05  07  EC  6A

4.1.2 
设置模块CIDVIDPID  Type = 0x1d

模块接收:

Byte

Value

Description

0

0xA6

包头

1

 

Payload长度

2

0x1D

Type:设置ID

Payload

3

 

ID标志位

[Bit0]  0:不设置CIDCID值清0);1:设置CID

[Bit1]  0:不设置VIDVID值清0);1:设置 VID

[Bit2]  0:不设置PIDPID值清0);1:设置PID

4

 

CID:产品类型ID的高字节

5

 

CID:产品类型ID的低字节

6

 

VID:厂商ID的高字节

7

 

VID:厂商ID的低字节

8

 

PID:产品ID的高字节

9

 

PID:产品ID的低字节

10

Sum1~9 

校验和

11

0x6A

包尾

 

模块响应:

Byte

Value

Description

0

0xA6

包头

1

Len

Payload长度

2

0x1D

Type:回复设置ID结果

Payload

3

 

结果值:

0x00:成功

0x01:失败

0x02:不支持

4

Sum1~3 

校验和

5

0x6A

包尾

 

  • 举例:设置模块CIDBLEWIF体脂秤

    发送:A6  08  1D  07  00  11  00  00  00  00  3D  6A

     

4.1.3 
读取模块CIDVIDPID  Type = 0x1e

模块接收:

Byte

Value

Description

0

0xA6

包头

1

0x01

Payload长度

2

0x1E

Type:获取ID设置值

Payload

3

0x1F

校验和

4

0x6A

包尾

 

响应:

Byte

Value

Description

0

0xA6

包头

1

Len

Payload长度

2

0x1E

Type:返回ID

Payload

3

 

ID标志位

[Bit0]  0:不设置CIDCID值清0);1:设置CID

[Bit1]  0:不设置VIDVID值清0);1:设置 VID

[Bit2]  0:不设置PIDPID值清0);1:设置PID

4

 

CID:产品类型ID的高字节

5

 

CID:产品类型ID的低字节

6

 

VID:厂商ID的高字节

7

 

VID:厂商ID的低字节

8

 

PID:产品ID的高字节

9

 

PID:产品ID的低字节

10

Sum1~9 

校验和

11

0x6A

包尾

4.1.4 
复位模块  Type = 0x21

模块接收:

Byte

Value

Description

0

0xA6

包头

1

0x02

Payload长度

2

0x21

Type:设置模块重启

Payload

3

0x01

Value0x01

4

Sum

校验和

5

0x6A

包尾

 

模块响应:

Byte

Value

Description

0

0xA6

包头

1

Len

Payload长度

2

0x21

Type:回复设置模块重启结果

Payload

3

 

结果值:

0x00:成功

0x01:失败

0x02:不支持

4

Sum1~3 

校验和

5

0x6A

包尾

 

4.1.5 
恢复出厂设置  Type = 0x22

模块接收:

Byte

Value

Description

0

0xA6

包头

1

0x02

Payload长度

2

0x22

Type:设置恢复出厂设置

Payload

3

0x01

Value0x01

4

0x25

校验和

5

0x6A

包尾

 

模块响应:

Byte

Value

Description

0

0xA6

包头

1

0x02

Payload长度

2

0x22

Type:回复设置模块重启结果

Payload

3

 

结果值:

0x00:成功(成功后,100ms后恢复出厂设置)

0x01:失败

0x02:不支持

4

Sum1~3 

校验和

5

0x6A

包尾

4.1.6 
获取模块状态  Type = 0x26

模块接收:

Byte

Value

Description

0

0xA6

包头

1

0x01

Payload长度

2

0x26

Type:获取状态

Payload

3

0x27

校验和

4

0x6A

包尾

 

模块响应:

Byte

Value

Description

0

0xA6

包头

1

0x03

Payload长度

2

0x26

Type:返回模块状态

Payload

3

 

模块状态

bit0-bit3表示BLE状态:

0:无连接

1:已连接

2:配对完成

Bit4-bit7表示wifi状态:

0:没连接AP

1:连接AP失败,连接时密码错误、AP信号不好、主动断开都会是这个状态;

2:连接的AP信号不好

3:成功连接上AP

4:正在连接AP

4

 

工作状态

0:唤醒

1:进入休眠

2:模块准备就绪

5

Sum1~4 

校验和

6

0x6A

包尾

 

4.1.7 模块上报状态

BLEWIFI、功耗模式改变时,模块都会通过获取模块状态的响应包格式主动进行上报状态变化。

4.2 
信息保存指令

接收到这类指令,模块需要将其参数值保存起来,供以后查询。这类值对模块没有意义,但是对使用模块进行透传的双方有意义,模块在这起到公共内存的作用。

4.2.1 设置电池电量 Type = 0x27

接收到这类指令,模块需要将其参数值保存起来,供以后查询。这类值对模块没有意义,但是对使用模块进行透传的双方有意义,模块在这起到公共内存的作用。

 

模块接收:

Byte

Value

Description

0

0xA6

包头

1

0x03

Payload长度

2

0x27

Type:设置MCU电池状态

Payload

3

 

电池充电状态:

0x00:没有充电(默认)

0x01:充电中

0x02:充满电

0x03:充电异常

4

 

电池电量百分比 (0100

5

Sum1~4 

校验和

6

0x6A

包尾

 

模块响应:

Byte

Value

Description

0

0xA6

包头

1

0x02

Payload长度

2

0x27

Type:回复MCU设置电池结果

Payload

3

 

结果值:

0x00:成功(成功后会把电池电量上传到APP

0x01:失败

0x02:不支持

4

Sum1~3 

校验和

5

0x6A

包尾

 

  • 举例:设置电池正在充电,电量为1

    发送:A6  03  27  01  01  2C  6A

     

4.2.2 
获取电池电量 Type = 0x28

 

模块接收:

 

Byte

Value

Description

0

0xA6

包头

1

0x01

Payload长度

2

0x28

Type:获取MCU电池状态

Payload

3

0x29

校验和

4

0x6A

包尾

 

模块响应:

 

Byte

Value

Description

0

0xA6

包头

1

0x03

Payload长度

2

0x28

Type:返回MCU电池状态

Payload

3

 

电池充电状态:

0x00:没有充电(默认)

0x01:充电中

0x02:充满电

0x03:充电异常

4

 

电池电量百分比 (0100

MCU没有数据上传时,默认为0xFF

5

Sum1~4 

校验和

6

0x6A

包尾

 

4.2.3 
设置MCU版本号  Type = 0x0f

模块接收:

Byte

Value

Description

0

0xA6

包头

1

0x07

Payload长度

2

0x0F

TypeMCU设置MCU软硬件版本号

Payload

3

 

MCU类型:由厂家自己定义,可以不定义

4

 

硬件版本号

5

 

软件版本号

6

 

年  实际年份=+2000

例如:2019年  

=2019-2000=19

7

 

1~12

8

 

1~31

9

Sum1~8 

校验和

10

0x6A

包尾

 

模块响应:

Byte

Value

Description

0

0xA6

包头

1

0x02

Payload长度

2

0x0F

Type:回复设置MCU软硬件版本号结果

Payload

3

 

结果值:

0x00:成功

0x01:失败

0x02:不支持

4

Sum1~3 

校验和

5

0x6A

包尾 

 

  • 举例:设置MCU版本号,硬件版本0x01,软件版本0x022003年,4月,6日。

    发送:A6  07  0F  01  02  03  04  05  06  2B  6A

     


获取MCU版本号  Type = 0x10

模块接收:

Byte

Value

Description

0

0xA6

包头

1

0x01

Payload长度

2

0x10

Type:获取MCU软硬件版本号

Payload

3

0x11

校验和

4

0x6A

包尾

 

模块响应:

Byte

Value

Description

0

0xA6

包头

1

0x07

Payload长度

2

0x10

Type:返回MCU软硬件版本号

Payload

3

 

MCU类型:由厂家自己定义

4

 

硬件版本号

5

 

软件版本号

6

 

年  实际年份=+2000

例如:2019年  

=2019-2000=19

7

 

1~12

8

 

1~31

9

Sum1~8 

校验和

10

0x6A

包尾

 

 

4.3 
BLE设置指令

通过这类指令对BLE进行设置和查询。

4.3.1 设置蓝牙名称  Type = 0x01

模块接收:

Byte

Value

Description

0

0xA6

包头

1

Len

Payload长度(最大16byte

2

0x01

Type:设置蓝牙名称

Payload

3 ~ n

Name

名称(需要对应ASCII表)

n+1

Num

MAC字符个数:名称后面跟随的MAC字符的个数

0x00:代表没有,则是固定蓝牙名称。

0x01:代表后面带有mac地址的1个字符,例如:

Swan_x

0x02:代表后面带有mac地址的2个字符,例如:

Swan_xx

默认 Num=4Num最大为12

注:Name长度+_+Num 最大为15

n + 2

Sum1~n 

校验和

N+3

0x6A

包尾

 

模块响应:

Byte

Value

Description

0

0xA6

包头

1

0x02

Payload长度

2

0x01

Type:回复设置蓝牙名称结果

Payload

3

 

结果值:

0x00:成功(立即生效)

0x01:失败

0x02:不支持

4

Sum1~3 

校验和

5

0x6A

包尾

 

设置蓝牙名称可以设置为固定字符作为蓝牙名称,例如设置为swan,所有的模块都会显示为swan。同时也可以设置为固定蓝牙名称+_+ Mac 地址的方式,这样子有利于每个模块的名称都有差异。

 

  • 举例 蓝牙的MAC地址为 12 : 34 : 56 : 78 : 9A : BC

4.3.2 
获取蓝牙名称  Type = 0x02 

模块接收:

Byte

Value

Description

0

0xA6

包头

1

0x01

Payload长度

2

0x02

Type:获取蓝牙名称

Payload

3

0x03

校验和

4

0x6A

包尾

 

模块响应:

Byte

Value

Description

0

0xA6

包头

1

Len

Payload长度(最大16 byte

2

0x02

Type:回复蓝牙名称

Payload

3 ~ n

Name

蓝牙名称(最长15 byte

n + 1

Sum1~n 

校验和

n +2

0x6A

包尾

 

  • 举例:蓝牙名称为swan_BC

    发送查询指令:A6  01  02  03  6A

    BM返回名称:A6  08  02  73  77  61  6E  5F  42  43  A7  6A

4.3.3 
读取BLE地址  Type = 0x0d

模块接收:

Byte

Value

Description

0

0xA6

包头

1

0x01

Payload长度

2

0x0D

Type:读取MAC地址值

Payload

3

0x0E

校验和

4

0x6A

包尾

模块响应:

Byte

Value

Description

0

0xA6

包头

1

0x07

Payload长度

2

0x0D

Type:回复MAC地址值

Payload

3 ~ 8

 

Mac地址值(6byte、小端序)

9

Sum1~8 

校验和

10

0x6A

包尾

 

  • 举例:MAC 地址为11 22  33  44  55  66

    返回:A6  07  0D  66  55  44  33  22  11  79  6A

4.3.4 
BLE断开连接  Type = 0x25

 

模块接收:

Byte

Value

Description

0

0xA6

包头

1

 

Payload长度

2

0x25

Type:设置蓝牙连接状态

Payload

3

 

主动断开连接标志位

0x01:立刻断开连接

0x00:不断开连接

4

Sum1~3 

校验和

5

0x6A

包尾

 

模块响应:

Byte

Value

Description

0

0xA6

包头

1

0x02

Payload长度

2

0x25

Type:回复设置蓝牙连接状态结果

Payload

3

 

结果值:

0x00:成功

0x01:失败

0x02:不支持

4

Sum1~3 

校验和

5

0x6A

包尾

 

4.3.5 
设置BLE授权 Type = 0x7D

 

如果开启此功能,陌生设备第一次BLE连接模块,需要请求授权,否则10S内,连接将会断开。

模块接收:

Byte

Value

Description

0

0xA6

包头

1

0x02

Payload长度(最大16byte

2

0x7d

Type:设置授权使能、取消绑定

Payload

3

 

Value

0:取消授权

1:使能授权

4

Sum

(1~n)校验和

5

0x6A

包尾

模块响应:

Byte

Value

Description

0

0xA6

包头

1

0x02

Payload长度

2

0x7d

Type:回复设置授权

Payload

3

 

结果值:

0x00:成功

0x01:失败

0x02:不支持

4

Sum1~3 

校验和

5

0x6A

包尾

 

 

4.3.6 
获取BLE授权 Type = 0x7E

 

模块接收:

 

Byte

Value

Description

0

0xA6

包头

1

0x01

Payload长度

2

0x7E

Type:获取BLE授权

Payload

3

0x7F

校验和

4

0x6A

包尾

 

模块响应:

Byte

Value

Description

0

0xA6

包头

1

0x02

Payload长度

2

0x12

Type:返回BLE授权

Payload

3

 

Value

0:取消授权

1:使能授权

4

Sum1~3 

校验和

5

0x6A

包尾

4.4 
WIFI设置指令

通过这类指令对WIFI进行设置和查询。

4.4.1 WIFI发起连接、断开连接  Type = 0x88

模块接收:

Byte

Value

Description

0

0xA6

包头

1

0x02

Payload长度

2

0x88

Type:设置wifi状态

Payload

3

 

0x00:断开连接

0x01:发起连接

4

Sum1~3 

校验和

5

0x6A

包尾

 

模块响应:

Byte

Value

Description

0

0xA6

包头

1

0x02

Payload长度

2

0x88

Type:回复设置wifi状态结果

Payload

3

 

结果值:

0x00:成功

0x01:失败

0x02:不支持

4

Sum1~3 

校验和

5

0x6A

包尾

4.4.2 
设置自动OTA   Type = 0x98

模块每次联网,会自动查看是否有最新固件,有则进行升级,默认是关闭。

 

模块接收:

Byte

Value

Description

0

0xA6

包头

1

0x02

Payload长度

2

0x98

Type:设置自动OTA

Payload

3

 

Value

0x00:关闭 (默认)

0x01:开启

4

Sum1~3 

校验和

5

0x6A

包尾

 

模块响应:

Byte

Value

Description

0

0xA6

包头

1

0x02

Payload长度

2

0x98

Type:回复设置自动OTA结果

Payload

3

 

结果值:

0x00:成功

0x01:失败

0x02:不支持

4

Sum1~3 

校验和

5

0x6A

包尾

4.4.3 
获取自动OTA   Type = 0x99

模块接收:

Byte

Value

Description

0

0xA6

包头

1

0x01

Payload长度

2

0x99

Type:获取自动OTA设置值

Payload

3

0x9A

校验和

4

0x6A

包尾

 

模块响应:

Byte

Value

Description

0

0xA6

包头

1

0x02

Payload长度

2

0x12

Type:返回自动OTA设置值

Payload

3

 

Value

0x00:关闭 (默认)

0x01:开启

4

Sum1~3 

校验和

5

0x6A

包尾

 

模块上报/响应:

Byte

Value

Description

0

0xA6

包头

1

0x02

Payload长度

2

0x91

Type:响应OTA结果

Payload

3

 

结果值:

0x00wifiOTA成功

0x01wifiOTA失败

0x02:不支持wifiOTA

0x03:模块主动开始wifiOTAMCU收到该指令后不能断电,需要等待OTA成功或者失败)

4

Sum1~3 

校验和

5

0x6A

包尾

 

OTA成功后,模块就进行复位。

5 
AiLink协议-电动牙刷协议

这里将介绍AiLink电动牙刷的专用指令。WiFiBle电动牙刷产品类型CID为0x0012

 

Byte

Value

Description

0

0xA7

包头

1

0x00

WiFiBle电动牙刷产品类型CID字节

2

0x12

WiFiBle电动牙刷产品类型CID字节

3

 

Payload长度

4

 

二级指令

Payload

5~n

 

体脂秤数据

n+1

SUM(1~n)

(1~n)校验和

n+2

0x7A

包尾(注:n+2不能超过20)

 

5.1 
 工作档位约定(如需要更多模式联系我司添加)

档位

APP显示中文名称

APP显示英文名字

0x00

停止电机

Stop

0x01

清洁

Clean

0x02

美白

White

0x03

按摩

Massage

0x04

敏感

Senstitive

0x05

抛光

Polish

0x06

牙龈护理

Gum Care

0x07

漱口

Refresh

0x08

保健

Mascare

0x09

新手

Mascare

0x0A

舒柔

Soft

0x0B

轻柔

Soft

0x0C

呵护

Soft

...

...

...

0xFF

手动设置

Custom

 

5.2 
 交互流程

 

5.3 
 MCU设置牙刷支持的档位

牙刷第一次上电应该设置牙刷支持的档位,利用上了Type =0x35A6指令,把档位存在模块的flash中,供MCU/APP查询。

刷牙模式很多,可以把档位分为一级和二级,如果不支持二级,设置个数为0即可。通常一级档位就是牙刷可以使用指示灯表示的常用档位,二级档位是提供给APP设置的档位一个牙刷最多支持12种档位

 

MCU设置

Byte

Value

Description

1

0xA6

包头

2

0x10

Payload 长度

3

0x35

TypeMCU上传设备的基本信息

Payload

4

0x01

0x01数据有效

5

 

一级档位个数

6

 

二级档位个数

7-18

 

支持的档位编码(前面为一级档位,后见为二级档位,其余位为0x00

19

Sum1~17 

校验和

20

0x6A

包尾

 

模块响应:

Byte

Value

Description

0

0xA6

包头

1

0x02

Payload长度

2

0x35

Type:回复上传设备的基本信息结果

Payload

3

 

结果值:

0x00:成功

0x01:失败

0x02:不支持

4

Sum1~3 

校验和

5

0x6A

包尾

 

例如:牙刷一级档位有0x01 0x03 0x05,二级档位有0x02 0x07,应设置

A6  10  35  01  03  02  01  03  05  02  07  00  00  00  00  00  00  00  5D  6A

 

例如:牙刷一级档位有0x01 0x03 0x05 0xFF二级档位,应设置

A6  10  35  01  03  00  01  03  05  FF  00  00  00  00  00  00  00  00  51  6A

 

5.4 
 MCU/APP获取牙刷支持的档位

该指令供MCU或者APP查询牙刷支持的档位,利用上了Type =0x36A6指令,档位存在模块的flash中。

 

MCU/APP获取

Byte

Value

Description

1

0xA6

包头

2

0x02

Payload长度

3

0x36

Type:读取设备的基本信息指令

Payload

4

0x01

Value0x01

5

0x39

校验和

6

0x6A

包尾

 

模块响应:

Byte

Value

Description

1

0xA6

包头

2

0x10

Payload 长度

3

0x36

TypeMCU上传设备的基本信息

Payload

4

0x01

0x00:数据无效

0x01数据有效

5

 

一级档位个数

6

 

二级档位个数

7-18

 

支持的档位编码(前面为一级档位,后见为二级档位,其余位为0x00

19

Sum1~17 

校验和

20

0x6A

包尾

 

例如:

查询档位:

A6  02  36  01  39  6A

一级档位有0x01 0x03 0x05,二级档位有0x02 0x07则响应

A6  10  36  01  03  02  01  03  05  02  07  00  00  00  00  00  00  00  5E  6A

 

 

5.5 
 APP设置默认刷牙时长和工作档位  二级指令:0x02

APP会下发此指令设置牙刷的默认刷牙时长和工作档位,MCU需要保持此两项数据

 

APP下发

Byte

Default

Description

1

0xA7

包头

2-3

0x0012

产品类型:一级指令,表示牙刷

4

 

Payload长度

5

0x02

Type二级指令

Payload

6

 

刷牙时长高字节单位S

工作时长0x0000:表示不修改工作时长,保留之前值

7

 

刷牙时长字节单位S

工作时长0x0000:表示不修改工作时长,保留之前值

8

 

档位:

0x00:表示不修改工作档位,保留之前值

0x01-0xfe:工作档位编号

0xFF:手动设置档位

9

 

属于档位级别:

0x00:不支持级别

0x01:一级档位

0x02:二级档位

10

SUM

校验和

11

0x7A

包尾

MCU回复:

Byte

Default

Description

1

0xA7

包头

2-3

0x0012

产品类型:一级指令,表示牙刷

4

0x02

Payload长度

5

0x02

Type二级指令

Payload

6

 

结果:

0:设置成功

1:设置失败

2:不支持设置

7

SUM

校验和

8

0x7A

包尾

 

 

 

例如:

 

APP 设置默认刷牙时长 2 分钟,默认档位 0x03应设置:

A7  00  12  05  02  00  78  03  01  95  7A

 

APP 设置默认刷牙时长 2 分钟,默认档位保持原先的档位应设置:

A7  00  12  05  02  00  78  00  01  92  7A

 

APP 设置默认刷牙时长保持原先值,默认档位 0x03应设置:

A7  00  12  05  02  00  00  03  01  1D  7A

 

 

 

 

 

 

5.6 
 APP获取默认刷牙时长和工作档位  二级指令:0x03

APP连接设备会下发此指令查询牙刷的默认刷牙时长和工作档位

如果刷牙时长或工作档位因其他原因发生改变,那么需要使用回复包进行上报。

 

APP下发:

Byte

Default

Description

1

0xA7

包头

2-3

0x0012

产品类型:一级指令,表示牙刷

4

0x01

Payload长度

5

0x03

Type二级指令

Payload

6

0x16

校验和

7

0x7A

包尾

MCU回复/上报:

Byte

Default

Description

1

0xA7

包头

2-3

0x0012

产品类型:一级指令,表示牙刷

4

 

Payload长度

5

0x03

Type二级指令

Payload

6

 

刷牙时长高字节单位S

工作时长0x0000:表示不支持工作时长

7

 

刷牙时长字节单位S

工作时长0x0000:表示不支持工作时长

8

 

档位:

0x01-0xfe:工作档位编号

0xFF:手动设置档位

9

 

属于档位级别:

0x00:不支持级别

0x01:一级档位

0x02:二级档位

10

SUM

校验和

11

0x7A

包尾

 

例如:

APP查询默认刷牙时长工作档位

A7  00  12  01  03  16  7A

例如,默认刷牙2分钟,默认档位是0x03,回复

A7  00  12  05  03  00  78  03  01  96  7A  

 

5.7 
 APP试用指令  二级指令:0x06

通常用于APP试用各种档位,APP会下发此指令,牙刷如果支持,应该改变相应配置。此指令的参数MCU无需保持。

 

APP下发

Byte

Default

Description

1

0xA7

包头

2-3

0x0012

产品类型:一级指令,表示牙刷

4

 

Payload长度

5

0x06

Type二级指令

Payload

6

 

模式:

0x00:关闭电机

0x01-0xfe:牙刷的模式编码

0xFF:手动设置档位

7

 

属于档位级别:

0x00:不支持级别

0x01:一级档位

0x02:二级档位

8

 

工作阶段,不支持填0xFF

9

 

模式不是手动设置档位0xff:此btye为保留位

模式是手动设置档位0xff:频率高字节单位Hz

10

 

模式不是手动设置档位0xff:此btye为保留位

模式是手动设置档位0xff:频率字节单位Hz

11

 

模式不是手动设置档位0xff:此btye为保留位

模式是手动设置档位0xff:占空比

12~18

 

保留位

19

SUM

校验和

20

0x7A

包尾

 

MCU回复:

Byte

Default

Description

1

0xA7

包头

2-3

0x0012

产品类型:一级指令,表示牙刷

4

0x02

Payload长度

5

0x06

Type二级指令

Payload

6

 

结果:

0:设置成功

1:设置失败,原因未知

2:不支持设置

3:设置失败,电池电压不足

4:设置失败,正在充电

5:设置失败,正在工作

7

SUM

校验和

8

0x7A

包尾

 

 

例如:

APP设置当前工作档位0x01

A7  00  12  0E  06  01  01  FF  00  00  00  00  00  00  00  00  00  00  27  7A

 

APP设置当前工作档位0xFF,200HZ50%占空比

A7  00  12  0E  06  FF  02  FF  00  C8  32  00  00  00  00  00  00  00  20  7A

 

5.8 
 MCU上报当前工作档位和工作阶段  二级指令:0x07

正常情况下APP不下发此指令的查询只在产品开发阶段APP会查询MCU的状态

 

如果牙刷当前工作档位或者工作阶段发生改变,那么一定要进行上报。

 

APP下发

Byte

Default

Description

1

0xA7

包头

2-3

0x0012

产品类型:一级指令,表示牙刷

4

0x01

Payload长度

5

0x07

Type二级指令

Payload

6

0x1A

校验和

7

0x7A

包尾

 

MCU回复/上报:

Byte

Default

Description

1

0xA7

包头

2-3

0x0012

产品类型:一级指令,表示牙刷

4

 

Payload长度

5

0x07

Type二级指令

Payload

6

 

模式:

0x00:关闭电机

0x01-0xfe:牙刷的模式编码(洁白模式、敏感模式等等)

0xFF:手动设置档位

7

 

属于档位级别:

0x00:不支持级别

0x01:一级档位

0x02:二级档位

8

 

工作阶段,不支持填0xFF

9

SUM

校验和

10

0x7A

包尾

 

例如:

MCU启动刷牙档位0x01,主动上报:

A7  00  12  04  07  01  01  01  20  7A

刷牙过程中,牙刷进入阶段2,阶段3,阶段4:

A7  00  12  04  07  01  01  02  21  7A

A7  00  12  04  07  01  01  03  22  7A

A7  00  12  04  07  01  01  04  23  7A

5.9 
 APP设置手动设置(自定义)档位  二级指令:0x09

通常APP会下发此指令设置手动设置档位的参数MCU需要保持这些参数。

 

APP下发:

Byte

Default

Description

1

0xA7

包头

2-3

0x0012

产品类型:一级指令,表示牙刷

4

0x07

Payload长度

5

0x09

Type二级指令

Payload

6

 

保留位:0x00

7

 

频率高字节HZ

8

 

频率低字节HZ

9

 

占空比

10

 

时间高字节

11

 

时间低字节

12

SUM

校验和

13

0x7A

包尾

 

MCU回复:

Byte

Default

Description

1

0xA7

包头

2-3

0x0012

产品类型:一级指令,表示牙刷

4

0x02

Payload长度

5

0x09

Type二级指令

Payload

6

 

结果:

0:设置成功

1:设置失败

2:不支持设置

7

SUM

校验和

8

0x7A

包尾

 

例如:

APP设置手动设置(自定义)档位,200HZ50%占空比,时间2分钟

A7  00  12  07  09  00  00  C8  32  00  78  94  7A

假设MCU接受配置

A7  00  12  02  09  00  1D  A7

 

5.10 
 APP获取手动设置(自定义)档位  二级指令:0x0A

通常APP会下发此指令查询手动设置档位的参数

 

APP下发:

Byte

Default

Description

1

0xA7

包头

2-3

0x0012

产品类型:一级指令,表示牙刷

4

0x01

Payload长度

5

0x0A

Type二级指令

Payload

6

 

校验和

7

0x7A

包尾

 

MCU回复/上报:

Byte

Default

Description

1

0xA7

包头

2-3

0x0012

产品类型:一级指令,表示牙刷

4

0x07

Payload长度

5

0x0A

Type二级指令

Payload

6

 

保留位:0x00

7

 

频率高字节HZ

8

 

频率低字节HZ

9

 

占空比

10

 

时间高字节

11

 

时间低字节

12

SUM

校验和

13

0x7A

包尾

 

例如:

 

APP查询手动设置(自定义)档位

A7  00  12  01  0A  1D  7A

例如,200HZ50%占空比,时间2分钟

A7  00  12  07  0A  00  00  C8  32  00  78  95  7A

5.11 
 APP启动/关闭牙刷  二级指令:0x0B

收到该指令,牙刷应该运用当前工作档位,或者停止当前档位(相当于牙刷的按键)。牙刷档位改变后,需要使用“上报当前工作档位和工作阶段”进行上报。

 

APP下发

Byte

Default

Description

1

0xA7

包头

2-3

0x0012

产品类型:一级指令,表示牙刷

4

0x01

Payload长度

5

0x0B

Type二级指令

Payload

6

 

校验和

7

0x7A

包尾

 

MCU回复:

Byte

Default

Description

1

0xA7

包头

2-3

0x0012

产品类型:一级指令,表示牙刷

4

0x02

Payload长度

5

0x0B

Type二级指令

Payload

6

 

结果:

0:设置成功

1:设置失败,原因未知

2:不支持设置

3:设置失败,电池电压不足

4:设置失败,正在充电

7

SUM

校验和

8

0x7A

包尾

 

 

5.12 
 APP设置二级档位默认值  二级指令:0x0C

通常APP会下发此指令设置二级档位的默认值MCU需要保持这些参数。

如果牙刷支持二级档位,则进行相应回复,否则回复不支持即可。二级档位默认值是指二级档位对应的工作档位。

 

APP下发

Byte

Default

Description

1

0xA7

包头

2-3

0x0012

产品类型:一级指令,表示牙刷

4

0x02

Payload长度

5

0x0C

Type二级指令

Payload

6

 

档位:

0x01-0xfe:工作档位编号

0xFF:手动设置档位

7

SUM

校验和

8

0x7A

包尾

 

MCU回复:

Byte

Default

Description

1

0xA7

包头

2-3

0x0012

产品类型:一级指令,表示牙刷

4

0x02

Payload长度

5

0x0C

Type二级指令

Payload

6

 

结果:

0:设置成功

1:设置失败

2:不支持设置

7

SUM

校验和

8

0x7A

包尾

 

例如:

 

APP设置二级档位默认值0x07

A7  00  12  02  0C  07  27  7A

假设MCU接受配置

A7  00  12  02  0C  00  20  A7

 

 

5.13 
 APP获取二级档位默认值  二级指令:0x0D

通常APP会下发此指令获取二级档位的默认值。

如果牙刷支持二级档位,则进行相应回复,否则回复不支持即可。

 

APP下发

Byte

Default

Description

1

0xA7

包头

2-3

0x0012

产品类型:一级指令,表示牙刷

4

0x01

Payload长度

5

0x0D

Type二级指令

Payload

6

0x20

校验和

7

0x7A

包尾

 

MCU回复/上报:

Byte

Default

Description

1

0xA7

包头

2-3

0x0012

产品类型:一级指令,表示牙刷

4

0x02

Payload长度

5

0x0D

Type二级指令

Payload

6

 

档位:

0x00:不支持

0x01-0xfe:工作档位编号

0xFF:手动设置档位

7

SUM

校验和

8

0x7A

包尾

 

例如:

 

APP查询二级档位默认值

A7  00  12  01  0D  20  7A

例如,二级档位默认是0x07或者不支持,回复

A7  00  12  02  0D  07  28  7A / A7  00  12  02  0D  00  21  7A

 

5.14 
 APP下发数据上报完成  二级指令:0xFE

刷牙停止后,模块会向APP或者服务器上报刷牙结果。上报完成后,MCU收到这条指令,表示牙刷结果上报完成。

 

下发给MCU

 

Byte

Default

Description

1

0xA7

包头

2-3

0x0012

产品类型:一级指令,表示牙刷

4

0x02

Payload长度

5

0xFE

Type二级指令

Payload

6

 

Value

0上报结果失败

1上报结果成功

7

0x13

校验和

8

0x7A

包尾

 

 

 

 

6 
应用实例:电动牙刷-MUC

6.1 准备阶段:启动模块

  1. MCU打开模块电源或者拉高EN脚,模块串口输出:

    A6 03 26 00 02 2B 6A

    表示wifible未连接,模块处于就绪状态;

     

  2. MCU设置CIDPIDVID,将模块设置为WiFiBle电动牙刷模式,第一次使用模块时候设置一次即可,掉电保存:

    A6 08 1D 07 00 12 00 03 00 01 42 6A

    WM05回复设置成功:

    A6 02 1D 00 1F 6A

     

  3. MCU设置支持档位,一级档位有0x01 0x03 0x05,二级档位有0x02 0x07第一次使用模块时候设置一次即可,掉电保存

    A6 10 35 01 03 02 01 03 05 02 07 00 00 00 00 00 00 00 5D 6A

    WM05回复设置成功:

    A6 02 35 00 37 6A

     

  4. 期间如果APP成功连接模块,模块会通知MCU当前状态:

    A6 03 26 01 02 2C 6A

    表示wifi未连接,ble已连接,模块处于就绪状态;

     

  5. 期间如果MCU收到请求授权,表示有陌生BLE连接设备:

    A6 07 7F 01 02 03 04 05 06 9B 6A

    如果MCU同意连接(牙刷按键按下)则回复授权成功:

    A6 02 7F 03 84 6A

    如果模块10S没有得到回复,BLE将会断开;

     

  6. 期间如果APP给模块配置WiFi,模块成功连接WiFi后,模块会通知MCU当前状态:

    A6 03 26 31 02 5C 6A

    表示wifi已连接,ble已连接,模块处于就绪状态;

     

  7. 期间如果MCU收到:

    A6 02 91 03 96 6A

    表示模块模块正在进行OTA升级,MCU不能切断模块电源,需要进行等待,如果在网络环境差的情况下,MCU可以控制时间,如果时间太久没有收到OTA结果,可以切断模块电源。

    升级成功MCU会收到:A6 02 91 00 93 6A,升级成功后模块将会进行复位;

    升级失败MCU会收到:A6 02 91 01 94 6A

     

6.2 设置阶段:与APP交互

牙刷与APP连接后,也许并没有刷牙,而是进行一些查询和设置,这些指令都是根据用户操作APP而进行查询和设置的。

 

  1. APP查询电池电量,

    A6  01  28  29  6A

    例如,MCU正在充电,电量50%,回复,

    A6  03  28  01  32  5E  6A

     

  2. APP查询默认刷牙时长工作档位,

    A7  00  12  01  03  16  7A

    例如,默认刷牙2分钟,默认档位是0x03,回复

    A7  00  12  05  03  00  78  03  01  96  7A   

     

  3. APP查询手动设置(自定义)档位,

    A7  00  12  01  0A  1D  7A

    例如,200HZ50%占空比,时间2分钟,

    A7  00  12  07  0A  00  00  C8  32  00  78  95  7A

     

  4. APP查询二级档位默认值,

    A7  00  12  01  0D  20  7A

    例如,二级档位默认是0x07或者不支持,回复,

    A7  00  12  02  0D  07  28  7A / A7  00  12  02  0D  00  21  7A

     

  5. APP设置默认刷牙时长2分钟,默认档位0x03

    A7  00  12  05  02  00  78  03  01  95  7A

    假设MCU接受这配置,

    A7  00  12  02  02  00  20  7A

     

  6. APP设置默认工作档位0x03,

    A7  00  12  05  02  00  00  03  01  1D  7A

    假设MCU接受这配置,

    A7  00  12  02  02  00  20  7A

     

  7. APP试用工作档位0x01

    A7  00  12  0E  06  01  01  FF  00  00  00  00  00  00  00  00  00  00  27  7A

    假设MCU接受配置或者电池电量不足,

    A7  00  12  02  06  00  1A  7A / A7  00  12  02  06  03  1D  7A

     

  8. APP试用配置200HZ50%占空比,

    A7  00  12  0E  06  FF  02  FF  00  C8  32  00  00  00  00  00  00  00  20  7A

    假设MCU接受配置或者未知原因不能运行

    A7  00  12  02  06  00  1A  7A / A7  00  12  02  06  01  1B  7A

     

  9. APP设置手动设置(自定义)档位,200HZ50%占空比,时间2分钟,

    A7  00  12  07  09  00  00  C8  32  00  78  94  7A

    假设MCU接受配置,

    A7  00  12  02  09  00  1D  A7

     

  10. APP启动/关闭牙刷,

    A7  00  12  01  0B  1E  7A

    此时牙刷是停止状态,收到后,先回复,

    A7  00  12  02  0B  00  1F  7A

    启动默认档位,再回复,

    A7  00  12  04  07  01  01  01  20  7A

     

  11. APP设置二级档位默认值0x07,

    A7  00  12  02  0C  07  27  7A

    假设MCU接受配置,

    A7  00  12  02  0C  00  20  A7

     

     

6.3 
工作阶段:发送数据

  1. MCU主动设置电池电量,如果使用过程中电池状态发生变化,需要实时设置电池电量:

    A6  03  27  00  64  94  6A

    表示没有充电,电池电量100;

    模块回复设置成功:

    A6  02  27  00  29  6A

     

  2. MCU启动刷牙档位0x01,主动上报:

    A7  00  12  04  07  01  01  01  20  7A

     

  3. 刷牙过程中,牙刷进入阶段2,阶段3,阶段4:

    A7  00  12  04  07  01  01  02  21  7A

    A7  00  12  04  07  01  01  03  22  7A

    A7  00  12  04  07  01  01  04  23  7A

     

  4. 开始刷牙,刷牙完毕后,MCU切换到刷牙模式0(关闭电机):

    A7  00  12  04  07  00  01  FF  1D  7A

     

  5. 模块开始整理刷牙的数据,进行上报,上报成功后回复:

    A7  00  12  02  FE  01  13  7A

     

  6. MCU收到上报结果或者等待结果超时(例如10秒)或者BLE和WIFI不处于连接状态,MCU即可关闭WM05电源或者拉低EN脚。

     


 

 

 


Copyright © 2020 深圳市易连物联网有限公司 All rights reserved.  

粤ICP备20028711号