MCU对接指南

平台创建产品,下载 MCU 开发包

  1. 选品类创建产品

请注意通信类型选择“蓝牙”

  1. 功能定义
    标准功能

自定义功能

云功能

  1. 配置 App 界面

  2. 一键下载 MCU 开发包资料

图片1.png

开发资源包,包含以下资料:

  1. MCU SDK
  2. JSON 调试文件
  3. 根据产品功能自动生成的串口通讯协议
  4. 开发资源包使用说明
  5. 涂鸦串口调试助手

硬件调试

概述

涂鸦蓝牙门锁模组,TYBN1 使用通讯框图如下图1所示。

图片2.png

模组硬件引脚原理图

针对低功耗门锁设备,蓝牙模组和 MCU 之间有两个控制 IO,作为低功耗控制引脚。
模块第 10 引脚 IO11 处于高电平时,为低功耗工作模式;处于低电平时为非低功耗工作模式,IO11 的电平由外部 MCU 控制。
模块第 11 引脚 IO14 为模块唤醒外部 MCU 的引脚,当模块需要发送数据给外部 MCU 时,模块会拉低 IO14 200ms,然后再发送数据,发送完成后拉高电平。

图片3.png

使用 MCU 助手配合模组工作,熟悉协议

图片4.png

涂鸦 MCU 仿真调试助手,上位机可以模拟 MCU 的数据收发。将模组最小系统搭建好,将串口连接至电脑,可有以下用途:

  1. 与联网模块配对使用,验证模块是否正常工作。

  2. 在 MCU 未完成开发前,调试App面板显示

  3. 当 MCU 开发者不知如何发送、回复数据给模块时,仿真助手的数据可作为参考。

图片5.png

助手开始前记得把 PID 信息换成自己的

1.图中1处可切换助手,选择 BLE - BLE 门锁 MCU 助手

2.图中2处配置串口和波特率,模组通过 USB 转 TTL 工具连接到电脑,选择串口波特率 9600

3.图中3处导入平台下载的开发包中的 json 文件

4.图中4处点击启动,模组若正常工作,上电会主动发起心跳查询,收到回复后会自动进行初始化数据交互。

注:若连上什么反应都没有,检查模组硬件外围电路是否正确,IO11 是否有拉低,模组上电会有数据包发出。

模组配网

MCU 上位机可以配合模组实测配网。初始化交互完成后,点击重置模块,模块进入待配网状态。

图片6.png

此时可以用涂鸦智能/智能生活 App 配网,产品选择蓝牙门锁,操作流程如下。

图片7.png

软件调试

串口通信约定

波特率:9600

数据位:8

奇偶校验:无

停止位:1

数据流控:无

MCU:用户控制板控制芯片,与涂鸦模块通过串口对对接

帧格式

字段 长度(byte) 说明
帧头 2 固定为 0x55aa
版本 1 升级扩展用
命令字 1 具体帧类型
数据长度 2 大端
数据 N
校验和 1 从帧头开始按字节求和得出的结果对 256 求余

模组初始化协议主要命令字及流程图如下

图片8.png

常用命令字

Cmd ID 说明
0x00 心跳检测
0x01 产品信息查询
0x02 设定模块工作模式
0x03 上报模块工作状态
0x04 重置配网
0x06 DP 数据下发
0x07 DP 数据上报
0x08 状态查询
0x0A OTA升级启动
0x0B OTA 升级包传输
0x0E Rf射频测试
0xE0 离线Flash缓存
0xE1 获取实时时间
0xE2 修改低功耗广播间隔
0xE4 关闭系统计时功能
0xE5 使能低功耗功能

协议详述

链接

使用 MCU SDK 对接方式

概述:
mcu_sdk 包是根据涂鸦开发平台上定义的产品功能,自动生成的 MCU 代码。通讯及协议解析架构已写好,可直接添加到原有 MCU 工程中,快速完成 MCU 程序开发。

SDK 包对 MCU 硬件资源需求: Flash 4Kbyte 、RAM占用 与 DP 点数据长度有关,大概几十字节(OTA 功能需大于 260byte)。函数嵌套级数 9 级。若资源不足的用户,可自行对接协议,SDK 包中的函数依然可以作为参考。

涂鸦 MCU SDK 对接流程六步走

步骤1: 编写 MCU 基础程序,移植 SDK 文件

步骤2: 确认 protocol.h 宏定义

步骤3: 移植 protocol.c 文件及函数调用

步骤4: DP 上报下发函数完善调用

步骤5: 配网功能函数完善

步骤6: 产测功能完善

若移植过程和调试过程需要了解 SDK 相关架构,可以观看 Wi-Fi SDK 视频教程函数架构讲解篇。虽然协议略有不同,SDK 构造基本一致,可供参考。

门锁功能说明

