main.lua 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "otademo"
  3. VERSION = "1.0.0"
  4. -- 引入必要的库文件(lua编写), 内部库不需要require
  5. sys = require("sys")
  6. require("sysplus")
  7. --[[
  8. 提示:
  9. 1. 本demo是演示ota的, 只升级脚本, 如果还需要底层一起升级, 参考demo/fota
  10. 2. demo/fota 需要大量flash空间作为fota分区, 所以能启用的库会很少,请酌情使用
  11. 3. ota文件是放在文件系统的,所以不能超过40k, 且不能少于1k
  12. 4. 服务器上的ota文件路径无所谓, 本地下载路径必须是 /update.bin
  13. ]]
  14. if wdt then
  15. --添加硬狗防止程序卡死,在支持的设备上启用这个功能
  16. wdt.init(9000)--初始化watchdog设置为9s
  17. sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
  18. end
  19. sys.timerLoopStart(function()
  20. log.info("当前版本号", _G.VERSION)
  21. end, 1000)
  22. -- OTA任务
  23. function ota_task()
  24. sys.taskInit(function()
  25. local dst_path = "/update.bin"
  26. os.remove(dst_path) -- 一定要先移除老的文件
  27. -- 这里是演示用的url, 实际项目中请换成自己的
  28. -- 路径规则是自定义的, 不是一定要这种规格
  29. -- 这里把当前版本当路径, 是为了方便演示, 避免反复升级
  30. local url = "http://upload.air32.cn/ota/air601/" .. _G.PROJECT .. "/" .. _G.VERSION .. ".ota?mac=" .. wlan.getMac()
  31. local code = http.request("GET", url, nil, nil, {dst=dst_path}).wait()
  32. if code and code == 200 then
  33. log.info("ota", "OTA 下载完成, 3秒后重启")
  34. sys.wait(3000)
  35. rtos.reboot()
  36. end
  37. log.info("ota", "服务器返回非200,就是不需要升级", code)
  38. os.remove(dst_path)
  39. end)
  40. end
  41. sys.taskInit(function()
  42. sys.wait(100)
  43. wlan.init()
  44. sys.wait(100)
  45. wlan.connect("luatos1234", "12341234")
  46. log.info("wlan", "wait for IP_READY", wlan.getMac())
  47. sys.waitUntil("IP_READY", 30000)
  48. sys.wait(500)
  49. -- 联网后,先执行一次OTA
  50. ota_task()
  51. -- 然后每隔6小时执行一次OTA
  52. sys.timerLoopStart(ota_task, 6*3600*1000)
  53. end)
  54. -- 用户代码已结束---------------------------------------------
  55. -- 结尾总是这一句
  56. sys.run()
  57. -- sys.run()之后后面不要加任何语句!!!!!