『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 6053|回复: 3

[进阶教程] 【NodeMcu Lua】 OTA更新脚本

[复制链接]

2

主题

2

帖子

80

积分

论坛分享达人

积分
80
金钱
78
HASS币
0
发表于 2017-8-9 14:44:56 | 显示全部楼层 |阅读模式
本帖最后由 et5494 于 2017-8-9 14:49 编辑

本教程基于NodeMcu Lua 固件工具:
          一个可以通过HTTP访问的空间(服务器啊,阿里的OSS的都可以)
          固件中需要有HTTP组件

PS:更新模式为覆盖更新,函数覆盖函数,变量覆盖变量。所以无法删除原代码中存在,新代码中不存在的


首先需要把自己的脚本拆开,拆分为(WIFI连接模块,加载远程脚本的模块) + (核心逻辑模块)

例:

WIFI连接模块,加载远程脚本的模块:
print('Wait link to wifi')
wifi.setmode(wifi.STATION)
wifi.sta.config('SSID', 'PASSWORD')
wifi.sta.connect()

function GetWiFiStage()

        if wifi.sta.getip() == nil then
                print('Waiting for IP ...')
        else
                print('IP is ' .. wifi.sta.getip())
                print('WIFI LINK OK')
                tmr.stop(1)
                --当连接上WIFI后,直接调用HTTPGET来加载远程脚本
                HttpGet_Script()
        end
end

function HttpGet_Script()

        http.get("http://10.0.0.104/Lua/init_Server.lua", nil, function(code, data)
    if (code < 0) then
      print("HTTP request failed")
    else
          print("Code:" .. code)
          --加载远程脚本,注意,后面的"()"很重要
          loadstring(data)()
          --调用init_Server.lua 中的 Main 函数
          Main()
    end
  end)
end

tmr.alarm(1, 1000, 1, GetWiFiStage)


核心逻辑模块


--这个很重要,标志本脚本的版本号
local local_var = 1

function CHECK_FOR_UPDATES()

        http.get("http://10.0.0.104/lua/var.txt", nil, function(code, data)
    if (code < 0) then
      print("HTTP request failed")
    else
          print("Code:" .. code)
          --开始检查服务器上的脚本版本,如果大于本地版本号,则开始更新
         if tonumber(data) > local_var then
                --注意:更新前需要将正在运行的逻辑代码全部停止
                tmr.stop(3)                tmr.stop(6)
                --再次调用init中的获取远程代码函数
                HttpGet_Script()
         end 
    end
  end)
end




function Main()
        --这边是你需要的脚本逻辑代码
        tmr.alarm(3, 5*1000, 1, MQTT_EVENT)
        --结束
        
        
        --这边是定时检查脚本是否需要更新的代码
        tmr.alarm(6, 60*1000, 1, CHECK_FOR_UPDATES)
end


结束!!!!!!!



评分

参与人数 1金钱 +5 收起 理由
lidicn + 5 666!

查看全部评分

回复

使用道具 举报

16

主题

281

帖子

1515

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1515
金钱
1224
HASS币
0

教程狂人卓越贡献

发表于 2017-8-9 14:49:17 | 显示全部楼层
不错 顶一个。。不过lua还是不会玩。。哈哈哈
回复

使用道具 举报

19

主题

457

帖子

8170

积分

元老级技术达人

云淡风轻近午天

积分
8170
金钱
7713
HASS币
0

教程狂人

发表于 2017-8-18 14:30:18 | 显示全部楼层
先收藏,顶起来
回复

使用道具 举报

1

主题

80

帖子

607

积分

高级会员

Rank: 4

积分
607
金钱
527
HASS币
0
发表于 2018-1-19 21:30:56 来自手机 | 显示全部楼层
收藏收藏
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-28 18:11 , Processed in 0.256599 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表