Browse Source

add: 新增Air8000 fota_wifi demo示例

tuoyiheng 4 months ago
parent
commit
b178bdcc93

+ 39 - 0
module/Air8000/demo/fota_wifi/check_wifi.lua

@@ -0,0 +1,39 @@
+--[[
+@module  check_wifi
+@summary 远程升级wifi固件模块
+@version 1.1
+@date    2025.11.5
+@author  拓毅恒
+@usage
+检查WiFi版本并自动升级
+功能:检查当前Air8000模组的WiFi固件是否为最新版本,若不是则自动启动升级(需确保模组已经正常联网)。
+注意:升级完毕后最好取消调用,防止后期版本升级过高导致程序使用不稳定。
+
+本文件没有对外接口,直接在main.lua中require "check_wifi"就可以加载运行。
+]]
+
+local exfotawifi = require("exfotawifi")
+
+local function fota_wifi_task()
+    local result = exfotawifi.request()
+    if result then
+        log.info("exfotawifi", "升级任务执行成功")
+    else
+        log.info("exfotawifi", "升级任务执行失败")
+    end
+
+    -- 注意:固件版本需≥V2017版本才有`AIRLINK_SFOTA_DONE`事件
+    -- 如下操作,在升级完毕后会重启模组,将版本更新到最新
+    -- 添加5分钟超时机制,如果超时则打印信息并退出
+    local wait_result = sys.waitUntil("AIRLINK_SFOTA_DONE", 300000)
+    if wait_result then
+        log.info("fotawifi","WIFI升级完毕,开始重启")
+        sys.wait(100)
+        pm.reboot()
+    else
+        log.info("fotawifi","WIFI升级超时")
+    end
+end
+
+-- 启动wifi自动升级任务
+sys.taskInit(fota_wifi_task)

+ 67 - 0
module/Air8000/demo/fota_wifi/main.lua

@@ -0,0 +1,67 @@
+--[[
+@module  main
+@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
+@version 1.0
+@date    2025.10.28
+@author  拓毅恒
+@usage
+本demo演示的核心功能为:
+Air8000核心板演示wifi升级功能;
+功能:检查当前Air8000模组的WiFi固件是否为最新版本,若不是则自动启动升级(需确保模组已经正常联网)。
+注意:升级完毕后最好取消调用,防止后期版本升级过高导致程序使用不稳定。
+
+更多说明参考本目录下的readme.md文件
+]]
+
+--[[
+必须定义PROJECT和VERSION变量,Luatools工具会用到这两个变量,远程升级功能也会用到这两个变量
+PROJECT:项目名,ascii string类型
+        可以随便定义,只要不使用,就行
+VERSION:项目版本号,ascii string类型
+        如果使用合宙iot.openluat.com进行远程升级,必须按照"XXX.YYY.ZZZ"三段格式定义:
+            X、Y、Z各表示1位数字,三个X表示的数字可以相同,也可以不同,同理三个Y和三个Z表示的数字也是可以相同,可以不同
+            因为历史原因,YYY这三位数字必须存在,但是没有任何用处,可以一直写为000
+        如果不使用合宙iot.openluat.com进行远程升级,根据自己项目的需求,自定义格式即可
+]]
+PROJECT = "fota_wifi"
+VERSION = "001.000.000"
+
+log.info("main", "project name is ", PROJECT, "version is ", VERSION)
+
+-- 如果内核固件支持wdt看门狗功能,此处对看门狗进行初始化和定时喂狗处理
+-- 如果脚本程序死循环卡死,就会无法及时喂狗,最终会自动重启
+if wdt then
+    --配置喂狗超时时间为9秒钟
+    wdt.init(9000)
+    --启动一个循环定时器,每隔3秒钟喂一次狗
+    sys.timerLoopStart(wdt.feed, 3000)
+end
+
+-- 如果内核固件支持errDump功能,此处进行配置,【强烈建议打开此处的注释】
+-- 因为此功能模块可以记录并且上传脚本在运行过程中出现的语法错误或者其他自定义的错误信息,可以初步分析一些设备运行异常的问题
+-- 以下代码是最基本的用法,更复杂的用法可以详细阅读API说明文档
+-- 启动errDump日志存储并且上传功能,600秒上传一次
+-- if errDump then
+--     errDump.config(true, 600)
+-- end
+
+-- 使用LuatOS开发的任何一个项目,都强烈建议使用远程升级FOTA功能
+-- 可以使用合宙的iot.openluat.com平台进行远程升级
+-- 也可以使用客户自己搭建的平台进行远程升级
+-- 远程升级的详细用法,可以参考fota的demo进行使用
+
+-- 启动一个循环定时器
+-- 每隔3秒钟打印一次总内存,实时的已使用内存,历史最高的已使用内存情况
+-- 方便分析内存使用是否有异常
+-- sys.timerLoopStart(function()
+--     log.info("mem.lua", rtos.meminfo())
+--     log.info("mem.sys", rtos.meminfo("sys"))
+-- end, 3000)
+
+-- Air8000 WiFi 更新模块
+require "check_wifi" 
+
+-- 用户代码已结束---------------------------------------------
+-- 结尾总是这一句
+sys.run()
+-- sys.run()之后后面不要加任何语句!!!!!