蓝牙门锁功能简介

蓝牙门锁目前支持手机端发起添加、删除、修改、冻结,各类开门方式。支持蓝牙开门、临时密码、动态密码等功能,支持开门记录显示,告警推送等多种功能,用户可根据自己实际产品进行功能选择。

术语介绍

• 用户(成员):一个门锁可以有 255 个用户,编号为 0x00~0xFE,0xFF 表示为空(其中包括管理员和非管理员,管理员可以对普通用户进行权限设 置、删除等操作;非管理员只能对自身权限进行设置;管理员可以将非管理员设置为管理员)

• 管理员:在用户的基础上通过管理员标记位来标明用户的管理员权限(权限参考用户)

• 硬件编号:一个硬件编号是一种开锁方式,密码、门卡、指纹共用 0x01~0xFE 硬件编号,0xFF 表示为空

• 可用次数:可用次数是硬件编号层面的属性,一个硬件编号只有一个可用次数属性(比如硬件编号为 0x02 的开锁方式{密码、门卡或指纹},仅仅一次有效,即:采用该种方式只能开一次门之后便无法开锁)

• 时效性:时效性是用户层面的属性,一个用户只有一个时效性,时效性需要参考附录一(比如每周周 1~周 5,用户 1 在该时间段内可以开锁)

• 有效性:一个用户采用某种方式{密码、门卡或指纹}去开锁时,其有效性取决于用户时效性和开锁方式硬件编号可用次数的交集,只有两个都满足才能开锁

门锁功能 DP 点分类

第一类:开门方式的增加,删除,修改等;

第二类:开门记录,警报记录的上报,主要用来上报开门日志和警报日志;

第三类:实时状态显示,主要用来显示设备的电量,开锁状态等信息;

第四类:门锁相关设置,例如门锁的按键音量,音效等。

门锁功能详解

开门方式管理

主要为门锁具体开门方式(指纹,门卡,密码)的添加,修改,删除,冻结,解冻和同步。
其中涉及到的 DP 点主要为:

dpid 说明
1 添加开门方式,例如为某个成员添加一个密码或者一张门卡
2 删除开门方式,例如删除某个成员的密码或者指纹开门方式
3 修改开门方式,例如修改某个成员的密码或者修改开门方式的时效性
4 冻结开门方式,例如冻结某个成员的密码或门卡开门方式
5 解冻开门方式,例如解冻某个成员的密码或者指纹开门方式
35 同步某个成员的所有开门方式,使App可以实时获取某个成员所拥有的所有开门方式,以保持 App 端和设备端的一致性

添加开门方式dp点定义

创建开锁方式

DP1

raw

下发 类型 阶段 管理员标记 成员 ID 硬件编号 时效性 次数 密码长度 密码内容
1 字节 1 字节 1 字节 1 字节 1 字节 17 字节 1 字节 1 字节 N
0x01:密码

0x02:门卡

0x03:指纹

0x00:开始录入

0xFE:取消录入(App端发起)

0x00:普通成员

0x01:管理员

0x00 ~ 0xFE 0xFF:创建默认为 0xFF 见附录 1 0xFF:失效

0x01:一次有效

0x00:永久有效

密码字节数N(仅用于密码类型) 密码以数值形式下发,例如:0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 代表密码为:123456
上报 类型 阶段 管理员标记 成员 ID 硬件编号 次数 录入的返回状态
1 字节 1 字节 1 字节 1 字节 1 字节 1 字节 1 字节
0x01:密码

0x02:门卡

0x03:指纹

0x00:开始 0x00:普通成员

0x01:管理员

0x00~0xFE 0x00~0xFE 设备需要录入的总次数,假如指纹可能是五次,门卡可能只需要一次 0x00,暂时不用
0xFE:取消录入(App端发起) 管理员标记 0x00 ~ 0xFE 0x00 ~ 0xFE 0x00,暂时不用 0x00,暂时不用
0xFD:录入失败 管理员标记 0x00 ~ 0xFE 0x00 ~ 0xFE 当前处于的阶段:

0x00:录入开始

0xFC:录入中

0xFF:录入结束

录入失败原因:

0x00:录入超时

0x01:录入失败

0x02:重复录入

0x03 : 硬件编号分配完

0x04 : 添加密码错误,字段为非数字

0x05 : 添加密码,密码长度错误

0x06 : 不支持添加的开门方式类型

0x07 : 当前正处于指纹录入

0x08 : 当前正处于绑定门卡

0xFE:错误编号

0xFC:录入中 管理员标记 0x00 ~ 0xFE 0x00 ~ 0xFE 录入的次数编号,例如指纹可能需要 5 次,填写 5 次的编号,门卡只需要录入一次,则不需要此过程 录入异常原因:

0x00:无异常

0x01:指纹不全

