更新时间: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(高亮) | 网络指示灯 |
编译。参考 快速入门,导航到 tuyaos_demo_thread_light
或 tuyaos_demo_thread_door_sensor
或 tuyaos_demo_thread_switch
目录,右键选择 Build Project,等待编译完成。
烧录授权。创建产品,上传固件,生成 Token,然后烧录授权。也可以使用芯科烧录工具烧录固件,不授权使用,但只作为测试,无实际产品价值。
上电运行。如果是带 Log 的固件,烧录授权之后重新上电就会看到 Log。根据上述对应的脚位描述接线,在初始化的 Log 中可以找到产品的配网二维码,复制链接在浏览器中打开。
配网。Demo 默认为上电开启配网模式,会进行蓝牙广播,通过蓝牙广播扫描工具可以扫描到该广播,持续时间为 3 分钟。网络指示灯慢闪。以涂鸦智能 App 为例,打开网关界面,选择添加 Thread 设备,然后扫描上一步 Log 中看到的产品配网二维码,开始配网流程,等待添加设备完成。
Thread 产品配网的前提是必须有网关,使用涂鸦智能 App 需要有涂鸦的网关,使用苹果和谷歌 Home 也需要有相应的网关设备。
控制演示。
tuyaos_demo_thread_light
:通过短按 KEY0 控制 LED1 的交替亮灭,展示控制效果。
tuyaos_demo_thread_door_sensor
:由于没有门磁传感器,所以用按键代替门磁的触发条件,分别短按按键代表了门磁的关合状态,在 App 上有相应的状态变化。
tuyaos_demo_thread_switch
:该 Demo 配置了两路开关,通过短按 KEY0 控制 LED1 的交替亮灭展示 1 路开关的按下,通过短按 KEY1 控制 LED2 的交替亮灭展示 2 路开关的按下。
移除设备。移除之后,都需要重新配网才能使用设备。
关于 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);
//初始化灯,可配置灯序号、脚位、有效电平和初始化电平
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 间隔时间
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);
//调用该接口控制灯,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)
//向 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 用亮灭灯指示,用户需要根据自身动作进行配置
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 开发 版块进行沟通咨询。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