esp01S 配网及连接mqtt
时间:2023-02-03 02:00:01
esp01S 配网及连接mqtt
- 设备入手
-
- 刷nodeMcu固件
- 配网方案
- LUA代码参考
- 其他代码
设备入手
马爸爸家开始了esp01s Relay配置模块继电器esp01s,全裸板,没有程序,需要刷。
刷nodeMcu固件
没什么好说的。https://nodemcu-build.com/index.php选择项目,生成固件,然后使用flash_download_tools_v3.6.7刷到esp01s里即可。
配网方案
参考了https://www.secpulse.com/archives/82363.html文件和思路发生了变化,上电后自动运行init.lua,查找网络配置文件config.lua,如果没有,启动ap模式,加载httpserver,手机连接模块AP,进行配网,将网络参数保存到模块中config.lua内部,连接网络,执行mqtt.lua,连接mqtt,就可以控制了。
下次启动或断电后启动时,自动运行init.lua,查找网络配置文件config.lua,配置后,将存在模块连接网络并执行mqtt.lua,连接mqtt,可正常控制。
wifi即使名称或密码,即使配置文件config.lua存在与网络无关。目前的处理方法是init.lua内置时间限制,超过时间仍无法连接到网络,启动ap模式,加载httpserver,手机连接模块AP,可重新配网。
LUA代码参考
init.lua:
if file.exists("config.lua") then dofile('config.lua') wifi.sta.config(cfg) print("connect wifi ssid: "..cfg.ssid.." pwd: "..cfg.pwd) count=0 mytimer = tmr.create() mytimer:register(1000, tmr.ALARM_AUTO, function() if count==10 then mytimer:stop() print('connect sta fail,restarthttpserver...') dofile('wifi_set_ap.lua') dofile('start_http.lua') end if wifi.sta.getip() ~= nil then print(wifi.sta.getip()) mytimer:stop)
print('{"status":"connect success."}')
wifi.setmode(wifi.STATION)
--mqtt
dofile('mqtt.lua')
else
count=count+1
end
end)
mytimer:start()
else
dofile('wifi_set_ap.lua')
dofile('start_http.lua')
end
配网代码start_http.lua:
dofile('httpServer.lua')
dofile('table_to_string.lua')
httpServer:listen(80)
TMR_WIFI = 4
httpServer:use('/', function(req, res)
if wifi.getmode() == 3 then
res:sendFile("index.html")
else
res:send("Hello,nodeMCU
")
end
end)
httpServer:use('/config', function(req, res)
if req.query.ssid ~= nil and req.query.pwd ~= nil then
local cfg = {
}
cfg.ssid = req.query.ssid
cfg.pwd = req.query.pwd
wifi.sta.config(cfg)
print("connect wifi ssid: "..cfg.ssid.." pwd: "..cfg.pwd)
-- 配网信息保存
file = file.open("config.lua", "w")
file:writeline("cfg = {}")
file:writeline("cfg.ssid = \""..req.query.ssid.."\"")
file:writeline("cfg.pwd = \""..req.query.pwd.."\"")
file:close()
dofile('config.lua')
wifi.sta.config(cfg)
print("connect wifi ssid: "..cfg.ssid.." pwd: "..cfg.pwd)
count=0
mytimer = tmr.create()
mytimer:register(1000, tmr.ALARM_AUTO, function()
if wifi.sta.getip() ~= nil then
print(wifi.sta.getip())
mytimer:stop()
print('{"status":"connect success."}')
wifi.setmode(wifi.STATION)
dofile('mqtt.lua')
end
end)
mytimer:start()
end
end)
httpServer:use('/scanap', function(req, res)
print("Scanning AP...")
wifi.sta.getap(1, function(table)
local aptable = {
}
for ssid,v in pairs(table) do
local ssid, rssi, authmode, channel = string.match(v, "([^,]+),([^,]+),([^,]+),([^,]*)")
aptable[ssid] = channel
end
local retResult = table_to_string(aptable)
res:send(retResult)
end)
end)
其他代码
其他的操作就很简单了,可以通过以下链接获取所有代码和所用到的工具。
esp8266继电器配网+断电保存+可重复配网全部代码及工具.zip
本人纯小白,折腾了两天,希望对大家有参考作用。