蓝牙配网

更新时间:2023-12-19 08:36:57下载pdf

概述

功能描述

针对 Wi-Fi + 蓝牙双模设备,配网数据还可以通过蓝牙连接传输至设备。

设备进入配网状态后发送蓝牙广播,等待被 App 扫描发现。然后 App 可通过蓝牙主动连接设备,下发配网数据,从而完成设备的配网工作。

蓝牙配网流程

设备客户端路由器设备进入待配网模式设备定时发蓝牙广播包用户打开 App扫描广播请求扫描应答解析广播包信息用户点击连接设备发起蓝牙连接请求连接成功进行密钥交互返回设备密钥发送加密后的 SSID/Password/Token设备返回解密成功连接路由连接成功后续连接云端进行激活绑定设备客户端路由器

初始化流程

蓝牙连接初始化
蓝牙服务初始化
蓝牙协议栈初始化
打开蓝牙广播
蓝牙数据通道始化

开发指导

运行环境

确保在 tuya_iot_config.h 配置头文件中,蓝牙服务及蓝牙配网功能是打开的,涉及的宏开关有:

/* 蓝牙服务开关 */
#define ENABLE_BT_SERVICE 1
/* 蓝牙配网开关 */
#define ENABLE_BT_NETCFG 1

关联组件

  • svc_bt

使用方法

设备初始化 中会自动启动蓝牙配网初始化,您无需进行调用。

API 说明

设置蓝牙设备名称

如果您有特殊需求想要更改蓝牙设备名称,可调用此接口。在涂鸦蓝牙协议 3.X 版本,蓝牙设备名称默认是 TY,在 4.X 版本,默认名称是 TUYA__。 想确认涂鸦蓝牙协议版本,可查看 tuya_iot_config.h 配置头文件中蓝牙版本配置宏 TUYA_BLE_VER

设置蓝牙设备名称,有长度限制,涂鸦蓝牙协议 3.X 版本是 2 个字符,4.X 版本是 5 个字符。
该 API 需要在设备初始化之前调用。

/**
 * @brief Set name for bluetooth device.
 *
 * @param[in] dev_name: device name
 *
 * @note This API is used for setting name for bluetooth device. this API should be called before bluetooth initialized.
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */
OPERATE_RET tuya_set_bt_device_name(CHAR_T* dev_name);

设置蓝牙服务开关

该 API 用于蓝牙服务开关,当关闭时,蓝牙协议栈关闭,不能使用蓝牙功能。当打开时,打开协议栈,可以使用蓝牙功能,默认是打开的。

该 API 内部做了可靠性设计,重复打开、重复关闭都是无效操作。

/**
 * @brief Set enable switch for bluetooth service
 *
 * @param[in] switch: enable switch: TRUE-open, FALSE-close
 *
 * @note This API is used for setting enable switch for bluetooth service, it should be called before sdk initialization.
 *
 * @return VOID
 */
VOID_T tuya_ble_set_serv_switch(BOOL_T swith);

获取蓝牙服务开关

该 API 用于获取蓝牙服务是否打开的状态。

/**
 * @brief Get status of bluetooth service
 *
 * @param VOID
 *
 * @note This API is used to get status of the bluetooth service.
 *
 * @return status of the bluetooth service
 */
TUYA_BT_SERV_STAT tuya_ble_get_serv_stat(VOID_T);

重启蓝牙广播

该 API 用于重启蓝牙广播。当蓝牙广播参数有更新时,可调用此接口更新广播包,一般应用开发无需关心。

/**
 * @brief Resend the ble adv data to hal and start ble adv
 *
 * @param
 *
 * @note
 *
 * @return VOID
 */
VOID_T tuya_ble_restart_adv(VOID_T);

设置蓝牙启动属性

该接口需要在系统服务初始化之前调用。

该 API 用于设置蓝牙启动属性。没有调用此接口,蓝牙默认启动所有能力;调用此接口后,只支持对应的能力。

  • 如果设置了 TUYA_BLE_ABILITY_NONE,设备启动后,蓝牙服务不会开启。

  • 如果设置了 TUYA_BLE_ABILITY_NETCFG,设备启动后,只支持蓝牙配网功能,配网后蓝牙服务关闭。

    typedef BYTE_T TUYA_BLE_ABILITY_T;
    #define TUYA_BLE_ABILITY_NONE      0x0
    #define TUYA_BLE_ABILITY_NETCFG    0x1
    #define TUYA_BLE_ABILITY_ALL       0xFF
    /**
    	* @brief Set abilitiy attribute of bluetooth
    	*
    	* @param attr
    	*
    	* @note  This API is used to set abilitiy attribute of bluetooth.
    	*
    	* @return VOID
    */
    VOID_T tuya_ble_set_startup_attr(TUYA_BLE_ABILITY_T attr);
    

FAQ

为了降功耗,使用蓝牙配网后,可以关闭蓝牙服务吗?

可以。

有以下两种方式可以实现此功能:

  • 方式一:在框架初始化之前,通过 tuya_ble_set_startup_attr 接口设置设备只有蓝牙配网功能。
  • 方式二:配网成功后,调用 tuya_ble_set_serv_switch 接口并设置为 FALSE 关闭蓝牙服务。

蓝牙配网发现不了设备是什么原因?

首先确认设备有没有发广播出来,可以通过 NRF 抓包工具证实。如果没有发广播出来,涂鸦 智能生活 App 就无法发现设备。

如果有发广播,再确认设备是否已配网,已配网设备只有重置后才可以重新配网。