涂鸦蓝牙协议简单说明(成为我的粉丝可以看涂鸦蓝牙SDK的移值初级教程)

本文主要是介绍涂鸦蓝牙协议简单说明(成为我的粉丝可以看涂鸦蓝牙SDK的移值初级教程),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、广播和 服务

广播包

LenTypeValueDescription
0x020x010x06Discovery Mode
0x030x020XA201Service: More 16-bit UUIDs available
0x0C或者 0x140x160x01,0xA2,type(0-pid,1product_key)PID或者 product_key(8或者 16字节 )Service Data

在这里插入图片描述

扫描响应包

LenTypeValueDescription
0x030x09“TY”Complete local name
0x190xffanufacturer Specific Data

服务和特征值

UUIDProperties说明
0x2B11Write提供手机APP 向BLE 设备发送消息或取相应消息
0x2B10Notify提供给BLE 设备向超级APP 发送通知信息

说明:每个版本的服务和特征的UUID不一样。

二、数据协议

本协议数据项使用Big-Endian编码,即多个字节表示一个数据项时,先发送高字节。

2.1、功能码

功能码功能备注
0x0000查询设备信息
0x0001发起配对
0x0002命令下发
0x0003设备状态查询
0x0004设置密码保留
0x0005设备解绑
0x0006设备重置
0x000COTA开始升级
0x000DOTA升级文件信息
0x000EOTA升级文件偏移请求
0x000FOTA数据
0x0010OTA升级结束
0x8001状态上报
0x8002设备调试信息显示
0x8003记录型状态数据上报
0x8011设备获取实时时间1
0x8012设备获取实时时间2

2.2、协议部分

4Byte4Byte2Byte2ByteNByte2Byte
SNACK_SN功能码LENDATACRC16

2.3、 数据部分

1Byte16 ByteN Byte
加密FLAGAES-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协商的keyAES-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的移值初级教程)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/786386

相关文章

JAVA SE包装类和泛型详细介绍及说明方法

《JAVASE包装类和泛型详细介绍及说明方法》:本文主要介绍JAVASE包装类和泛型的相关资料,包括基本数据类型与包装类的对应关系,以及装箱和拆箱的概念,并重点讲解了自动装箱和自动拆箱的机制,文... 目录1. 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱2. 泛型2

Java中数组转换为列表的两种实现方式(超简单)

《Java中数组转换为列表的两种实现方式(超简单)》本文介绍了在Java中将数组转换为列表的两种常见方法使用Arrays.asList和Java8的StreamAPI,Arrays.asList方法简... 目录1. 使用Java Collections框架(Arrays.asList)1.1 示例代码1.

MySQL常见的存储引擎和区别说明

《MySQL常见的存储引擎和区别说明》MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY、Archive、CSV和Blackhole,每种引擎有其特点和适用场景,选择存储引擎时需根... 目录mysql常见的存储引擎和区别说明1. InnoDB2. MyISAM3. MEMORY4. A

MyBatis的配置对象Configuration作用及说明

《MyBatis的配置对象Configuration作用及说明》MyBatis的Configuration对象是MyBatis的核心配置对象,它包含了MyBatis运行时所需的几乎所有配置信息,这个对... 目录MyBATis配置对象Configuration作用Configuration 对象的主要作用C

Java8需要知道的4个函数式接口简单教程

《Java8需要知道的4个函数式接口简单教程》:本文主要介绍Java8中引入的函数式接口,包括Consumer、Supplier、Predicate和Function,以及它们的用法和特点,文中... 目录什么是函数是接口?Consumer接口定义核心特点注意事项常见用法1.基本用法2.结合andThen链

在Dockerfile中copy和add的区别及说明

《在Dockerfile中copy和add的区别及说明》COPY和ADD都是Dockerfile中用于文件复制的命令,但COPY仅用于本地文件或目录的复制,不支持自动解压缩;而ADD除了复制本地文件或... 目录在dockerfile中,copy 和 add有什么区别?COPY 命令ADD 命令总结在Doc

解读Pandas和Polars的区别及说明

《解读Pandas和Polars的区别及说明》Pandas和Polars是Python中用于数据处理的两个库,Pandas适用于中小规模数据的快速原型开发和复杂数据操作,而Polars则专注于高效数据... 目录Pandas vs Polars 对比表使用场景对比Pandas 的使用场景Polars 的使用

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为