BLE SDK Demo 说明

更新时间:2024-06-25 10:00:13下载pdf

本文档于 2021 年 8 月 24 日停止更新。 如果您想查看更新的内容,请参考 《TuyaOS》蓝牙设备接入

涂鸦 BLE SDK 完整示例 Demo 由两部分组成:

  • 芯片原厂 SDK
  • 对应芯片型号的涂鸦 BLE SDK Demo Project

如果没有所选芯片的 Demo Project,您可以下载 Tuya BLE SDK 并根据 SDK 中的文档说明自行移植(下载地址:Tuya BLE SDK)。

Demo 下载

Tuya BLE SDK Demo Project 下载地址见下表所致。请参考各分支下的 README.md 文件完成工程导入。

芯片平台 型号 下载地址
Nordic nrf52832 tuya_ble_sdk_Demo_Project_nrf52832.git
Realtek RTL8762C tuya_ble_sdk_Demo_Project_rtl8762c.git
Telink TLSR825x tuya_ble_sdk_Demo_Project_tlsr8253.git
Silicon Labs BG21 正在规划中,敬请期待
Beken BK3431Q Tuya_ble_sdk_demo_project_bk3431q.git
Beken BK3432 tuya_ble_sdk_Demo_Project_bk3432.git
Cypress Psoc63 tuya_ble_sdk_Demo_Project_PSoC63.git

环境搭建

  • 软件环境

    IDE 根据芯片原厂 SDK 要求进行安装。

  • 硬件环境

    硬件平台可以选用芯片原厂对应的开发板,或者使用自研 PCBA,Tuya BLE SDK Demo Project 是基于芯片原厂开发板开发测试。

Demo 下载编译

  1. 根据芯片选型,下载芯片厂商提供的 SDK 或者直接联系芯片厂商获取 SDK。
  2. 下载涂鸦对应芯片的 Tuya BLE SDK Demo Project。
  3. 按照 Tuya BLE SDK Demo Project 中的 README.md 文件说明导入工程,编译固件,下载固件到硬件开发板或者其他硬件 PCBA。

创建智能产品

  1. 登录 开发者平台,若没有注册,可以在页面的下方按照提示步骤注册。
  2. 参考 选品类创建产品 创建一个智能产品。
  3. 联系涂鸦项目负责人申请测试授权码(uuid 和 auth key)。

修改Demo代码

文件说明

Demo Project 中包含的文件的功能说明如下表所示。

文件名 功能
tuya_ble_app_demo.c application 示例主文件,存放 SDK 初始化函数、消息处理函数等
tuya_ble_app_demo.h 头文件
tuya_ble_app_ota.c OTA 相关代码
tuya_ble_app_ota.h 头文件
custom_app_product_test.c 自定义产测项目相关实现
custom_app_product_test.h 头文件
custom_app_uart_common_handler.c UART 通用对接实现代码文件,不使用可忽略
custom_app_uart_common_handler.h 头文件
custom_tuya_ble_config.h application 配置文件

代码修改

  1. tuya_ble_app_demo.h 填入在涂鸦开发者平台创建的智能产品 PID。

    #define APP_PRODUCT_ID     "xxxxxxxx"
    

    将其中 xxxxxxxx 替换为PID。

  2. tuya_ble_app_demo.c 填入申请的授权码(uuid 和 auth key)。

    static const char auth_key_test[] = "yyyyyyyy";
    static const char device_id_test[] = "zzzzzzzz";
    

    其中 yyyyyyyy 替换为 auth key, zzzzzzzz 替换为 uuid.

编译运行Demo代码

修改好后编译代码,并下载固件至硬件运行(根据所选的芯片型号有可能还需要下载 stack 和 bootloader),观察 log 日志 ,并用第三方蓝牙调试 App(例如 IOS 下的 lightBlue)扫描确认设备有没有正常广播。

下图为 nrf52832 示例 Demo 的开机日志。

BLE SDK Demo 说明

配网添加设备

  1. 在 App Store 或者 Google Play 中下载 涂鸦智能 App。

  2. 注册账号并登录。

    BLE SDK Demo 说明
  3. 单击 添加设备 > 自动发现 > 开启蓝牙 > 开始搜索

  4. 搜索到设备后单击下一步开始注册配网,配网完成后默认进入设备面板。

    BLE SDK Demo 说明
  5. 单击每个 DP 进行数据收发测试。

