蓝牙遥控器

更新时间:2024-03-01 06:48:57下载pdf

针对 Wi-Fi & 蓝牙双模设备,TuyaOS 框架支持接收蓝牙遥控器控制指令的功能。

功能描述

  • 支持与涂鸦蓝牙遥控器绑定或者解绑
  • 支持接收涂鸦遥控器的各种控制指令
  • 支持与云端同步已绑定的涂鸦遥控器信息
  • 支持透传自定义遥控器的数据

工作原理

开启蓝牙扫描的前提条件

  • 应用在 设备初始化 前注册了处理蓝牙遥控器数据的回调函数。

  • 框架在 设备初始化 之后才会打开扫描功能。

  • 设备不处于配网状态或者配网中拿到 SSID 和密码后。

    开启蓝牙扫描功能会影响双模设备的配网成功率。

绑定流程

开启绑定窗口的时机

  • 蓝牙扫描功能当前是处于开启的状态。

  • 未配网激活的设备 上电进入低功耗状态 后,框架会自动打开绑定窗口期。

  • 设备处于配网状态,在设备拿到 SSID 和密码后,框架会自动打开绑定窗口期。

  • 已经激活的设备上电后,待 设备初始化 时会自动打开绑定窗口期。

  • 应用自行调用开启绑定窗口的接口。

被控设备遥控器云端开启绑定窗口(默认 30s)扫描蓝牙广播包发送广播包绑定成功上报绑定成功的遥控器信息绑定窗口时间超时 关闭绑定入口被控设备遥控器云端

解绑流程

遥控器被控设备云端发送解绑指令上报解绑遥控信息解绑校验返回校验结果opt[本地解绑]发送解绑指令opt[远程解绑]本地清空解绑遥控的信息通知解绑结果遥控器被控设备云端

开发指导

运行环境

由于每个模组上的资源不一样,并不会打开所有功能,您需要检查 tuya_iot_config.h并确认如下宏定义是否已经定义:

#define ENABLE_BT_REMOTE_CTRL 1

关联头文件

  • tuya_bt.h

使用方法

  • 注册涂鸦蓝牙遥控器接收数据回调函数, tuya_ble_reg_app_scan_adv_cb
  • 如果是自定义的蓝牙遥控器,需要再注册接收自定义数据回调函数,tuya_ble_reg_raw_scan_adv_cb
  • 调用 设备初始化 接口。
  • 等待框架收到数据后通知应用,应用解析数据进行相应处理。

框架会在 上述描述的时机 自动开启涂鸦遥控器绑定窗口。如果应用想在自定义的时机开启窗口,可自行再调用开启接口。

API 说明

注册涂鸦蓝牙遥控器接收数据回调

在调用 设备初始化 接口之前注册。只有注册了该回调函数,蓝牙扫描的功能才会打开。该接口也相当于蓝牙扫描功能的总开关

该回调函数会返回接收到的涂鸦蓝牙遥控器的指令数据。

//Callback function for advertisement scanning data processing
//type:0xFF old remote
//       0x16 new remote
typedef VOID (*TUYA_BLE_APP_SCAN_HANDLE)(UCHAR_T *data, UCHAR_T len, UCHAR_T type, UCHAR_T* mac);

/**
 * @brief Register callback function for advertisement scanning data processing
 *
 * @param[in] cb: callback function
 *
 * @note This API is used for registering callback function for advertisement scanning data processing
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */
OPERATE_RET tuya_ble_reg_app_scan_adv_cb(TUYA_BLE_APP_SCAN_HANDLE cb);

注册通知绑定/解绑结果回调

该绑定/解绑的通知主要针对的是涂鸦蓝牙遥控器。

//Callback function for validity check for bind or unbind operation
typedef OPERATE_RET(*BLE_SCAN_ADV_BIND_CHECK_CB)(TUYA_BLE_BIND_TYPE type, UCHAR_T *data, UCHAR_T len);
//Callback function for result notify for bind or unbind operation
typedef VOID_T(*BLE_SCAN_ADV_BIND_RSLT_NOTIFY_CB)(TUYA_BLE_BIND_TYPE type, int rslt);

typedef struct {
    BLE_SCAN_ADV_BIND_CHECK_CB       bind_check;
    BLE_SCAN_ADV_BIND_RSLT_NOTIFY_CB bind_notify;
} TUYA_BLE_SCAN_ADV_HANDLE_CBS;

/**
 * @brief Register callback function for advertisement scanning data processing
 *
 * @param[in] cbs: callback function
 *
 * @note This API is used for registering callback function for inform binding/unbinding state
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */
OPERATE_RET tuya_ble_reg_app_scan_adv_handle_cbs(TUYA_BLE_SCAN_ADV_HANDLE_CBS* cbs);

设置绑定窗口时间

如果设置的时间低于 30s,则当做 30s 处理。如果设置为 0,则会永久打开绑定窗口。

/**
 * @brief Set timeout window for binding remote controller
 *
 * @param[in] time_out: time out in second, 0: no window
 *
 * @note This API is used for setting timeout window for binding remote controller
 *
 * @return VOID
 */
VOID_T tuya_ble_set_bind_window(UINT_T time_out);

打开绑定窗口

框架会在上述描述的时机自动开启绑定窗口。如果应用想在自定义的时机开启窗口,可自行调用该接口。

/**
 * @brief Open window for binding remote controller
 *
 * @param[in] VOID
 *
 * @note This API is used for opening window for binding remote controller
 *
 * @return VOID
 */
VOID_T tuya_ble_open_bind_window(VOID_T);

注册接收自定义数据回调

即使您只支持自定义遥控器,注册自定义数据回调的同时也需要注册 涂鸦蓝牙遥控器接收数据回调

框架会通过回调函数,向应用透传扫描到的广播数据。开启蓝牙扫描的前提条件请 参考上文

/**
 * @brief Register callback function for advertisement scanning raw data processing
 *
 * @param[in] cb: callback function
 *
 * @note This API is used for registering callback function for advertisement scanning raw data processing
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */
OPERATE_RET tuya_ble_reg_raw_scan_adv_cb(TUYA_BLE_RAW_SCAN_HANDLE cb);

参考示例

关于示例代码,参考框架内自带的 TuyaOS 示例集合 中的 service_ble_remote

常见问题

注册了接收数据的回调函数,但是没有接收到数据?

参考上文描述的 开启蓝牙扫描的前提条件,检查是否有满足条件。

收不到自定义遥控器的数据?