本教程基于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 thenprint('Waiting for IP ...')elseprint('IP is ' .. wifi.sta.getip())print('WIFI LINK OK')tmr.stop(1)--当连接上WIFI后,直接调用HTTPGET来加载远程脚本HttpGet_Script()endendfunction HttpGet_Script()http.get("http://10.0.0.104/Lua/init_Server.lua", nil, function(code, data)if (code < 0) thenprint("HTTP request failed")elseprint("Code:" .. code)--加载远程脚本,注意,后面的"()"很重要loadstring(data)()--调用init_Server.lua 中的 Main 函数Main()endend)endtmr.alarm(1, 1000, 1, GetWiFiStage)
核心逻辑模块
--这个很重要,标志本脚本的版本号local local_var = 1function CHECK_FOR_UPDATES()http.get("http://10.0.0.104/lua/var.txt", nil, function(code, data)if (code < 0) thenprint("HTTP request failed")elseprint("Code:" .. code)--开始检查服务器上的脚本版本,如果大于本地版本号,则开始更新if tonumber(data) > local_var then--注意:更新前需要将正在运行的逻辑代码全部停止tmr.stop(3) tmr.stop(6)--再次调用init中的获取远程代码函数HttpGet_Script()endendend)endfunction Main()--这边是你需要的脚本逻辑代码tmr.alarm(3, 5*1000, 1, MQTT_EVENT)--结束--这边是定时检查脚本是否需要更新的代码tmr.alarm(6, 60*1000, 1, CHECK_FOR_UPDATES)end
结束
文档更新时间: 2017-09-10 04:19 作者:Tristan