概述
一、广播和 服务
广播包
Len | Type | Value | Description |
---|---|---|---|
0x02 | 0x01 | 0x06 | Discovery Mode |
0x03 | 0x02 | 0XA201 | Service: More 16-bit UUIDs available |
0x0C或者 0x14 | 0x16 | 0x01,0xA2,type(0-pid,1product_key)PID或者 product_key(8或者 16字节 ) | Service Data |
扫描响应包
Len | Type | Value | Description |
---|---|---|---|
0x03 | 0x09 | “TY” | Complete local name |
0x19 | 0xff | anufacturer Specific Data |
服务和特征值
UUID | Properties | 说明 |
---|---|---|
0x2B11 | Write | 提供手机APP 向BLE 设备发送消息或取相应消息 |
0x2B10 | Notify | 提供给BLE 设备向超级APP 发送通知信息 |
说明:每个版本的服务和特征的UUID不一样。
二、数据协议
本协议数据项使用Big-Endian编码,即多个字节表示一个数据项时,先发送高字节。
2.1、功能码
功能码 | 功能 | 备注 |
---|---|---|
0x0000 | 查询设备信息 | |
0x0001 | 发起配对 | |
0x0002 | 命令下发 | |
0x0003 | 设备状态查询 | |
0x0004 | 设置密码 | 保留 |
0x0005 | 设备解绑 | |
0x0006 | 设备重置 | |
0x000C | OTA开始升级 | |
0x000D | OTA升级文件信息 | |
0x000E | OTA升级文件偏移请求 | |
0x000F | OTA数据 | |
0x0010 | OTA升级结束 | |
0x8001 | 状态上报 | |
0x8002 | 设备调试信息显示 | |
0x8003 | 记录型状态数据上报 | |
0x8011 | 设备获取实时时间1 | |
0x8012 | 设备获取实时时间2 |
2.2、协议部分
4Byte | 4Byte | 2Byte | 2Byte | NByte | 2Byte |
---|---|---|---|---|---|
SN | ACK_SN | 功能码 | LEN | DATA | CRC16 |
2.3、 数据部分
1Byte | 16 Byte | N Byte |
---|---|---|
加密FLAG | AES-CBC IV | 帧数据的明文或者密文 |
加密FLAG:0- 未加密,明文;
1-secret_key_1;
2- secret_key_2;
3- secret_key_3;
4- secret_key_4;
5- session_key;
6- ECDH协商的key
AES-CBC IV:每次加密用随机数生成,明文传输,如果加密FLAG为0,则没有IV域存在。
2.3、分包数据结构
包头 | 包头 | 包头 | 包头 | 数据 部分 |
---|---|---|---|---|
分包序号 (<=4B) | 帧数据长度 (<=4B) | 协议版本标识 (4bit) | 保留 (4bit) | 数据 部分 |
采用类似 MQTT 可变长度描述 | 采用类似 MQTT 可变长度描述,表示后续帧数据长度 | 协议版号 | 保留 | N |
三、 配网流程
1、App请求连接;
2、App下发连接更新参数;
3、App获取设备信息;
4、App配对请求;
5、配网成功,下发dp查询命令和时间;
6、剩下根据产品上传DP数据;
四、数据处理的流程
1、 tuya_ble_gatt_receive_data函数接收蓝牙底层数据,且打包成一个消息;
2、 tuya_ble_main_tasks_exec函数处理消息,打包成数据事件;
3、 tuya_ble_handle_ble_data_evt函数分发数据事件;
4、 tuya_ble_commonData_rx_proc函数处理数据事件;
5、 ble_data_unpack函数进行组包;
6、 tuya_ble_decryption函数解密;
7、 ble_cmd_data_crc_check函数判断CRC,校验正确后产生消息;
8、 tuya_ble_main_tasks_exec函数处理消息,打包成命令事件;
9、 tuya_ble_handle_ble_cmd_evt函数调用下面的函数
10、tuya_ble_evt_process函数进行分发命令事件;
根据APP下发的命令处理对于的事件
11、 tuya_ble_handle_dev_info_req函数(设备信息获取命令)/tuya_ble_handle_pair_req函数(配对请求命令);
12、 tuya_ble_commData_send函数发送;
13、 tuya_ble_encryption函数加密
14、 trsmitr_send_pkg_encode函数进行数据分包;
15、 tuya_ble_gatt_send_data_enqueue产生事件;
16、tuya_ble_main_tasks_exec函数处理事件,且调用如下函数;
17、 tuya_ble_gatt_send_data_handle处理蓝牙数据;
18、 tuya_ble_gatt_send_data调用蓝牙底层发送出去;
五、 升级流程
1、 APP下发升级请求;
2、 APP下发升级文件信息;【重点是校验和文件大小】
3、 APP下发升级文件偏移请求;
4、 APP下发升级数据;【一直循环这个步骤,直到数据发送完】
5、 APP下发升级结束;
六、涂鸦SDK说明
App文件夹:串口协议和产测协议;
Doc文件夹:空的;
Example文件夹:简单的例子;
extern_components文件夹:
Port文件夹:蓝牙 SDK 所需要的接口抽象,需要我们根据具体的芯片平台移植实现。(下面会讲解要实现那些接口函数)
Sdk文件夹:里面的文件都要添加到工程中;
tuya_ble_config.h:涂鸦的配置文件;
最后
以上就是激情铅笔为你收集整理的涂鸦蓝牙协议简单说明(成为我的粉丝可以看涂鸦蓝牙SDK的移值初级教程)的全部内容,希望文章能够帮你解决涂鸦蓝牙协议简单说明(成为我的粉丝可以看涂鸦蓝牙SDK的移值初级教程)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复