涂鸦蓝牙协议简单说明(成为我的粉丝可以看涂鸦蓝牙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

相关文章

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

使用PyQt5编写一个简单的取色器

《使用PyQt5编写一个简单的取色器》:本文主要介绍PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16进制颜色编码,一款跟随鼠标刷新图像的RGB和16... 目录取色器1取色器2PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

Redis分布式锁使用及说明

《Redis分布式锁使用及说明》本文总结了Redis和Zookeeper在高可用性和高一致性场景下的应用,并详细介绍了Redis的分布式锁实现方式,包括使用Lua脚本和续期机制,最后,提到了RedLo... 目录Redis分布式锁加锁方式怎么会解错锁?举个小案例吧解锁方式续期总结Redis分布式锁如果追求

结构体和联合体的区别及说明

《结构体和联合体的区别及说明》文章主要介绍了C语言中的结构体和联合体,结构体是一种自定义的复合数据类型,可以包含多个成员,每个成员可以是不同的数据类型,联合体是一种特殊的数据结构,可以在内存中共享同一... 目录结构体和联合体的区别1. 结构体(Struct)2. 联合体(Union)3. 联合体与结构体的

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines