更新时间:2022-11-24 09:20:10下载pdf
本文档于 2021 年 8 月 24 日停止更新。 如果您想查看更新的内容,请参考 《TuyaOS》蓝牙设备接入。
调用函数 tuya_ble_dp_data_report()
上报 DP 数据,DP 数据格式以及 BLE SDK 提供的其他 API 请参考 BLE SDK 说明。
涂鸦 IoT 平台是以 DP 的方式管理数据,任何设备产生的数据都需要抽象为 DP 的形式。一个完整的 DP 数据由以下四部分组成。
Dp_id:1个字节,在开发平台注册的 dp_id 序号。
Dp_type:1 个字节,DP 类型。
#define DT_BOOL 1 //布尔类型;
#define DT_VALUE 2 //数值类型,其范围在iot平台注册时指定;
#define DT_STRING 3 //字符串类型;
#define DT_ENUM 4 //枚举类型;
#define DT_BITMAP 5 //位映射类型;
Dp_len:1 个字节或者两个字节,目前蓝牙仅支持一个字节,即单个 DP 数据最长 255 个字节。
Dp_data:数据,dp_len 个字节。
更多详情,详情请参考 自定义功能。
该 DP 上报函数的参数 p_data
指向的数据必须以下表格式组装上报:
DP 1的数据 | ~ | DP n的数据 | ||||||
---|---|---|---|---|---|---|---|---|
1 | 2 | 3 | 4~ | ~ | n | n+1 | n+2 | n+3~ |
Dp_id | Dp_type | Dp_len | Dp_data | ~ | Dp_id | Dp_type | Dp_len | Dp_data |
调用该函数时,参数 len 的最大长度为 TUYA_BLE_REPORT_MAX_DP_DATA_LEN
,目前为255+3。
测试用的授权码写入示例(位于tuya_ble_app_demo.c
中):
static const char auth_key_test[] = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy";
static const char device_id_test[] = "zzzzzzzzzzzzzzzz";
Tuya BLE SDK Demo Project 的 PID 更改在tuya_ble_app_demo.h
头文件中进行:
#define APP_PRODUCT_ID "YourProductId"
更多详情,请参考 BLE SDK Demo 说明。
需要写入,虽然目前使用自定义的 Mac 地址也可以工作,但是后续 BLE 设备接入规范会基于 Mac 地址管理注册设备。
h_id
是什么,需要更改吗?h_id
是 SDK 内部设备管理使用的,您无需更改 h_id
。
更多详细步骤,请参考 产测工具介绍。
在 ID 为 TUYA_BLE_CB_EVT_DP_WRITE
的 CALL BACK EVENT 处接收处理 DP 数据,详情请参考 BLE SDK Demo 说明。
例如,nRF52832 芯片可以在 Demo Project 的 tuya_ble_app_demo.c
源文件中进行查看:
static void tuya_cb_handler(tuya_ble_cb_evt_param_t* event)
{
int16_t result = 0;
switch (event->evt)
{
case TUYA_BLE_CB_EVT_CONNECTE_STATUS:
TUYA_BLE_LOG_INFO("received tuya ble conncet status update event,current connect status = %d",event->connect_status);
break;
case TUYA_BLE_CB_EVT_DP_WRITE:
dp_data_len = event->dp_write_data.data_len;
memset(dp_data_array,0,sizeof(dp_data_array));
memcpy(dp_data_array,event->dp_write_data.p_data,dp_data_len);
TUYA_BLE_LOG_HEXDUMP_DEBUG("received dp write data :",dp_data_array,dp_data_len);
tuya_ble_dp_data_report(dp_data_array,dp_data_len);
//custom_evt_1_send_test(dp_data_len);
break;
case TUYA_BLE_CB_EVT_DP_DATA_REPORT_RESPONSE:
TUYA_BLE_LOG_INFO("received dp data report response result code =%d",event->dp_response_data.status);
break;
case TUYA_BLE_CB_EVT_DP_DATA_WTTH_TIME_REPORT_RESPONSE:
TUYA_BLE_LOG_INFO("received dp data report response result code =%d",event->dp_response_data.status);
break;
case TUYA_BLE_CB_EVT_UNBOUND:
TUYA_BLE_LOG_INFO("received unbound req");
break;
case TUYA_BLE_CB_EVT_ANOMALY_UNBOUND:
TUYA_BLE_LOG_INFO("received anomaly unbound req");
break;
case TUYA_BLE_CB_EVT_DEVICE_RESET:
TUYA_BLE_LOG_INFO("received device reset req");
break;
case TUYA_BLE_CB_EVT_DP_QUERY:
TUYA_BLE_LOG_INFO("received TUYA_BLE_CB_EVT_DP_QUERY event");
tuya_ble_dp_data_report(dp_data_array,dp_data_len);
break;
case TUYA_BLE_CB_EVT_OTA_DATA:
tuya_ota_proc(event->ota_data.type,event->ota_data.p_data,event->ota_data.data_len);
break;
case TUYA_BLE_CB_EVT_NETWORK_INFO:
TUYA_BLE_LOG_INFO("received net info : %s",event->network_data.p_data);
tuya_ble_net_config_response(result);
break;
case TUYA_BLE_CB_EVT_WIFI_SSID:
break;
case TUYA_BLE_CB_EVT_TIME_STAMP:
TUYA_BLE_LOG_INFO("received unix timestamp : %s ,time_zone : %d",event->timestamp_data.timestamp_string,event->timestamp_data.time_zone);
break;
case TUYA_BLE_CB_EVT_TIME_NORMAL:
break;
case TUYA_BLE_CB_EVT_DATA_PASSTHROUGH:
TUYA_BLE_LOG_HEXDUMP_DEBUG("received ble passthrough data :",event->ble_passthrough_data.p_data,event->ble_passthrough_data.data_len);
tuya_ble_data_passthrough(event->ble_passthrough_data.p_data,event->ble_passthrough_data.data_len);
break;
default:
TUYA_BLE_LOG_WARNING("app_tuya_cb_queue msg: unknown event type 0x%04x",event->evt);
break;
}
}
涂鸦 BLE SDK 不负责不参与广播间隔和连接间隔的设置,您的应用程序需要根据产品功能和性能需求自定义广播和连接参数。
但是,iOS 系统对连接参数有一定的限制,如果不满足 iOS 的规范,设备在更新连接参数时会被拒绝,目前 iOS 要求的连接参数需满足以下要求:
广播间隔不宜超过 1 秒,要不然不容易被手机扫描发现连接。
固件 OTA 升级步骤请参考 BLE SDK 说明 和 BLE SDK Demo 说明。
对于涂鸦 BLE SDK Demo Project 来说,在涂鸦 IoT 平台配置 OTA 升级的大致步骤为:
修改 tuya_ble_app_demo.h
里的固件版本号,例如原来是1.0可以改为1.1 ,如下所示。
// 固件版本
#define TY_APP_VER_NUM 0x0101
#define TY_APP_VER_STR "1.1"
编译固件生成OTA文件(bin 或者 HEX 根据芯片平台而定)。
在 涂鸦 IoT 平台产品管理页面,找到您开发的蓝牙产品,在 产品配置 > 固件升级 页面进行固件 OTA 升级配置。
说明:如果是涂鸦固件或者 OEM PID,不支持新增固件版本,因此无法自定义 OTA 升级的固件版本。但固件有升级时,会给您推送升级包供您验证。
单击 设置 进入固件升级配置页面,在右上角单击 新增固件版本,然后根据页面引导上传新固件。
在 固件版本管理 页面,单击 常用白名单管理,然后根据页面引导新增白名单设备进行升级测试。
BLE 协议的传输速度取决于产品 App 设置的连接间隔参数以及所用蓝牙芯片的处理能力。目前,涂鸦 BLE SDK 采用的 GATT MTU 大小为 20 字节。
以 nRF52832 平台的涂鸦 BLE SDK Demo Project 为例,GATT MTU 大小为 20 字节,连接间隔为 30 ms 时,OTA 的传输速率大约为 2KB/S。
您可以尽可能每条上报指令发送多个 DP 数据,目前 DP 上报函数最多可以发送258字节数据(包含 DP 数据头)。
DP 上报函数的参数 p_data
指向的数据必须以下表格式组装上报:
DP 1的数据 | ~ | DP n的数据 | ||||||
---|---|---|---|---|---|---|---|---|
1 | 2 | 3 | 4~ | ~ | n | n+1 | n+2 | n+3~ |
Dp_id | Dp_type | Dp_len | Dp_data | ~ | Dp_id | Dp_type | Dp_len | Dp_data |
调用该函数时,参数 len 的最大长度为 TUYA_BLE_REPORT_MAX_DP_DATA_LEN
(目前为255+3)。
如果您选用的蓝牙芯片型号,有对应的涂鸦 BLE SDK Demo 示例,则建议您基于该 Demo Project 开发。
如果没有,则需要用户自己移植涂鸦 BLE SDK 以及编写 bootloader 和固件 OTA 相关代码,bootloader 的编写要考虑固件验证,防止非法固件写入运行。
配置不同 Tuya BLE SDK 占用资源也不同,默认配置下占用 RAM 4K 左右,ROM 14k 左右(不包括 port 和 application 相关文件占用)。
请检查广播数据是否正确。如果是您自行移植 SDK 开发的产品,请确认移植的广播相关的接口是否有问题,PID 和授权信息是否设置正确。
adv data
广播数据段描述 | 类型 | 说明 |
---|---|---|
设备 LE 物理连接标识 | 0x01 | 长度:0x02 类型:0x01 数据:0x06 |
Service UUID | 0x02 | 长度:0x03 类型:0x02 数据:0xA201 |
Service Data | 0x16 | 长度:0x0C 或者 0x14 类型:0x16 数据:0x01, 0xA2, type (0-pid,1-product_key)PID或者product_key (8 或者 16 字节) |
内容示例(8字节PID): 02 01 05 03 02 01 A2 0C 16 01 A2 00 00 00 00 00 00 00 00 00
scan response data
广播数据段描述 | 类型 | 说明 |
---|---|---|
Complete Local Name | 0x09 | 长度:0x03 类型:0x09 数据:0x54,0x59 |
厂商自定义数据 | 0xff | 长度:0x19 类型:0xff 数据 :COMPANY ID:0x07D0 FLAG:0x00 协议版本:0x03 加密方式:0x00 通信能力:0x0000 保留字段:0x00 |
ID 字段: 16 个字节或 6 字节 |
内容示例(未绑定):03 09 54 59 19 FF D0 07 00 0300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
按照 BLE SDK 说明 正确移植 SDK 的话,涂鸦 BLE SDK 是不会影响蓝牙芯片原有功耗架构的。
一般影响功耗的因素有:
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