蓝牙漫游

更新时间:2024-04-17 06:15:02下载pdf

本文介绍蓝牙漫游功能。

概述

概念介绍

蓝牙设备和涂鸦智能 App 之间的通信一般是基于 DP 数据通信,DP 数据通信可以满足蓝牙产品常见的数据通信。

但是在某些特定场景下,同一账户下分布在不同位置的多个子设备都想要上报数据到涂鸦 IoT 云,此时可以通过蓝牙漫游功能进行数据的上报。

例如:养老院/医院采集老人的心跳、血压等数据,学校采集学生的跳绳数据等场景下,被采集人是流动的,采集的数据是单向传输的,就很适合采用蓝牙漫游功能。

功能描述

蓝牙漫游功能指的是蓝牙子设备可以通过同一个家庭下的任意一个蓝牙网关上传数据到涂鸦 IoT 云,蓝牙漫游子设备和网关之间没有归属关系。只要在同一个家庭下,无需任何配置即可实现漫游功能。目前只支持上报数据,不支持下发数据。

蓝牙漫游

蓝牙漫游子设备的特点

  • 蓝牙漫游子设备只能通过 App 进行配网,不能通过网关进行配网,也不能通过网关进行连接。
  • 蓝牙漫游子设备和网关是同级关系,可以显示在多个网关的漫游设备列表中,支持多个网关同时上报数据,云端过滤数据。
  • 蓝牙漫游子设备只能通过广播上报数据,所以只能作为联动的条件。
  • 蓝牙漫游子设备要在蓝牙通信协议 V5.0 及以上版本才能支持。

非蓝牙漫游子设备

普通蓝牙子设备不支持蓝牙漫游功能,要和蓝牙网关进行通信,首先需要将子设备添加到网关下,成为网关的子设备。

组件说明

蓝牙漫游功能基于蓝牙 Beacon 功能,所以使用组件 tal_ble_beacon

蓝牙漫游子设备和普通蓝牙子设备的数据通信链路不同,所以蓝牙漫游功能使用独立的 Demo 进行演示。Demo 名称为:tuyaos_demo_roaming

数据结构

TAL_BLE_BEACON_CB

Beacon 数据发送完成回调接口,每一次调用 tal_ble_beacon_dp_data_send 后会执行 Beacon 数据发送,当发送完成会进入该回调函数。

typedef void (* TAL_BLE_BEACON_CB)(void *arg);

arg:默认参数,目前为空。

roaming_param_t

蓝牙漫游演示例程中用到的结构体,您可以根据实际情况选择是否使用。

typedef struct {
    UINT32_T adv_interval;
    UINT32_T adv_duration;
} roaming_param_t;
  • adv_interval:广播间隔,单位:ms。
  • adv_duration:广播周期,单位:ms。

接口说明

蓝牙 Beacon 宏配置

#define TAL_BLE_BEACON_INCLUDE_DP_DATA         1
#define TAL_BLE_BEACON_ROAMING_FLAG            1
#define TUYA_BLE_BEACON_KEY_ENABLE             1

参数说明

参数 说明
TAL_BLE_BEACON_INCLUDE_DP_DATA 是否允许广播中携带 DP 数据
TAL_BLE_BEACON_ROAMING_FLAG 是否开启漫游功能
TUYA_BLE_BEACON_KEY_ENABLE 是否开启获取 Beacon Key 的功能

蓝牙 Beacon 初始化

接口说明

蓝牙漫游功能基于蓝牙 Beacon 功能,所以蓝牙 Beacon 初始化即为蓝牙漫游初始化。

void tal_ble_beacon_init(uint16_t default_adv_interval, TAL_BLE_BEACON_CB cb);

参数说明

参数 说明
default_adv_interval 系统中默认的广播间隔。使用漫游功能上报数据时会改变广播间隔,该值用于恢复系统默认的广播间隔。
cb 可为空,详见上文中对 TAL_BLE_BEACON_CB 的解析。

蓝牙 Beacon 数据上报

蓝牙漫游功能基于蓝牙 Beacon 功能,所以蓝牙 Beacon 数据上报即为蓝牙漫游数据上报。

接口说明

uint32_t tal_ble_beacon_dp_data_send(uint32_t sn, uint8_t encrypt_mode, uint16_t adv_interval, uint16_t adv_duration, uint8_t *p_dp_data, uint32_t dp_data_len);

参数说明

参数 说明
sn 4 字节发包序号。设备重新配网后,sn 复位为 0。每次发送漫游数据会累加 1,每隔 256 次存储一次 sn。设备重启后,读取存储的 sn,然后累加 256 作为本次重启后的新 sn
encrypt_mode 0:不加密,1:Login key 加密(适用于漫游功能),2:Beacon key 加密(适用于一般的 Beacon 通信)
adv_interval 蓝牙广播间隔,单位:ms
adv_duration 蓝牙广播周期,单位:ms
p_dp_data 蓝牙 Beacon 数据,DP 数据格式,详情参考 DP 数据通信
dp_data_len 蓝牙 Beacon 数据长度

使用方法

通信流程

蓝牙漫游

代码开发

app_config.h 中启用蓝牙漫游功能。

#define TAL_BLE_BEACON_INCLUDE_DP_DATA         1
#define TAL_BLE_BEACON_ROAMING_FLAG            1
#define TUYA_BLE_BEACON_KEY_ENABLE             1

tuya_sdk_callback.c 中添加如下代码即可实现基本功能,可调用 tal_ble_beacon_dp_data_send 接口进行漫游数据上报。详见 Demo:tuyaos_demo_roaming

VOID_T tal_ble_beacon_cb(VOID_T *arg)
{
    switch (g_dp_report_count) {
        …………

        default: {
        } break;
    }
}

OPERATE_RET tuya_init_last(VOID_T)
{
    …………

    app_roaming_init();
    tal_ble_beacon_init(TY_ADV_INTERVAL, tal_ble_beacon_cb);

    return OPRT_OK;
}

功能测试

测试 Case

TEST_CID_ROAMING_DP_REPORT

前置条件

  • 您已经下载了涂鸦智能 App。
  • 请确认您的设备已完成配网。
  • 请确认您的家庭下已经存在支持漫游功能的网关。

操作步骤

配网完成后,可以关闭手机蓝牙。关闭蓝牙是为了方便测试,防止手机误连接设备,影响漫游数据上报,实际场景中一般手机不放在身边。此时设备可以发出 Beacon。

通过上位机(模拟实际产品)和蓝牙网关进行数据交互。

  1. 上报漫游数据,可以使用不加密和加密两种形式,可以设置广播持续的时间(即漫游数据持续发出的时间,广播间隔为 20ms),也可以修改上报的漫游数据内容(DP 格式,支持多个 DP),例如将红框中的 09 改成 08,也可以上报其他 DP。
    图中 0x67 表示 dp_id = 0x67 = 103,0x24 的高 4 位表示 dp_type = 2,0x24 的低 4 位表示 dp_len = 4,0x00000009 表示 dp_value = 9。

    蓝牙漫游
  2. 在设备没有和手机/网关连接的情况下,上报漫游数据。

    蓝牙漫游

    上位机使用的相关问题,请访问 Logic 上位机使用指南

支持与帮助

在开发过程遇到问题,您可以登录 TuyaOS 开发者论坛 TuyaOS-蓝牙设备开发 版块进行沟通咨询。

咨询前建议首先查阅 官方资料 或参考已有帖子,并认真阅读 发帖规范