蓝牙子设备接入

更新时间:2023-10-16 06:56:41下载pdf

蓝牙子设备接入旨在降低蓝牙网关的开发门槛,涂鸦提供软硬一体化方案,硬件上使用涂鸦蓝牙模组,软件上开启蓝牙功能,可以零代码实现蓝牙网关开发,能够接入涂鸦生态 Bluetooth LE 和 Bluetooth Mesh 子设备。

本文档将介绍如何使用 TuyaOS 网关开发框架提供的蓝牙网关功能。

背景信息

开发一款蓝牙网关门槛较高,并且开发周期长,为了降低开发门槛,涂鸦提供了软硬一体化方案,即使没有蓝牙背景知识也能开发蓝牙网关产品。

硬件上通过串口连接涂鸦蓝牙模组,软件上开启蓝牙功能,该产品就具备了蓝牙网关能力,支持接入涂鸦生态子设备。

开发向导

本小节将介绍在 TuyaOS 网关开发框架如何开启蓝牙网关功能,您无需关心具体的实现方式,通过调用接口就能实现蓝牙网关功能。

开启蓝牙功能主要涉及两个接口:蓝牙服务初始化和蓝牙服务启动,参数都是相同的 JSON 数据,主要是配置信息。

配置说明

JSON 数据字段说明如下:

字段 描述
dev_name 指定串口设备号。
enable_hb 是否使能心跳管理:
  • 1:打开
  • 0:关闭
开启心跳管理,则网关定期读取子设备属性,子设备上报数据刷新心跳。
scan_timeout Bluetooth LE 模式的扫描超时时间,单位是秒。
mode 设置蓝牙工作模式,工作模式的定义为 TAL_BLE_ROLE_E。通过按位与操作,设置多模式共存。
推荐的值为:(TAL_BLE_ROLE_CENTRAL | TAL_MESH_ROLE_ADV_PROVISIONER)
注意:v3.7.0 及以下版本使用该字段,v3.7.0 以上版本用 subdev_type 字段代替。
subdev_type 设置蓝牙支持的子设备类型。通过按位与操作,设置多类型。
子设备类型定义如下:
  • BLE_SUBDEV_TP_BLE_SINGLE:0x0001
  • BLE_SUBDEV_TP_BLE_MESH:0x0002
  • BLE_SUBDEV_TP_BLE_BEACON_V1:0x0004
  • BLE_SUBDEV_TP_BLE_BEACON_V2:0x0008
  • BLE_SUBDEV_TP_BLE_ROAM:0x0010

使用示例

// ...
#include "tuya_bt_api.h"
#include "tal_bluetooth_def.h"

int main(int argc, char **argv)
{
	ty_cJSON *app_cfg = ty_cJSON_CreateObject();
    if (app_cfg == NULL) {
        return OPRT_CJSON_GET_ERR;
    }
    ty_cJSON_AddStringToObject(app_cfg, "storage_path", "./");
    ty_cJSON_AddStringToObject(app_cfg, "cache_path", "/tmp/");
    
    // 设置存储路径
    TUYA_CALL_ERR_RETURN(tuya_set_config(app_cfg));

    ty_cJSON *bt_cfg = ty_cJSON_CreateObject();
    if (bt_cfg == NULL) {
        return OPRT_CJSON_GET_ERR;
    }
    ty_cJSON_AddStringToObject(bt_cfg, "dev_name", "/dev/ttyS2");
    ty_cJSON_AddNumberToObject(bt_cfg, "enable_hb", 1);
    ty_cJSON_AddNumberToObject(bt_cfg, "scan_timeout", 60);
    // 老版本设置蓝牙工作模式
    ty_cJSON_AddNumberToObject(bt_cfg, "mode", (TAL_BLE_ROLE_CENTRAL | TAL_MESH_ROLE_ADV_PROVISIONER));
    // 新版本设置蓝牙支持的子设备类型
    // ty_cJSON_AddNumberToObject(bt_cfg, "subdev_type", (0x0001 | 0x0002)); // Blutooth LE & Bluetooth Mesh

    // 初始化蓝牙服务
    TUYA_CALL_ERR_RETURN(tuya_bt_svc_init(bt_cfg));

	// 启动蓝牙服务
    TUYA_CALL_ERR_RETURN(tuya_bt_svc_start(bt_cfg));

    // ...

    return 0;
}