【求助】T1模组 3.11.11 sdk怎么使用蓝牙优先控制
将设备配网后,将手机wifi/流量都关闭 后 无法控制设备,通用对接的固件可以控制 sdk中有对应的接口可以设置蓝牙控制优先吗?
将设备配网后,将手机wifi/流量都关闭 后 无法控制设备,通用对接的固件可以控制 sdk中有对应的接口可以设置蓝牙控制优先吗?
结论:SDK 里有这个开关 —— tuya_bt.h 的 tuya_ble_set_bt_para() 把 priority_flag 置 1 即"蓝牙优先",同时要确认蓝牙的 DP 控制能力没被裁掉;通用对接固件之所以能控,就是 MCU 协议 0x37 0x00 的 abv Bit4 在固件里打开了同样的逻辑。
原理
ADV_FLAG_BLE_FIRST 告诉 App,由 TUYA_BLE_BT_PARA.priority_flag(0=WiFi 优先,1=蓝牙优先)决定0x37 0x00 {"abv":x},Bit4=1 即蓝牙控制优先,固件收到后置 priority_flag=1,并把 DP 上报通道重排为 BLE→MQTT→LAN(ty_gfw_ble 组件行为)startup_attr 仅 NETCFG),配网后蓝牙没有 DP 控制路径,断网自然控不了SDK 侧改法(都在 tuya_svc_bt_init() 之前、pre_device_init 里调)
Code: Select all
**include "tuya_bt.h"**
VOID_T pre_device_init(VOID_T)
{
// 1. 蓝牙保留 DP 控制能力,别只给 NETCFG
tuya_ble_set_startup_attr(TUYA_BLE_ABILITY_ALL); // 或 NETCFG|DP_CTRL
// 2. 蓝牙优先
TUYA_BLE_BT_PARA para = {0};
para.priority_flag = 1; // 0:wifi优先 1:蓝牙优先
tuya_ble_set_bt_para(¶);
// 3. 确认 BLE 的 DP 通道开着(默认 TRUE,确认没被裁掉)
tuya_enable_ble_dp_ctrl(TRUE);
}可选:把 DP 上报通道也排成 BLE 最先,和通用固件行为一致(建议设备 init 期间设一次)
Code: Select all
UINT8_T chan[3] = {TY_DP_REPT_CHAN_BLE, TY_DP_REPT_CHAN_MQTT, TY_DP_REPT_CHAN_LAN};
ty_set_dp_rept_chan(chan, 3, TRUE); // only=TRUE:只走最优先且可用的通道生效条件与验证
priority_flag 改的是广播标志,重新编译烧录后重启生效(重新配网最稳)svc_dp/smart_frame 按 DP_CMD_TYPE_E 区分 mqtt/lan/bt 来源)注:以上符号出自 AI 基线源码库的 svc_bt、svc_dp 组件文档,3.11.11 同为 svc 层组件;万一名字对不上,在 tuya_bt.h / smart_frame.h 里搜 bt_para / rept_chan 即可。
出处:tuyaos-ai/components/svc_bt/README_CN.md(§4.1/§4.5/§5.1)、svc_dp/README_CN.md(§5.5.1)、tuyaos-gfw/application_components/ty_gfw_ble/README_CN.md(§6.2)
以上内容由 AI 自动分析生成,如有疑问请回复补充。