0xFC:录入结束 管理员标记 0x00 ~ 0xFE 0x00 ~ 0xFE 0x00:暂时不用 0x00:暂时不用

一个门锁的硬件开锁方式包括:键盘密码输入开锁、门卡开锁、指纹开锁;创建一个密码开锁和门卡开锁的云 - App - 设备的交互流程如下:

图片9.png

创建一个指纹开锁略有不同(指纹开锁需要多次录入指纹,密码或门卡只需要采集一次秘钥信息):

图片10.png

例:
添加门卡:

模组发送:55 AA 00 06 00 1D 01 00 00 19 02 00 01 01 00 38 6C D3 00 72 BC 9B 7F 00 00 00 00 00 00 00 00 00 00 01 01 01

MCU 回复:55 AA 00 07 00 0B 01 00 00 07 02 00 01 01 00 01 00 1E

添加密码:

模组发送:55 AA 00 06 00 22 01 00 00 1E 01 00 01 01 00 38 6C D3 00 72 BC 9B 7F 00 00 00 00 00 00 00 00 00 00 06 01 01 01 02 02 02 17

MCU 回复:55 AA 00 07 00 0B 01 00 00 07 01 00 01 01 00 01 00 1D

添加指纹:

模组发送:55 AA 00 06 00 1D 01 00 00 19 03 00 01 02 00 38 6C D3 00 72 BC 9B 7F 00 00 00 00 00 00 00 00 00 00 01 01 03

MCU 回复:
55 AA 00 07 00 0B 01 00 00 07 03 00 01 02 00 03 00 22

55 AA 00 07 00 0B 01 00 00 07 03 FC 01 02 00 01 00 1C

55 AA 00 07 00 0B 01 00 00 07 03 FC 01 02 00 02 00 1D

55 AA 00 07 00 0B 01 00 00 07 03 FF 01 02 00 00 00 1E

删除开门方式 DP 点定义

删除开锁方式

DP2

raw

下发 类型 阶段 管理员标记 成员 ID 硬件编号 删除方式
1 字节 1 字节 1 字节 1 字节 1 字节 1 字节
0x00:删除成员 0x00:默认 0x00:普通成员

0x01:管理员

0x00 ~ 0xFE 0xFF:删除成员 0x00:删除成员下所有开锁方式
0x01:密码

0x02:门卡

0x03:指纹

0x00:默认 0x00:普通成员

0x01:管理员

0x00 ~ 0xFE 0x00 ~ 0xFE:硬件编号 0x01:删除成员中的一个开锁方式
上报 类型 阶段 管理员标记 成员 ID 硬件编号 删除方式 修改返回状态
1 字节 1 字节 1 字节 1 字节 1 字节 1 字节 1 字节
0x00:删除成员 0x00:默认 0x00:普通成员

0x01:管理员

0x00 ~ 0xFE 0xFF:删除成员 0x00:删除成员下所有开锁方式 0x00:修改失败

0xFF:修改成功

0x01:密码

0x02:门卡

0x03:指纹

0x00:默认 0x00:普通成员

0x01:管理员

0x00 ~ 0xFE 0x00 ~ 0xFE:硬件编号 0x01:删除成员中的一个开锁方式 0x00:修改失败

0xFF:修改成功

例:

删除门卡:

模组发送:55 AA 00 06 00 0A 02 00 00 06 02 00 01 01 00 01 1C

MCU 回复:55 AA 00 07 00 0B 02 00 00 07 02 00 01 01 00 00 FF 1D

修改开门方式 DP 点定义

修改开锁方式

DP3

raw

下发 类型 阶段 管理员标记 成员 ID 硬件编号 时效性 次数 密码长度 密码内容
1 字节 1 字节 1 字节 1 字节 1 字节 17 字节 1 字节 1 字节 N
0x00:只修改时效性 0x00:默认 0x00:普通成员

0x01:管理员

0x00 ~ 0xFE 0xFF:删除成员 0x00:删除成员下所有开锁方式
0x01:密码

0x02:门卡

0x03:指纹

0x00:默认 0x00:普通成员

0x01:管理员

0x00 ~ 0xFE 0xFF:默认 见附录一 0x00:默认 密码字节数 N(仅用于密码类型) 密码以数值形式下发:例如:0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 代表密码为:123456
上报 类型 阶段 管理员标记 成员 ID 硬件编号 次数 修改返回状态
1 字节 1 字节 1 字节 1 字节 1 字节 1 字节 1 字节
0x00:时效性 0x00:默认 0x00:普通成员

0x01:管理员

0x00 ~ 0xFE 0xFF:默认 0x00:默认 0x00:修改失败

0xFF:修改成功

0x01:密码

0x02:门卡

0x03:指纹

0x00:默认 0x00:普通成员

0x01:管理员

