本节以海滩、汽车两个小工程互相切换为例,介绍我们的 4G 屏如何通过 HTTP 下载并更新工程。按钮、定时任务、业务条件都可以发起更新。
核心功能
本例使用我们的 4G 屏 E070C1060(7 寸,1024×600),屏需支持云端工程下载。以下
http_download_*函数由 Demo 脚本提供,需随工程加载。
在 Demo 的“脚本”目录查看以下文件。业务配置、LW 地址和显示放在 main.lua,各模块保持独立。
| 文件 | 作用 |
|---|---|
main.lua |
加载模块、初始化、按钮命令和界面显示 |
stt_link.lua |
共用串口收发和 JSON 报文处理 |
stt_http_ota.lua |
发起工程下载、处理返回状态 |
stt_mqtt.lua |
普通 MQTT 连接、发布和接收 |
stt_tuya.lua |
TuyaLink 连接、属性上报和接收 |
stt_cellular.lua |
4G 信号和网络状态 |
stt_time.lua |
上电及每小时同步北京时间 |

图:main.lua 负责把各模块接入系统回调;业务辅助函数在文件下方,原有系统回调保留。
http_download_start("http://81.70.242.63/ota/4g-261112-r5/guide/B.sttpkg")
地址可以在运行时修改,不绑定页面号或按钮 ID:
local url = "http://81.70.242.63/ota/4g-261112-r5/guide/A.sttpkg"
local ok, reason = http_download_start(url)
if not ok then print("下载请求未发出", reason) end
返回 true 只表示请求已发出。下载进度由固件显示,校验、安装完成后才算更新成功;不要在每次周期回调中反复发起下载。
| 位置 | 作用 |
|---|---|
on_init |
初始化模块、串口和 1 秒定时器 |
on_timer |
调用各模块的 *_tick(),处理超时、心跳和校时 |
on_uart_recv |
将串口数据交给 stt_link_receive() |
receive_message |
将完整报文分发给对应模块 |
show_http_status |
将提示写到 LW7080 |
Demo 的 LW7000 是下载地址,LW70F0 写入 1 发起下载。地址按十六进制填写。界面地址初值在 main.lua / on_init 修改;脚本直接触发时,传入当次 URL 即可。
| 文件 | 下载 |
|---|---|
| 海滩工程 A,可编辑 | Cloud网络演示_A.zip |
| 汽车工程 B,可编辑 | Cloud网络演示_B.zip |
| 云端工程打包工具 | Cloud_OTA_Pack_Tool.zip |
解开 ZIP 后,用 ApusTAI 打开其中的 .apustai 工程。打开 A,点击“下载并切换到工程 B”,完成后显示汽车页;B 的按钮可下载回 A。普通包分别约 353 KiB、360 KiB,OTA 下载包未压缩。

图:电脑模拟器实际下载小包并切换页面;模拟器使用电脑网络,信号显示 --,我们的 4G 屏显示实际信号。
用 ApusTAI 编译工程,再将本次生成的 Debug\tmp 打成 .sttpkg。工具需 Python 3.9+、OpenSSL 1.1.1+,具体步骤见包内《使用说明》。
pack-project.cmd "D:\Demo\Debug\tmp" "D:\Demo\B.sttpkg" 2026111301 "D:\keys\ota-private.pem"
签名私钥需与屏固件公钥匹配,由固件维护方使用;公开工具不含私钥。打包成功后上传 .sttpkg 到新 URL,再调用 http_download_start(url)。超容量会报错,失败不覆盖已有包。
.apustai 用于编辑工程,.sttpkg 用于云端下载,不能仅修改文件后缀。
断网、断电后怎么办?
我们的 4G 屏保存未完成任务,恢复联网后重新下载。采用单区覆盖,不保留旧工程,也不是断点续传;中途断电可能暂时进入工程恢复页,仍可重新下载。
能使用 HTTPS 吗?
入口接受 HTTP/HTTPS,演示使用 HTTP。HTTPS 服务器需有效证书,并按实际服务器验证连接;FTP 暂不支持。
能直接放任意文件到服务器吗?
请上传配套工具生成的签名 .sttpkg 工程包。服务器需支持 Range,响应不要压缩;新版本使用新地址,不要替换正在下载的文件。发布前检查容量,屏端还会检查实际空间。