更新时间:2024-07-30 03:09:57下载pdf
本文介绍蓝牙漫游功能。
蓝牙设备和涂鸦智能 App 之间的通信一般是基于 DP 数据通信,DP 数据通信可以满足蓝牙产品常见的数据通信。
但是在某些特定场景下,同一账户下分布在不同位置的多个子设备都想要上报数据到涂鸦 IoT 云,此时可以通过蓝牙漫游功能进行数据的上报。
例如:养老院/医院采集老人的心跳、血压等数据,学校采集学生的跳绳数据等场景下,被采集人是流动的,采集的数据是单向传输的,就很适合采用蓝牙漫游功能。
蓝牙漫游功能指的是蓝牙子设备可以通过同一个家庭下的任意一个蓝牙网关上传数据到涂鸦 IoT 云,蓝牙漫游子设备和网关之间没有归属关系。只要在同一个家庭下,无需任何配置即可实现漫游功能。目前只支持上报数据,不支持下发数据。
蓝牙漫游子设备的特点:
非蓝牙漫游子设备:
普通蓝牙子设备不支持蓝牙漫游功能,要和蓝牙网关进行通信,首先需要将子设备添加到网关下,成为网关的子设备。
蓝牙漫游功能基于蓝牙 Beacon 功能,所以使用组件 tal_ble_beacon
。
蓝牙漫游子设备和普通蓝牙子设备的数据通信链路不同,所以蓝牙漫游功能使用独立的 Demo 进行演示。Demo 名称为:tuyaos_demo_roaming
。
Beacon 数据发送完成回调接口,每一次调用 tal_ble_beacon_dp_data_send
后会执行 Beacon 数据发送,当发送完成会进入该回调函数。
typedef void (* TAL_BLE_BEACON_CB)(void *arg);
arg
:默认参数,目前为空。
蓝牙漫游演示例程中用到的结构体,您可以根据实际情况选择是否使用。
typedef struct {
UINT32_T adv_interval;
UINT32_T adv_duration;
} roaming_param_t;
adv_interval
:广播间隔,单位:ms。adv_duration
:广播周期,单位:ms。#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 初始化即为蓝牙漫游初始化。
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 数据上报即为蓝牙漫游数据上报。
接口说明
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;
}
TEST_CID_ROAMING_DP_REPORT
配网完成后,可以关闭手机蓝牙。关闭蓝牙是为了方便测试,防止手机误连接设备,影响漫游数据上报,实际场景中一般手机不放在身边。此时设备可以发出 Beacon。
通过上位机(模拟实际产品)和蓝牙网关进行数据交互。
上报漫游数据,可以使用不加密和加密两种形式,可以设置广播持续的时间(即漫游数据持续发出的时间,广播间隔为 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。
在设备没有和手机/网关连接的情况下,上报漫游数据。
上位机使用的相关问题,请访问 Logic 上位机使用指南。
在开发过程遇到问题,您可以登录 TuyaOS 开发者论坛 TuyaOS-蓝牙设备开发 版块进行沟通咨询。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