這些天,,,,今天終於看到了但願,,,天道酬勤html
先說實現的功能...讓ESP8266鏈接無線網,而後讓它創建服務器,,個人客戶端鏈接上之後,發給客戶端發數據模塊打印到串口,,往ESP8266串口裏發數據自動轉發給網口node
先看效果圖,終於不須要單片機配置了服務器
程序源碼函數
個人init.luapost
lighton=0 pin=4 gpio.mode(pin,gpio.OUTPUT) tmr.alarm(1,500,1,function() if lighton==0 then lighton=1 gpio.write(pin,gpio.HIGH) else lighton=0 gpio.write(pin,gpio.LOW) end end) dofile("conncet_wifi.lua")
個人 conncet_wifi.lua
uart.setup(0,9600,8,0,1,0)
wifi.setmode(wifi.STATIONAP) wifi.sta.config("360","1234567890") wifi.sta.connect() tmr.alarm(2, 1000, 1, function() if wifi.sta.getip() == nil then print("Connecting...") else tmr.stop(2) print("Connected, IP is "..wifi.sta.getip()) end end) srv=net.createServer(net.TCP,28800) srv:listen(8080,function(conn) --print("build success") connect = conn conn:on("receive",function(conn,payload) print(payload) --conn:send("<h1> Hello, NodeMcu.</h1>") end) end)
uart.on("data", function(data) connect:send(data) end, 0)
由於可能刷的固件不同,若是出現下面的問題測試
修改成ui
APConfig={} APConfig.ssid="ACLAY" APConfig.pwd="wange903" wifi.sta.config(APConfig)
若是想讓多個客服端鏈接可參考這篇文章lua
若是上面的代碼有問題,,提示已經監聽了端口不能重複監聽,能夠修改成下面的url
ConnectCnt = 0 ConnectListenFlage=0 UsartUsFlage = 0 connect0Flage=0 connect1Flage=0 connect2Flage=0 connect3Flage=0 connect4Flage=0 tmr.alarm(3, 1000, 1, function() if ConnectListenFlage == 0 then ConnectListenFlage = 1 srv:listen(8080,function(conn0) UsartUsFlage = 1 if ConnectCnt == 0 then connect0 = conn0 connect0Flage =1 connect1Flage=0 if connect1 ~= nil then connect1:close() end print("0-Connectd") end if ConnectCnt == 1 then connect1 = conn0 connect1Flage=1 connect2Flage=0 if connect2 ~= nil then connect2:close() end print("1-Connectd") end if ConnectCnt == 2 then connect2 = conn0 connect2Flage=1 connect3Flage=0 if connect3 ~= nil then connect3:close() end print("2-Connectd") end if ConnectCnt == 3 then connect3 = conn0 connect3Flage=1 connect4Flage=0 if connect4 ~= nil then connect4:close() end print("3-Connectd") end if ConnectCnt == 4 then connect4 = conn0 connect4Flage=1 connect0Flage=0 if connect0 ~= nil then connect0:close() end print("4-Connectd") end conn0:on("receive",function(conn0,payload) print(payload) end) ConnectCnt = ConnectCnt+1 if ConnectCnt == 5 then ConnectCnt = 0 end end) end end)
uart.setup(0,9600,8,0,1,0)
tmr.alarm(4, 1000, 1, function() if UsartUsFlage == 1 then uart.on("data", function(data) if connect0 ~= nil then if connect0Flage == 1 then connect0:send(data) end end if connect1 ~= nil then if connect1Flage == 1 then connect1:send(data) end end if connect2 ~= nil then if connect2Flage == 1 then connect2:send(data) end end if connect3 ~= nil then if connect3Flage == 1 then connect3:send(data) end end if connect4 ~= nil then if connect4Flage == 1 then connect4:send(data) end end tmr.stop(4) end, 0) end end)
這兩天測試程序還發現一個bug就是若是客戶端斷開了,應該檢測一下哪一個斷開了,數據就不該該發向那個鏈接,,,不然就會報錯,而後模塊會復位重啓spa
因此加上這段代碼
conn0:on("disconnection",function(sck,c) --print(sck) if sck == connect0 then connect0 = nil print("disconnect0") end if sck == connect1 then connect1 = nil print("disconnect1") end if sck == connect2 then connect2 = nil print("disconnect2") end if sck == connect3 then connect3 = nil print("disconnect3") end if sck == connect4 then connect4 = nil print("disconnect4") end end)
放一個全的
ConnectCnt = 0//鏈接計數 ConnectListenFlage=0//監聽標誌,只執行一次監聽 UsartUsFlage = 0//容許串口數據發向網口 tmr.alarm(2, 1000, 1, function() if NetMode == 0 then//TCP Sever模式 if ConnectListenFlage == 0 then ConnectListenFlage = 1 srv:listen(ConnectPort,function(conn0) UsartUsFlage = 1 --print(conn0) if ConnectCnt == 0 then connect0 = conn0 if connect1 ~= nil then connect1:close() end connect1 = nil print("0-Connectd") end if ConnectCnt == 1 then connect1 = conn0 if connect2 ~= nil then connect2:close() end connect2 = nil print("1-Connectd") end if ConnectCnt == 2 then connect2 = conn0 if connect3 ~= nil then connect3:close() end connect3 = nil print("2-Connectd") end if ConnectCnt == 3 then connect3 = conn0 if connect4 ~= nil then connect4:close() end connect4 = nil print("3-Connectd") end if ConnectCnt == 4 then connect4 = conn0 if connect0 ~= nil then connect0:close() end connect0 = nil print("4-Connectd") end conn0:on("disconnection",function(sck,c) //斷開鏈接函數 --print(sck) if sck == connect0 then connect0 = nil print("disconnect0") end if sck == connect1 then connect1 = nil print("disconnect1") end if sck == connect2 then connect2 = nil print("disconnect2") end if sck == connect3 then connect3 = nil print("disconnect3") end if sck == connect4 then connect4 = nil print("disconnect4") end end) conn0:on("receive",function(conn0,payload) uart.write(0,payload)end) --print(payload) end) ConnectCnt = ConnectCnt+1 if ConnectCnt == 5 then ConnectCnt = 0 end end) end end
串口函數裏面
if UsartUsFlage == 1 then if NetMode == 0 then if connect0 ~= nil then connect0:send(RevData) end if connect1 ~= nil then connect1:send(RevData) end if connect2 ~= nil then connect2:send(RevData) end if connect3 ~= nil then connect3:send(RevData) end if connect4 ~= nil then connect4:send(RevData) end end
如今一步步的作
首先親們必定是把Esp8266刷了基於Lua腳本語言開發的固件
我也從新刷一下
我如今使用的這一款,,這上面有一個燈,這款是人家作的開發板,因此集成了USB轉串口,,
首先是作一個程序讓燈閃,這樣作就只是作指示燈,正好看一下它的一些API函數
復位一下模塊
關於這句要說一下,,,,這個模塊默認上電執行的是 init.Lua中的程序,由於剛刷新完固件因此模塊裏面沒有任何文件,,
咱們編寫一個程序把它保存爲一個後綴名爲.lua的文件,,這些文件呢,點擊
文件就保存到ESP8266內部了,我上面寫了兩個文件一個名爲init.lua(必須的,一上電模塊就執行的文件),另外一個conncet_wifi.lua
要想使用這個文件只須要
先寫init.lua
能夠給模塊從新上電試一下,或者復位,模塊老是執行這個程序
我爲了方便用電腦上位機測試,因此就讓模塊工做在AP+STATION模式下,讓模塊鏈接個人360wifi
先設置模塊的模式,而後是鏈接個人無線
爲了保證模塊一上電就執行
接着就是創建服務器
對了具體的關於 ::::::號有沒有疑問,其實本身如今也有,不過本身看到了Lua講解::::號的地方,先知道這樣用,,,,,本身看懂了再在關於lua入門裏面寫一下
網口已經能接收到數據而後發送到串口了
如今要作的是往模塊串口發數據而後傳給網口
完成後能夠給模塊從新上電,或者復位一下,由於模塊這樣寫進去可能不是從init.lua開始執行的
用別的串口調試助手鍊接上模塊,由於這個軟件的串口是發的命令
好了,,,,
補充
上面的AP加STATION模式下模塊是發出WIFI信號的,並且設置了模塊監聽的端口是8080,因此能夠徹底鏈接模塊發出的無線網,而後和模塊進行通訊,
只不過模塊IP地址填寫的是模塊默認的ip 192.168.4.1 端口號 8080
鏈接模塊的無線
對了串口每隔500ms會打印Connecting...
是因爲Lua程序中寫的模塊是若是沒有鏈接到路由器就會打印
若是不想要能夠去掉
最後呢!提供一下本身作的板子