这些天,,,,今天终于看到了但愿,,,天道酬勤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程序中写的模块是若是没有链接到路由器就会打印
若是不想要能够去掉
最后呢!提供一下本身作的板子