更新时间: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 配网模式,支持以下类型:
|
字段 | 必须 | 说明 |
---|---|---|
storage_path | 是 | 文件存储路径,需要可读写文件系统 |
cache_path | 是 | 临时目录,用于文件缓存,如 OTA 文件 |
dev_name | 是 | 串口名称 |
cts | 是 | 是否开启流控,涂鸦 NCP 均开启了流控 |
thread_mode | 是 |
|
按照如下步骤操作,在 Visual Studio Code 上编译产物:
展开开发包的 TuyaOS > apps > demo 目录,并单击右键,在菜单中选择 Build Project,然后输入版本号按下回车键,开始编译。
观察 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 中已经定义了 KEY1
与 KEY2
的功能,您可以参考 Demo 中功能的实现修改这两个按键的功能。
按键 | 说明 |
---|---|
RST | 电源重启按键,不可修改 |
KEY1 | 用户按键 1,在 Demo 中已经定义为语音唤醒按键 |
KEY2 | 用户按键 2,在 Demo 中已经定位为网关功能按键。短按开启 Zigbee 设备入网,长按重置网关 |
按键功能定义的代码位置为:
代码中的定义按键的宏为:
#define GW_RESET_KEY TUYA_GPIO_NUM_43
#define GW_VOICE_KEY TUYA_GPIO_NUM_42
使用涂鸦提供的 Demo 时,需要连接 P43 与 KEY1、P42 与 KEY2 之后才能正常使用。
网关开发板上有一颗 LED 灯珠,如下图所示。
灯光状态 | 说明 |
---|---|
橙色闪烁 | 网关配网状态 |
蓝色常亮 | 已配网状态 |
蓝色闪烁 | 开启 Zigbee 配网 |
红色呼吸灯 | 语音唤醒状态 |
在涂鸦提供的 Demo 中已经定义了 LED 的功能,您可以参考 Demo 中功能的实现修改这两个按键的功能。
LED 功能定义的代码位置为:
代码中定义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 之后才能正常使用。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