锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

esp01S 配网及连接mqtt

时间:2023-02-03 02:00:01 41s连接器

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
本人纯小白,折腾了两天,希望对大家有参考作用。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章