0x00 ~ 0xFE 0x00 ~ 0xFE 0x00:永久有效

0x01:一次有效

0xFF:失效

0x00:修改失败

0xFF:修改成功

开门方式冻结 DP 点定义

冻结开始方式

DP4

value

下发 硬件编号
4 字节
0x00~0xFE
上报 硬件编号
4 字节
0x00~0xFE

开门方式解冻 DP 点定义

解冻开始方式

DP5

value

下发 硬件编号
4 字节
0x00 ~ 0xFE
上报 硬件编号
4 字节
0x00 ~ 0xFE

开门方式同步 DP 点定义

成员开锁方式同步

DP35

raw

下发 1 字节 3 字节 3 字节 3 字节
硬件 ID 个数 硬件 ID1 +硬件类型+硬件 CRC8 硬件 ID2 +硬件类型+硬件 CRC8 硬件 Idn +硬件类型+硬件 CRC8
上报 1 字节 5 字节 5 字节 5 字节
硬件 ID 个数 操作类型+硬件 ID1 +硬件类型+硬件属性 操作类型+硬件 ID2 +硬件类型+硬件属性 操作类型+硬件 Idn +硬件类型+硬件属性

模组发送:55 AA 00 06 00 0E 23 00 00 0A 03 00 03 41 00 01 E0 00 02 10 7A

1.说明:
为了保持门锁本地和服务器端的开门方式一致,每次蓝牙连接后需要进行开门方式表格同步。为了尽量降低同步的数据量,每次只同步有差异化的部分。蓝牙连接后,App 会将服务器端储存的硬件 ID 以及每个硬件 ID 绑定的属性(例如归属成员,冻结状态)的 crc8 值,传递给门锁,门锁收到后进行比对。然后选取有差异化的硬件 id ,并将其属性值重新上传。

2.参数说明

硬件类型:1 字节,0x00 - 标识密码,0x0 - 表示门卡,0x03 - 表示指纹;

操作类型:1 字节,0x00 - 更新硬件属性,服务器和本地不一致,0x01-删除该硬件id,本地无记录;

硬件属性:

成员id:1 字节;

冻结状态:1 字节,0x01 表示生效,0x00 表示冻结;

注意:此处的 crc8 为 crc16 取低字节

记录型数据上报

时间戳:1569511829000 时间2019-09-26 23:30:29

55 AA 00 E0 00 16 03 31 35 36 39 35 31 31 38 32 39 30 30 30 0C 02 00 04 00 00 00 02 AB

在线会延迟1s推送到APP,离线后在线会推送缓存的数据到APP。

非记录型数据使用 CMD 0x07 上报。

55 AA 00 07 00 08 0C 02 00 04 00 00 00 02 22

附录一:(时效性)

时效性 说明 举例 举例表示
生效起始时间 Unsigned int

4 字节

(大端)

例如unix时间为:(大端)123456789 07
5B
CD
15
生效结束时间 Unsigned int

4 字节

(大端)

例如 unix 时间为:(大端)999999999 3B
9A
C9
FF
循环方式 说明后面的数据是按照哪种方式循环 0x01:天循环

0x02:月循环

0x03:周循环

循环天标志位 1 循环标志位第一个字节 按照天循环:

该字节默认为 0x00

按照周循环:

该字节默认为 0x00

按照月循环:

一个 bit 表示一月中的某一天要循环

第 8 位:默认为0

第 7 位:31 号循环

第 6 位:30 号循环

……

第 1 位:25 号循环

循环天标志位 2 循环标志位第二个字节 按照天循环:

该字节默认为 0x00

按照周循环:

该字节默认为 0x00

按照月循环:

一个 bit 表示一月中的某一天要循环

第 8 位:24 号循环

第 7 位:23 号循环

……

第 1 位:17 号循环

循环天标志位 3 循环标志位第三个字节 按照天循环:

该字节默认为 0x00

按照周循环:

该字节默认为 0x00

按照月循环:

一个 bit 表示一月中的某一天要循环

第 8 位:16 号循环

第 7 位:15 号循环

……

第 1 位:9 号循环

循环天标志位 4 循环标志位第四个字节 按照天循环:

该字节默认为 0x00

按照周循环:

一个 bit 表示一周中的星期几要循环

第 8 位:默认为 0

第 7 位:周日循环

第 6 位:周六循环

……

第 1 位:周一循环

按照月循环:

一个 bit 表示一月中的某一天要循环

第 8 位:8 号循环

第 7 位:7 号循环

……

第 1 位:1 号循环

一天中有效起始时间 1 一字节

小时数

起始时间:8:30 08
一天中有效起始时间 2 一字节

分钟数

30
一天中有效结束时间 1 一字节

小时数

失效时间:20:30 20
一天中有效结束时间 2 一字节

分钟数

30