+ 118 - 0
module/Air8000/demo/fota_wifi/readme.md

@@ -0,0 +1,118 @@
+## 演示功能概述
+
+本demo演示Air8000核心板的WiFi固件自动升级功能。
+
+- **WiFi固件升级**:自动检查Air8000模组的WiFi固件是否为最新版本,若不是则自动启动升级过程。
+- **全自动化流程**:从版本检查、下载到安装重启,整个过程无需手动干预。
+
+#### 1、功能使用说明
+
+本demo已将功能拆分为两个文件:
+- `main.lua`:主入口文件,负责加载和调度升级模块
+- `check_wifi.lua`:WiFi固件检查和升级功能实现模块
+
+Air8000核心板在启动后会自动执行WiFi固件版本检查,若检测到有新版本,将自动下载并升级,升级完成后自动重启设备。
+
+> **注意**:升级功能会自动将WiFi固件升级到最新版本,可能会导致与现有程序兼容性问题。在测试完毕后,建议取消对该模块的调用,防止后续版本更新影响程序稳定性。
+
+#### 2、WiFi固件升级流程
+
+- 设备启动后,`check_wifi.lua`模块会自动初始化并执行升级检查任务
+- 系统会调用`exfotawifi.request()`接口检查是否有可用的WiFi固件更新
+- 如发现新版本,系统会自动下载并安装新固件
+- 下载完成后,系统会等待`AIRLINK_SFOTA_DONE`事件
+- 事件触发后,设备将自动重启以完成固件更新
+
+## 演示硬件环境
+
+1、Air8000核心板/开发板一块
+
+2、配套天线一套
+
+3、TYPE-C USB数据线一根
+
+4、可用SIM卡一张(确保可以正常联网)
+
+## 演示软件环境
+
+1、Luatools下载调试工具
+
+2、[Air8000 版本固件](https://docs.openluat.com/air8000/luatos/firmware/)(注意:固件版本需≥V2017版本才有`AIRLINK_SFOTA_DONE`事件)
+
+3、确保插入的SIM卡可以正常上网
+
+## 演示核心步骤
+
+### WiFi固件升级测试步骤
+
+1、搭建好硬件环境,确保Air8000开发板已连接电源和天线,插入可用的SIM卡
+
+2、通过Luatools将demo与固件烧录到核心板中
+
+3、烧录好后,板子开机同时在luatools上查看日志,观察WiFi固件检查和升级过程:
+
+```lua
+[2025-10-28 19:51:06.947][000000002.240] I/airlink AIRLINK_READY 2240 version 11 t 2085
+[2025-10-28 19:51:06.949][000000002.243] D/airlink Air8000s启动完成, 等待了 14 ms
+[2025-10-28 19:51:06.950][000000002.265] I/user.main project name is  fota_wifi version is  001.000.000
+[2025-10-28 19:51:14.761][000000010.617] D/mobile cid1, state0
+[2025-10-28 19:51:14.763][000000010.618] D/mobile bearer act 0, result 0
+[2025-10-28 19:51:14.765][000000010.618] D/mobile NETIF_LINK_ON -> IP_READY
+[2025-10-28 19:51:14.766][000000010.619] I/user.exfotawifi 开始执行升级任务
+[2025-10-28 19:51:14.768][000000010.625] I/user.exfotawifi 正在请求升级信息, URL: http://wififota.openluat.com/air8000/update.json?imei=864793080175404&version=11&muid=20250722125744A057364A8677024255&hw=A13&coreversion=V2017&model=Air8000
+[2025-10-28 19:51:14.770][000000010.626] dns_run 676:wififota.openluat.com state 0 id 1 ipv6 0 use dns server2, try 0
+[2025-10-28 19:51:14.830][000000010.714] dns_run 693:dns all done ,now stop
+[2025-10-28 19:51:14.833][000000010.716] D/mobile TIME_SYNC 0
+[2025-10-28 19:51:15.004][000000010.885] I/user.exfotawifi 获取服务器响应成功
+[2025-10-28 19:51:15.007][000000010.886] I/user.exfotawifi 解析服务器响应成功
+[2025-10-28 19:51:15.009][000000010.886] I/user.exfotawifi 需要升级, 本地版本: 11 服务器版本: 14
+[2025-10-28 19:51:15.050][000000010.934] D/vfs fopen /http_download/fotawifi.bin r not found
+[2025-10-28 19:51:15.053][000000010.935] dns_run 676:wififota.openluat.com state 0 id 2 ipv6 0 use dns server2, try 0
+[2025-10-28 19:51:15.114][000000010.996] dns_run 693:dns all done ,now stop
+[2025-10-28 19:51:34.266][000000030.150] I/user.exfotawifi 下载升级文件成功,文件路径: /http_download/fotawifi.bin
+[2025-10-28 19:51:34.269][000000030.155] D/airlink.fota 执行g_airlink_fota 0 c0c3e64
+[2025-10-28 19:51:34.271][000000030.156] I/user.exfotawifi 升级成功
+[2025-10-28 19:51:34.274][000000030.156] I/user.exfotawifi 升级任务执行成功
+[2025-10-28 19:51:34.276][000000030.160] I/airlink.fota 开始执行sFOTA file size 809680
+[2025-10-28 19:51:34.277][000000030.163] I/airlink.fota 等待sFOTA初始化 500ms
+[2025-10-28 19:51:34.814][000000030.697] D/airlink.fota sfota sent 4096/809680 head 696D696C
+[2025-10-28 19:51:34.863][000000030.746] D/airlink.fota sfota sent 8192/809680 head A4024B78
+[2025-10-28 19:51:42.896][000000038.780] D/airlink.fota sfota sent 12288/809680 head C1B17347
+...
+[2025-10-28 19:51:52.344][000000048.229] D/airlink.fota sfota sent 802816/809680 head 88AC2008
+[2025-10-28 19:51:52.392][000000048.278] D/airlink.fota sfota sent 806912/809680 head 8AD61D93
+[2025-10-28 19:51:52.454][000000048.327] I/airlink.fota 文件数据发送结束, 等待100ms,执行done操作
+[2025-10-28 19:51:53.042][000000048.927] I/airlink.fota done发送结束, 等待100ms, 执行end操作
+[2025-10-28 19:51:53.153][000000049.028] I/airlink.fota end发送结束, 等待3000ms, 执行重启操作
+[2025-10-28 19:51:56.157][000000052.028] I/airlink.fota 使用命令复位
+[2025-10-28 19:52:26.142][000000082.029] I/airlink.fota FOTA执行完毕
+[2025-10-28 19:52:26.145][000000082.030] I/user.fotawifi WIFI下载完毕,开始重启
+
+```
+
+4、设备重启后,WiFi固件已更新到最新版本
+
+```lua
+[2025-11-06 14:06:13.564][000000000.649] I/airlink AIRLINK_READY 649 version 14 t 557
+[2025-11-06 14:06:13.568][000000000.679] I/user.main project name is  fota_wifi version is  001.000.000
+[2025-11-06 14:06:14.093][000000006.884] I/user.exfotawifi 开始执行升级任务
+[2025-11-06 14:06:14.093][000000006.890] I/user.exfotawifi 正在请求升级信息, URL: http://wififota.openluat.com/air8000/update.json?imei=864793080175404&version=14&muid=20250722125744A057364A8677024255&hw=A13
+[2025-11-06 14:06:14.142][000000006.962] dns_run 693:dns all done ,now stop
+[2025-11-06 14:06:14.263][000000007.082] I/user.exfotawifi 获取服务器响应成功
+[2025-11-06 14:06:14.264][000000007.082] I/user.exfotawifi 解析服务器响应成功
+[2025-11-06 14:06:14.267][000000007.083] I/user.exfotawifi 当前已是最新WIFI固件
+[2025-11-06 14:06:14.267][000000007.083] I/user.exfotawifi 升级任务执行成功
+```
+
+## 常见问题和注意事项
+
+1、**升级失败问题**:
+   - 确保SIM卡正常联网
+   - 检查网络信号强度是否良好
+
+2、**版本兼容性**:
+   - 最新的WiFi固件可能与部分API或功能存在兼容性问题
+   - 测试完成后,建议在生产环境中注释掉`require "check_wifi"`,避免自动升级到未经测试的版本
+
+3、**无法获取系统消息问题**:
+   - 需要检查下固件版本,固件版本需≥V2017版本才有`AIRLINK_SFOTA_DONE`事件