蓝牙网关开发指南

更新时间:2022-11-24 09:20:25下载pdf

概述

综合 SDK 支持搭配涂鸦网关蓝牙模组使用,使用涂鸦网关蓝牙模组可以直接接入涂鸦生态下的蓝牙 MESH & BLE 子设备,并且支持蓝牙配网。

本文档将介绍如何集成涂鸦蓝牙模组,开发蓝牙网关。

开发向导

集成涂鸦蓝牙业务包含硬件和软件两方面,硬件上主控与涂鸦蓝牙模组通过串口连接,要求支持硬件流控,软件上调用蓝牙业务的初始化和启动接口。

SDK 将通过串口与蓝牙模组进行通信,蓝牙配网适配和设备管理等操作全部由 SDK 实现,应用无需处理任何逻辑。

蓝牙初始化接口的入参主要是配置信息,为 JSON 数据,字段说明:

字段 描述
enable_hb 是否使能心跳管理。若使能心跳管理,网关在心跳超时主动读取子设备属性。
scan_timeout BLE 扫描超时时间,单位是秒
mode 配网模式,支持按位与操作配置多模式。例如,即支持 MESH PB-ADV 和 BLE Master,则 mode = (MESH_ADV | BLE_MASTER) = 0x05。模式定义:
MESH_ADV = 0x01,
MESH_GATT = 0x02,
BLE_MASTER = 0x04,
BLE_SLAVE = 0x08

我们在 快速入门指南 的实例工程基础上实现蓝牙网关功能。

首先,修改 Makefile 文件,添加链接蓝牙库。

 LINKFLAGS  = -L$(ROOT_DIR)/sdk/lib \
              -lty_iot_sdk \
              -lty_module_gw_base \
+             -lty_module_bluetooth \
              -lpthread -lm

接着,修改代码,添加蓝牙业务初始化和启动。值得注意的是,必须在调用 SDK 其他接口之前配置蓝牙模组的串口设备号

// ...
#if defined(TY_BT_MOD) && (TY_BT_MOD == 1)
#include "tuya_bt_api.h"
#include "tuya_os_adapt_bt.h"
#endif
// ...

int main(int argc, char **argv)
{
#if defined(TY_BT_MOD) && (TY_BT_MOD == 1)
    // 指定蓝牙模组串口设备号,必须要在最前面调用
    op_ret = tuya_bt_set_devname("/dev/ttyS1");
    if (op_ret != OPRT_OK) {
        PR_ERR("tuya_bt_set_devname err: %d", op_ret);
        return op_ret;
    }

    tuya_os_adapt_reg_bt_intf();
#endif

    tuya_os_intf_init();

    // ...

    ty_cJSON *bt_cfg = ty_cJSON_CreateObject();
    if (bt_cfg == NULL) {
        return OPRT_CJSON_GET_ERR;
    }
    ty_cJSON_AddNumberToObject(bt_cfg, "enable_hb", 1);
    ty_cJSON_AddNumberToObject(bt_cfg, "scan_timeout", 60);
    ty_cJSON_AddNumberToObject(bt_cfg, "mode", 5);

    /* initiate application service, more service in here */
    TUYA_CALL_ERR_RETURN(tuya_bt_svc_init(bt_cfg));
    TUYA_CALL_ERR_RETURN(tuya_user_svc_init(&gw_cbs));

    // ...

    /* start application service, more service in here */
    TUYA_CALL_ERR_RETURN(tuya_bt_svc_start(bt_cfg));
    TUYA_CALL_ERR_RETURN(tuya_user_svc_start(NULL));

    // ...

    return 0;
}