将设备配网后,将手机wifi/流量都关闭 后 无法控制设备,通用对接的固件可以控制 sdk中有对应的接口可以设置蓝牙控制优先吗?
【求助】T1模组 3.11.11 sdk怎么使用蓝牙优先控制
Re: 【求助】T1模组 3.11.11 sdk怎么使用蓝牙优先控制
结论:SDK 里有这个开关 —— tuya_bt.h 的 tuya_ble_set_bt_para() 把 priority_flag 置 1 即"蓝牙优先",同时要确认蓝牙的 DP 控制能力没被裁掉;通用对接固件之所以能控,就是 MCU 协议 0x37 0x00 的 abv Bit4 在固件里打开了同样的逻辑。
原理
- 双模设备(T1 = WiFi+BLE)配网后,手机断网时 App 会直连设备蓝牙下发 DP。设备是否“蓝牙优先”靠广播标志
ADV_FLAG_BLE_FIRST告诉 App,由TUYA_BLE_BT_PARA.priority_flag(0=WiFi 优先,1=蓝牙优先)决定 - 通用对接固件里,MCU 上电后发
0x37 0x00 {"abv":x},Bit4=1 即蓝牙控制优先,固件收到后置priority_flag=1,并把 DP 上报通道重排为 BLE→MQTT→LAN(ty_gfw_ble组件行为) - 自建的 SDK 工程默认 WiFi 优先;若模板把蓝牙只用于配网(
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:只走最优先且可用的通道生效条件与验证
- 手机须在设备蓝牙范围内且开着蓝牙 —— App 是直连 BLE 控制的,隔远了没用
priority_flag改的是广播标志,重新编译烧录后重启生效(重新配网最稳)- 验证:关闭手机 WiFi/流量后用 App 控制,设备日志里 DP 下发来源应显示 bt(
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 自动分析生成,如有疑问请回复补充。