main.lua 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "fotademo"
  3. -- iot限制,只能上传xxx.yyy.zzz格式的三位数的版本号,但实际上现在只用了XXX和ZZZ,中间yyy暂未使用
  4. -- 需要注意的是,因为yyy不生效,所以111.222.333版本和111.444.333版本,对iot平台来说都一样,所以建议中间那一位永远写000
  5. VERSION = "001.000.000"
  6. -- 使用合宙iot平台时需要这个参数
  7. PRODUCT_KEY = "123" -- 到 iot.openluat.com 创建项目,获取正确的项目id
  8. sys = require "sys"
  9. libfota2 = require "libfota2"
  10. -- 联网函数, 可自行删减
  11. sys.taskInit(function()
  12. -- 默认都等到联网成功
  13. sys.waitUntil("IP_READY")
  14. log.info("4G网络链接成功")
  15. sys.publish("net_ready")
  16. end)
  17. -- 循环打印版本号, 方便看版本号变化, 非必须
  18. sys.taskInit(function()
  19. while 1 do
  20. sys.wait(5000)
  21. log.info("降功耗 找合宙")
  22. -- log.info("fota", "脚本版本号", VERSION)
  23. log.info("fota", "脚本版本号", VERSION, "core版本号", rtos.version())
  24. end
  25. end)
  26. -- 升级结果的回调函数
  27. -- 功能:获取fota的回调函数
  28. -- 参数:
  29. -- result:number类型
  30. -- 0表示成功
  31. -- 1表示连接失败
  32. -- 2表示url错误
  33. -- 3表示服务器断开
  34. -- 4表示接收报文错误
  35. -- 5表示使用iot平台VERSION需要使用 xxx.yyy.zzz形式
  36. local function fota_cb(ret)
  37. log.info("fota", ret)
  38. if ret == 0 then
  39. log.info("升级包下载成功,重启模块")
  40. rtos.reboot()
  41. elseif ret == 1 then
  42. log.info("连接失败", "请检查url拼写或服务器配置(是否为内网)")
  43. elseif ret == 2 then
  44. log.info("url错误", "检查url拼写")
  45. elseif ret == 3 then
  46. log.info("服务器断开", "检查服务器白名单配置")
  47. elseif ret == 4 then
  48. log.info("接收报文错误", "检查模块固件或升级包内文件是否正常")
  49. elseif ret == 5 then
  50. log.info("版本号书写错误", "iot平台版本号需要使用xxx.yyy.zzz形式")
  51. else
  52. log.info("不是上面几种情况 ret为", ret)
  53. end
  54. end
  55. local ota_opts = {}
  56. -- 使用合宙iot平台进行升级,不需要管下面这段代码
  57. -- 使用第三方服务器时打开下面这段代码
  58. --[[local ota_opts = {
  59. url = "",
  60. -- 合宙IOT平台的默认升级URL, 不填就是这个默认值
  61. -- 如果是自建的OTA服务器, 则需要填写正确的URL, 例如 http://192.168.1.5:8000/update
  62. -- 如果自建OTA服务器,且url包含全部参数,不需要额外添加参数, 请在url前面添加 ###
  63. -- 如果不加###,则默认会上传如下参数
  64. -- 1. opts.version string 版本号, 默认是 BSP版本号.x.z格式
  65. -- 2. opts.timeout int 请求超时时间, 默认300000毫秒,单位毫秒
  66. -- 3. opts.project_key string 合宙IOT平台的项目key, 默认取全局变量PRODUCT_KEY. 自建服务器不用填
  67. -- 4. opts.imei string 设备识别码, 默认取IMEI(Cat.1模块)或WLAN MAC地址(wifi模块)或MCU唯一ID
  68. -- 5. opts.firmware_name string 底层版本号
  69. -- 请求的版本号, 合宙IOT有一套版本号体系,不传就是合宙规则, 自建服务器的话当然是自行约定版本号了
  70. version = ""
  71. -- 其他更多参数, 请查阅libfota2的文档 https://wiki.luatos.com/api/libs/libfota2.html
  72. }]]--
  73. sys.taskInit(function()
  74. -- 这个判断是提醒要设置PRODUCT_KEY的,实际生产请删除
  75. if "123" == _G.PRODUCT_KEY and not ota_opts.url then
  76. while 1 do
  77. sys.wait(1000)
  78. log.info("fota", "请修改正确的PRODUCT_KEY")
  79. end
  80. end
  81. -- 等待网络就行后开始检查升级
  82. sys.waitUntil("net_ready")
  83. log.info("开始检查升级")
  84. sys.wait(500)
  85. libfota2.request(fota_cb, ota_opts)
  86. end)
  87. -- 演示定时自动升级, 每隔4小时自动检查一次
  88. sys.timerLoopStart(libfota2.request, 4 * 3600000, fota_cb, ota_opts)
  89. -- 用户代码已结束---------------------------------------------
  90. -- 结尾总是这一句
  91. sys.run()
  92. -- sys.run()之后后面不要加任何语句!!!!!