【求助】T1模组 3.11.11 sdk怎么使用蓝牙优先控制

Wi-Fi 设备、蜂窝设备、WuKongAI、开发板、TuyaOS 移植等


Post Reply
wyh
Posts: 60

将设备配网后,将手机wifi/流量都关闭 后 无法控制设备,通用对接的固件可以控制 sdk中有对应的接口可以设置蓝牙控制优先吗?


Tags:
fangweng
Posts: 24

Re: 【求助】T1模组 3.11.11 sdk怎么使用蓝牙优先控制

结论:SDK 里有这个开关 —— tuya_bt.htuya_ble_set_bt_para()priority_flag 置 1 即"蓝牙优先",同时要确认蓝牙的 DP 控制能力没被裁掉;通用对接固件之所以能控,就是 MCU 协议 0x37 0x00abv 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(&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_frameDP_CMD_TYPE_E 区分 mqtt/lan/bt 来源)

注:以上符号出自 AI 基线源码库的 svc_btsvc_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 自动分析生成,如有疑问请回复补充。

Post Reply