快速开始

更新时间:2025-05-28 06:44:57下载pdf

本文介绍开发包中的重要文件,便于您更好地理解代码的组织结构。

目录结构

开发包整体目录结构如下:

├── software
│   ├── packages				# SDK 压缩包
│   ├── SDKInformation.json			# SDK 信息文件
│   └── TuyaOS					# SDK 开发包目录
│       ├── apps				# 应用示例代码目录,您可以根据需求修改
│       ├── build
│       ├── build_app.sh			# 编译脚本
│       ├── CHANGELOG.md
│       ├── include				# SDK 头文件
│       ├── libs				# SDK 库文件,您可以按需链接
│       ├── LICENSE				# Tuya MIT License
│       ├── Makefile
│       ├── output				# 产物输出目录
│       ├── prepare_app.sh
│       ├── README.md
│       ├── scripts
│       ├── tmp
│       └── vendor				# 工具链,编译时会自动把工具链下载到该目录下
├── T5
│   ├── hardware				# 硬件手册,存放涂鸦自研硬件资料
│   │   └── T5
│   └── pc
│       └── tools				# 工具类目录,存放各种开发相关工具
└── tuya.json

TuyaOS > apps > T5AI_gateway-T5_zg_gw 目录结构:

├── application_components		# 自定义组件源码
├── application_drivers
├── bak-build.sh			
├── build							
├── build.conf
├── default_gpio_config.json
├── fs.bin				# 文件系统,暂时存储了默认音频,可自己制作
├── include				# 源码头文件
├── libs
├── local.mk
├── output				# 产物输出目录
├── package.json
├── README.md
└── src				        # 应用源码

配置

RTOS 网关需要在初始化时生成一份 JSON 配置,如下所示:

STATIC OPERATE_RET __gen_config(ty_cJSON **cfg)
{
    ty_cJSON *root = NULL, *bt = NULL, *tuya = NULL;

    if (cfg == NULL) {
        PR_ERR("param is null");
        return OPRT_INVALID_PARM;
    }
    
    bt = ty_cJSON_CreateObject();
    ty_cJSON_AddNumberToObject(bt, "enable_hb", 1);
    ty_cJSON_AddNumberToObject(bt, "scan_timeout", 5);
    ty_cJSON_AddNumberToObject(bt, "subdev_type", 0xF);

    tuya = ty_cJSON_CreateObject();
    ty_cJSON_AddItemToObject(tuya, "bt", bt);

    root = ty_cJSON_CreateObject();
    ty_cJSON_AddStringToObject(root, "pid", PRODUCT_KEY);
    ty_cJSON_AddStringToObject(root, "uuid", UUID);
    ty_cJSON_AddStringToObject(root, "authkey", AUTHKEY);
    ty_cJSON_AddItemToObject(root, "tuya", tuya);

    *cfg = root;

    return OPRT_OK;
}

配置字段详细解析如下。基本格式为:

{
    "pid": <xxx>,
    "uuid": <...>,
    "authkey_key": <...>,
    "ap_ssid": <... optional>,
    "ap_password": <... optional>,
    "log_level": <level>,
    "storage_path": <...>,
    "start_mode": <xxxx>,
    "tuya": {
        "bt": {
                "enable_hb": <xxx, number>,
                "scan_timeout": <xxx, number>,
                "subdev_type": <xxx, number>,
        },
    },
    "user": {
        [ { "tp": <DEV_ATTACH_MOD_X, number>, "sw_ver": <version, string> }, ... ]
    },
}

公共配置

字段 必须 说明
PID SDK 运行在非 OEM 模式,PID 字段指定此设备 PID
uuid 唯一识别码,优先从 NVRAM 读取,不存在时使用此处。关于 NVRAM 操作,参考 全量烧录
authkey_key 授权识别码,优先从 NVRAM 读取,不存在时使用此处。关于 NVRAM 操作,参考 全量烧录
ap_ssid 热点模式配网 SSID,未指定则使用默认 SmartLife-<WLAN MAC 后四位>
ap_password 热点模式配网密码,默认为空
log_level 日志等级,默认为 Debug 等级 4
storage_path 文件存储路径,需要可读写文件系统
start_mode Wi-Fi 配网模式,支持以下类型:
  • 0WF_START_AP_ONLY 仅支持 热点模式 配网
  • 1WF_START_SMART_ONLY 仅支持 快连模式 配网
  • 2WF_START_AP_FIRST 支持 热点模式 + 快连模式 配网,热点模式 配网优先
  • 3WF_START_SMART_FIRST 支持 热点模式 + 快连模式 配网,快连模式 配网优先
  • 4WF_START_SMART_AP_CONCURRENT 热点模式 和 快连模式 共存模式

