main.lua 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "fotademo"
  3. VERSION = "1.0.0"
  4. --[[
  5. 本demo 适用于 任何支持 fota 功能的模块, 包括:
  6. 1. Cat.1模块, 如: Air700E/Air600E/Air780E/Air780EP/Air780EPV
  7. 2. wifi模块, 如: ESP32C3/ESP32S3/Air601
  8. 3. 外挂以太网的模块, 例如 Air105 + W5500
  9. ]]
  10. -- 使用合宙iot平台时需要这个参数
  11. PRODUCT_KEY = "123" -- 到 iot.openluat.com 创建项目,获取正确的项目id
  12. sys = require "sys"
  13. libfota2 = require "libfota2"
  14. -- 统一联网函数, 可自行删减
  15. sys.taskInit(function()
  16. -----------------------------
  17. -- 统一联网函数, 可自行删减
  18. ----------------------------
  19. if wlan and wlan.connect then
  20. -- wifi 联网, ESP32系列均支持, 要根据实际情况修改ssid和password!!
  21. local ssid = "luatos1234"
  22. local password = "12341234"
  23. log.info("wifi", ssid, password)
  24. -- TODO 改成自动配网
  25. wlan.init()
  26. wlan.setMode(wlan.STATION) -- 默认也是这个模式,不调用也可以
  27. wlan.connect(ssid, password, 1)
  28. elseif mobile then
  29. -- EC618系列, 如Air780E/Air600E/Air700E
  30. -- mobile.simid(2) -- 自动切换SIM卡, 按需启用
  31. -- 模块默认会自动联网, 无需额外的操作
  32. elseif w5500 then
  33. -- w5500 以太网
  34. w5500.init(spi.HSPI_0, 24000000, pin.PC14, pin.PC01, pin.PC00)
  35. w5500.config() --默认是DHCP模式
  36. w5500.bind(socket.ETH0)
  37. elseif socket then
  38. -- 适配了socket库也OK, 就当1秒联网吧
  39. sys.timerStart(sys.publish, 1000, "IP_READY")
  40. else
  41. -- 其他不认识的bsp, 循环提示一下吧
  42. while 1 do
  43. sys.wait(1000)
  44. log.info("bsp", "本bsp可能未适配网络层, 请查证")
  45. end
  46. end
  47. -- 默认都等到联网成功
  48. sys.waitUntil("IP_READY")
  49. sys.publish("net_ready")
  50. end)
  51. -- 循环打印版本号, 方便看版本号变化, 非必须
  52. sys.taskInit(function()
  53. while 1 do
  54. sys.wait(1000)
  55. log.info("fota", "version", VERSION)
  56. end
  57. end)
  58. -- 升级结果的回调函数
  59. local function fota_cb(ret)
  60. log.info("fota", ret)
  61. if ret == 0 then
  62. rtos.reboot()
  63. end
  64. end
  65. -- 使用合宙iot平台进行升级, 支持自定义参数, 也可以不配置
  66. local ota_opts = {
  67. -- 合宙IOT平台的默认升级URL, 不填就是这个默认值
  68. -- 如果是自建的OTA服务器, 则需要填写正确的URL, 例如 http://192.168.1.5:8000/update
  69. -- 如果自建OTA服务器,且url包含全部参数,不需要额外添加参数, 请在url前面添加 ###
  70. -- url="http://iot.openluat.com/api/site/firmware_upgrade",
  71. -- 请求的版本号, 合宙IOT有一套版本号体系,不传就是合宙规则, 自建服务器的话当然是自行约定版本号了
  72. -- version=_G.VERSION,
  73. -- 其他更多参数, 请查阅libfota2的文档 https://wiki.luatos.com/api/libs/libfota2.html
  74. }
  75. sys.taskInit(function()
  76. -- 这个判断是提醒要设置PRODUCT_KEY的,实际生产请删除
  77. if "123" == _G.PRODUCT_KEY and not ota_opts.url then
  78. while 1 do
  79. sys.wait(1000)
  80. log.info("fota", "请修改正确的PRODUCT_KEY")
  81. end
  82. end
  83. -- 等待网络就行后开始检查升级
  84. sys.waitUntil("net_ready")
  85. sys.wait(500)
  86. libfota2.request(fota_cb, ota_opts)
  87. --演示按键触发升级, 这里假定使用GPIO0进行触发
  88. --sys.wait(1000)
  89. --gpio.debounce(0, 3000, 1)
  90. --gpio.setup(0, function()
  91. -- libfota2.request(fota_cb, ota_opts)
  92. --end, gpio.PULLUP)
  93. end)
  94. -- 演示定时自动升级, 每隔4小时自动检查一次
  95. sys.timerLoopStart(libfota2.request, 4*3600000, fota_cb, ota_opts)
  96. -- 用户代码已结束---------------------------------------------
  97. -- 结尾总是这一句
  98. sys.run()
  99. -- sys.run()之后后面不要加任何语句!!!!!