本教程基于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
结束
文档更新时间: 2017-09-10 04:19 作者:Tristan