Zigbee 协议配置

字段 必须 说明
storage_path 文件存储路径,需要可读写文件系统
cache_path 临时目录,用于文件缓存,如 OTA 文件
dev_name 串口名称
cts 是否开启流控,涂鸦 NCP 均开启了流控
thread_mode
  • 1:线程模式运行 Zigbee host 程序
  • 0:进程模式运行 Zigbee host 程序

编译

按照如下步骤操作,在 Visual Studio Code 上编译产物:

  1. 展开开发包的 TuyaOS > apps > demo 目录,并单击右键,在菜单中选择 Build Project,然后输入版本号按下回车键,开始编译。

    快速开始

    快速开始

  2. 观察 Visual Studio Code 下方的 终端,会看到编译的输出打印。直到看到如下图所示的打印时,表示编译成功,生成的固件位于 output 目录下。
    快速开始

固件说明:

  • T5AI_gateway-T5_zg_gw_QIO_<版本>.bin:全量固件,用于整片 Flash 烧录。
  • T5AI_gateway-T5_zg_gw_UG_<版本>.bin:OTA 固件,用于固件升级,可以上传到涂鸦开发者平台进行远程 OTA 升级。

运行

前置工作完成后,接下来可以运行示例程序查看效果。

可以把 QIO 固件烧录到 T5 网关开发板上,详见 固件烧录 章节。烧录完成后,断电重启设备。

T5-AI 网关支持蓝牙及 Wi-Fi 配网,可以用 涂鸦 App 来激活网关。关于 App 的详细使用教程,请参考 使用指南

上传固件

详细步骤,请参考 固件升级

串口日志

使用 USB 转串口工具连接开发板,如下图所示。

快速开始

日志相关引脚

引脚 说明
TX1/RX1 日志输出
GND 地线

波特率使用:460800

按键说明

网关开发板上一共三个按键。

快速开始

在涂鸦提供的 Demo 中已经定义了 KEY1KEY2 的功能,您可以参考 Demo 中功能的实现修改这两个按键的功能。

按键 说明
RST 电源重启按键,不可修改
KEY1 用户按键 1,在 Demo 中已经定义为语音唤醒按键
KEY2 用户按键 2,在 Demo 中已经定位为网关功能按键。短按开启 Zigbee 设备入网,长按重置网关

按键功能定义的代码位置为:

  • TuyaOS > apps > T5AI_gateway-T5_zg_gw > include > user_key.h
  • TuyaOS > apps > T5AI_gateway-T5_zg_gw > src > user_key.c

代码中的定义按键的宏为:

#define GW_RESET_KEY  TUYA_GPIO_NUM_43
#define GW_VOICE_KEY  TUYA_GPIO_NUM_42

使用涂鸦提供的 Demo 时,需要连接 P43 与 KEY1、P42 与 KEY2 之后才能正常使用。

LED 说明

网关开发板上有一颗 LED 灯珠,如下图所示。

快速开始

灯光状态 说明
橙色闪烁 网关配网状态
蓝色常亮 已配网状态
蓝色闪烁 开启 Zigbee 配网
红色呼吸灯 语音唤醒状态

在涂鸦提供的 Demo 中已经定义了 LED 的功能,您可以参考 Demo 中功能的实现修改这两个按键的功能。

LED 功能定义的代码位置为:

  • TuyaOS > apps > T5AI_gateway-T5_zg_gw > include > user_led.h
  • TuyaOS > apps > T5AI_gateway-T5_zg_gw > src > user_led.c

代码中定义LED的宏为:

#define NET_BLED_PORT_PIN  TUYA_IO_PIN_32   
#define NET_RLED_PORT_PIN  TUYA_IO_PIN_34
#define NET_GLED_PORT_PIN  TUYA_IO_PIN_36

使用涂鸦提供的 Demo 时,需要连接 P32 与 BLUE、P34 与 RED、P36 与 GREEN 之后才能正常使用。