Demo 介绍

更新时间:2023-12-06 10:36:01下载pdf

本文介绍如何使用 SDK 提供的 Demo,包括配网、控制、移除以及根据自身需求进行配置。

模组脚位

tuyaos_demo_thread_light

模组脚位 作用 描述
pin1 KEY0(低有效) 短按上报门磁状态,长按重置
pin2 KEY1(低有效) 短按上报门磁状态,长按重置
pin6 Log 串口 RX 波特率 921600
pin7 Log 串口 TX 波特率 921600
pin15 产测串口 TX 波特率 115200
pin16 产测串口 RX 波特率 115200
pin20 LED1(高亮) 演示控制指示灯
pin21 LED0(高亮) 网络指示灯

tuyaos_demo_thread_door_sensor

模组脚位 作用 描述(door_sensor_demo
pin1 KEY0(低有效) 短按上报门磁状态,长按重置
pin2 KEY1(低有效) 短按上报门磁状态,长按重置
pin6 Log 串口 RX 波特率 921600
pin7 Log 串口 TX 波特率 921600
pin15 产测串口 TX 波特率 115200
pin16 产测串口 RX 波特率 115200
pin20 LED1(高亮) 暂未使用
pin21 LED0(高亮) 网络指示灯

tuyaos_demo_thread_switch

模组脚位 作用 描述(switch_demo
pin1 KEY0(低有效) 短按上报门磁状态,长按重置
pin2 KEY1(低有效) 短按上报门磁状态,长按重置
pin6 Log 串口 RX 波特率 921600
pin7 Log 串口 TX 波特率 921600
pin15 产测串口 TX 波特率 115200
pin16 产测串口 RX 波特率 115200
pin19 LED2(高亮) 演示控制指示灯
pin20 LED1(高亮) 演示控制指示灯
pin21 LED0(高亮) 网络指示灯

Demo 使用流程

  1. 编译。参考 快速入门,导航到 tuyaos_demo_thread_lighttuyaos_demo_thread_door_sensortuyaos_demo_thread_switch 目录,右键选择 Build Project,等待编译完成。

  2. 烧录授权。创建产品,上传固件,生成 Token,然后烧录授权。也可以使用芯科烧录工具烧录固件,不授权使用,但只作为测试,无实际产品价值。

  3. 上电运行。如果是带 Log 的固件,烧录授权之后重新上电就会看到 Log。根据上述对应的脚位描述接线,在初始化的 Log 中可以找到产品的配网二维码,复制链接在浏览器中打开。

  4. 配网。Demo 默认为上电开启配网模式,会进行蓝牙广播,通过蓝牙广播扫描工具可以扫描到该广播,持续时间为 3 分钟。网络指示灯慢闪。以涂鸦智能 App 为例,打开网关界面,选择添加 Thread 设备,然后扫描上一步 Log 中看到的产品配网二维码,开始配网流程,等待添加设备完成。

    Thread 产品配网的前提是必须有网关,使用涂鸦智能 App 需要有涂鸦的网关,使用苹果和谷歌 Home 也需要有相应的网关设备。

  5. 控制演示。

    • tuyaos_demo_thread_light:通过短按 KEY0 控制 LED1 的交替亮灭,展示控制效果。

    • tuyaos_demo_thread_door_sensor:由于没有门磁传感器,所以用按键代替门磁的触发条件,分别短按按键代表了门磁的关合状态,在 App 上有相应的状态变化。

    • tuyaos_demo_thread_switch:该 Demo 配置了两路开关,通过短按 KEY0 控制 LED1 的交替亮灭展示 1 路开关的按下,通过短按 KEY1 控制 LED2 的交替亮灭展示 2 路开关的按下。

  6. 移除设备。移除之后,都需要重新配网才能使用设备。

    • 在手机 App 上移除设备。由于门磁是低功耗设备,需要在 App 上单击移除之后、设备按按键唤醒下,这样才能同步控制命令。状态为手机上设备消失,设备进入配网状态。
    • 长按按键 5s 本地移除,两个按键都行。状态为设备进入配网状态,手机 App 上设备离线。

Demo 通用配置

关于 Demo 配置信息,请参考 Demo 中的 app_callback.cpp

按键配置

//初始化按键,可配置按键序号、脚位、有效电平、长按超时和回调函数

ty_key_init(KEY1_INDEX,KEY1_GPIO_PIN_INDEX,KEY_LOW_LEVEL,KEY_LONG_PRESS_TIMEOUT,key_event_callback);
ty_key_init(KEY2_INDEX,KEY2_GPIO_PIN_INDEX,KEY_LOW_LEVEL,KEY_LONG_PRESS_TIMEOUT,key_event_callback);

LED 配置

//初始化灯,可配置灯序号、脚位、有效电平和初始化电平

ty_led_init(NETWORK_LED_INDEX,NETWORK_GPIO_PIN_INDEX,TUYA_GPIO_LEVEL_LOW,LED_HIGH_LEVEL);
ty_led_init(LIGHT1_LED_INDEX,LIGHT1_GPIO_PIN_INDEX,TUYA_GPIO_LEVEL_LOW,LED_HIGH_LEVEL);

配网配置

//初始化是否上电自动进入配网模式,以及配网窗口时间

network_data.power_on_start_pairing = TRUE;
network_data.network_pairing_timeout = 3 * 60;

节点类型配置

//初始化网络节点类型,需要搭配库使用,建议不要改动

network_data.node_type = ROUTER;
network_data.node_type = SLEEP_END_DEVICE;

数据模型配置

//设备类型以及设备应用数据模型配置
//建议不要改动,如需配置其他设备类型,可以根据 Matter cluster 规范,选择正确的 cluster 添加到 list 中

uint16_t ep_device_type[]={EXTENDED_COLOR_LIGHT_DEVICE_TYPE};

MATTER_CLUSTER_S ep_server_cluster_list[] = {
    CLUSTER_IDENTIFY_INFO,
    CLUSTER_GROUPS_INFO,
    CLUSTER_SCENES_INFO,
    CLUSTER_ON_OFF_INFO,
    CLUSTER_LEVEL_CONTROL_INFO,
    CLUSTER_DESCRIPTOR_INFO,
    CLUSTER_COLOR_CONTROL_INFO };

MATTER_ENDPOINT_S app_ep_info[] = {
    { LIGHT1_ENDPOINT, { get_array_len(ep_device_type), &ep_device_type[0] }, ep_server_cluster_list, get_array_len(ep_server_cluster_list), NULL, 0 },
};

离网配置

//移除配网

tal_matter_reset_factory_new();

低功耗配置

Poll 间隔配置

//活跃状态 poll 间隔时间
   network_data.sleep_end_device.active_interval =200;

//睡眠状态射频(RF)唤醒间隔时间
   network_data.sleep_end_device.idle_interval = 5000;

用户心跳配置

//应用心跳上报时间,上报电池电量(向网关指示应用层链路没有断开)

   tal_sw_timer_start(heartbeat_timer, 2*60*60000, TAL_TIMER_CYCLE);

灯 Demo 配置

灯状态控制接口

//调用该接口控制灯,ep 指示哪个灯,new_val 指示要控制的状态

VOID_T update_dev_attr_state(UINT8_T ep, UINT8_T new_val)
{
    OPERATE_RET ret = OPRT_OK;
    ret = tal_matter_attribute_write(ep, ZCL_ON_OFF_CLUSTER_ID, ZCL_ON_OFF_ATTRIBUTE_ID, (UINT8_T *) &new_val, ZCL_BOOLEAN_ATTRIBUTE_TYPE);
    if (ret != OPRT_OK)
    {
        TUYA_LOG("ERR: updating on/off %x", ret);
    }
}

灯状态回调接口

//该回调指示当前实际灯状态,根据状态值去实际改变灯的状态

VOID_T attribute_change_callback(UINT16_T endpoint,
                                 UINT32_T cluster_id,
                                 UINT32_T attr_id,
                                 UINT8_T attr_type,
                                 UINT16_T len,
                                 UINT8_T *raw_buffer)

门磁 Demo 配置

门磁状态控制接口

//向 App 上报门磁开合状态

   VOID_T dev_attr_state_report_boolean(BOOL_T new_val){
    UINT8_T value_t = new_val?0x01:0x00;
    tal_matter_attribute_write(1,ZCL_BOOLEAN_STATE_CLUSTER_ID,ZCL_STATE_VALUE_ATTRIBUTE_ID,
                                        (uint8_t *)&value_t,ZCL_BOOLEAN_ATTRIBUTE_TYPE);
}

电量上报接口

//向 App 上报电池电量

   VOID_T dev_attr_state_report_power(UINT8_T new_val){
   UINT8_T value_t = new_val;

   tal_matter_attribute_write(0,ZCL_POWER_SOURCE_CLUSTER_ID,ZCL_POWER_SOURCE_BAT_PERCENT_REMAINING_ATTRIBUTE_ID,
                                     (UINT8_T *)&value_t,ZCL_INT8U_ATTRIBUTE_TYPE);
}

开关 Demo 配置

开关触发接口

//该处指示开关触发时的动作,Demo 用亮灭灯指示,用户需要根据自身动作进行配置

VOID_T update_dev_attr_state(UINT8_T ep, UINT8_T new_val)
{
    OPERATE_RET ret = OPRT_OK;
    ret = tal_matter_attribute_write(ep, ZCL_ON_OFF_CLUSTER_ID, ZCL_ON_OFF_ATTRIBUTE_ID, (UINT8_T *) &new_val, ZCL_BOOLEAN_ATTRIBUTE_TYPE);
    if (ret != OPRT_OK)
    {
        TUYA_LOG("ERR: updating on/off %x", ret);
    }
}

开关触发指示

//检测开关状态属性,根据状态值回调改变灯的状态

VOID_T attribute_change_callback(UINT16_T endpoint,
                                 UINT32_T cluster_id,
                                 UINT32_T attr_id,
                                 UINT8_T attr_type,
                                 UINT16_T len,
                                 UINT8_T *raw_buffer)

支持与帮助

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