OTA 测试

  1. 修改tuya_ble_app_demo.h里的固件版本号,例如原来是 1.0 可以改为 1.1。

    //固件版本
    #define TY_APP_VER_NUM  0x0101
    #define TY_APP_VER_STR	     "1.1" 	
    
  2. 编译固件生成 OTA 文件(bin 或者 HEX 根据芯片平台而定)。

  3. 在涂鸦开发者平台新建的产品页面配置固件升级。

    BLE SDK Demo 说明

  4. 单击固件升级进入固件升级配置页面,单击创建新固件上传新固件,填写正确的固件版本号。

  5. 单击测试白名单管理,输入要升级设备的设备 ID,设备 ID 查找如下图所示。

    BLE SDK Demo 说明 BLE SDK Demo 说明 BLE SDK Demo 说明

DP 点数据收发

设备应用 通过 ID 为 TUYA_BLE_CB_EVT_DP_WRITE 的 CALL BACK EVENT 接收处理 DP 数据,调用 tuya_ble_dp_data_report() 可以发送 DP 数据,例如:

static void tuya_cb_handler(tuya_ble_cb_evt_param_t* event)
{
    int16_t result = 0;
    switch (event->evt)
    {
    case TUYA_BLE_CB_EVT_CONNECTE_STATUS:
   TUYA_BLE_LOG_INFO("received tuya ble conncet status update event,current connect status = %d",event->connect_status);
   break;
    case TUYA_BLE_CB_EVT_DP_WRITE:
   dp_data_len = event->dp_write_data.data_len;
   memset(dp_data_array,0,sizeof(dp_data_array));
   memcpy(dp_data_array,event->dp_write_data.p_data,dp_data_len);   
   TUYA_BLE_LOG_HEXDUMP_DEBUG("received dp write data :",dp_data_array,dp_data_len);
   tuya_ble_dp_data_report(dp_data_array,dp_data_len);
   //custom_evt_1_send_test(dp_data_len);
   break;
    case TUYA_BLE_CB_EVT_DP_DATA_REPORT_RESPONSE:
   TUYA_BLE_LOG_INFO("received dp data report response result code =%d",event->dp_response_data.status);
   break;
    case TUYA_BLE_CB_EVT_DP_DATA_WTTH_TIME_REPORT_RESPONSE:
   TUYA_BLE_LOG_INFO("received dp data report response result code =%d",event->dp_response_data.status);
   break;
    case TUYA_BLE_CB_EVT_UNBOUND:
   
   TUYA_BLE_LOG_INFO("received unbound req");

   break;
    case TUYA_BLE_CB_EVT_ANOMALY_UNBOUND:
   
   TUYA_BLE_LOG_INFO("received anomaly unbound req");

   break;
    case TUYA_BLE_CB_EVT_DEVICE_RESET:
   
   TUYA_BLE_LOG_INFO("received device reset req");

   break;
    case TUYA_BLE_CB_EVT_DP_QUERY:
   TUYA_BLE_LOG_INFO("received TUYA_BLE_CB_EVT_DP_QUERY event");
   tuya_ble_dp_data_report(dp_data_array,dp_data_len);
   break;
    case TUYA_BLE_CB_EVT_OTA_DATA:
   tuya_ota_proc(event->ota_data.type,event->ota_data.p_data,event->ota_data.data_len);
   break;
    case TUYA_BLE_CB_EVT_NETWORK_INFO:
   TUYA_BLE_LOG_INFO("received net info : %s",event->network_data.p_data);
   tuya_ble_net_config_response(result);
   break;
    case TUYA_BLE_CB_EVT_WIFI_SSID:

   break;
    case TUYA_BLE_CB_EVT_TIME_STAMP:
   TUYA_BLE_LOG_INFO("received unix timestamp : %s ,time_zone : %d",event->timestamp_data.timestamp_string,event->timestamp_data.time_zone);
   break;
    case TUYA_BLE_CB_EVT_TIME_NORMAL:

   break;
    case TUYA_BLE_CB_EVT_DATA_PASSTHROUGH:
   TUYA_BLE_LOG_HEXDUMP_DEBUG("received ble passthrough data :",event->ble_passthrough_data.p_data,event->ble_passthrough_data.data_len);
   tuya_ble_data_passthrough(event->ble_passthrough_data.p_data,event->ble_passthrough_data.data_len);
   break;
    default:
   TUYA_BLE_LOG_WARNING("app_tuya_cb_queue msg: unknown event type 0x%04x",event->evt);
   break;
    }
}

说明:DP 数据格式以及 Tuya BLE SDK 提供的其他 API 请参考 Tuya BLE SDK 开发指导文档,文档位于 Tuya BLE SDK目录下的 doc 子目录下。强烈建议您在开发前阅读该指导文档,熟悉相关内容。