#|【ESP8266之LUA开发】三、建立TCP服务器,实现socket通信控制继电器,串口,服务器,客户端收发数据小感悟

8266做服务器,实现TCP通信

注,实际烧录的时候会因为注释过多造成烧录不进去的情况,这个时候需要删除注释!
先来测试8266建立服务器,并分得IP
烧录时,先烧wifi.lua,然后再烧init.lua
init.lua
--小灯gpio2 -> IO4 --继电器 gpio4 -> IO2gpio.mode(4, gpio.OUTPUT) gpio.mode(2, gpio.OUTPUT) gpio.write(4, 1) tmr.alarm(0, 1000, 1, function() gpio.write(4, 1-gpio.read(4)) end)tmr.alarm(1, 2000, 0, function() dofile("wifi.lua") end)

wifi.lua
wifi.setmode(wifi.STATIONAP)cfg = {} cfg.ssid = "Hello8266" cfg.pwd = "11223344" wifi.ap.config(cfg)apcfg = {} apcfg.ssid = "qqqqq" apcfg.pwd = "11223344" wifi.sta.config(apcfg) wifi.sta.autoconnect(1) printip = 0 wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T) - printip = 0 end)wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T) if printip == 0 then print("IP: "..T.IP) end printip = 0 end)

具体的函数介绍,还是看LUAAPI<这里>即可!
建立服务器并分得相应IP没问题了,就可以建立socket通信了! init.lua
同上

wifi.lua
wifi.setmode(wifi.STATIONAP)cfg={} cfg.ssid="Hellow8266" cfg.pwd="11223344" wifi.ap.config(cfg)apcfg={} apcfg.ssid="qqqqq" apcfg.pwd="11223344" wifi.sta.config(apcfg) wifi.sta.autoconnect(1)TCPSever=net.createServer(net.TCP,28800) TCPSever:listen(8080,function(socket) socket:on("receive",function(socket,data) if data =https://www.it610.com/article/="++MD610" then gpio.write(2,1) socket:send("relay=1") end if data =https://www.it610.com/article/="++MD600" then gpio.write(2,0) socket:send("relay=0") end end) socket:on("disconnection",function(sck,c) socket = nil end) end)printip = 0 wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T) printip = 0 end)wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T) if printip == 0 then print("+IP"..T.IP) end printip = 1 end)

服务器和客户端进行发送接收数据的同时,让串口也参与进来。 8266建立服务器并分得IP,客户端连接相应IP,发送控制命令。
服务器收到命令后,先把收到的命令通过uart.write8266的串口发送到电脑端的串口调试助手,(同时拷贝此时的服务器客户端建立的socket)
然后执行相应的命令动作,并通过socket:send实现把命令再回显到客户端!
uart.on是串口数据接收监听函数,可以实现接收电脑端的串口调试发送的数据!
在这里面,利用服务器与客户端之间的socket,实现串口调试助手发送数据到8266串口,再利用socket:send发送到客户端!
具体实现还是看下面的wifi.lua.
init.lua
同上

wifi.lua
wifi.setmode(wifi.STATIONAP)cfg={} cfg.ssid="Hellow8266" cfg.pwd="11223344" wifi.ap.config(cfg)apcfg={} apcfg.ssid="qqqqq" apcfg.pwd="11223344" wifi.sta.config(apcfg) wifi.sta.autoconnect(1)TCPSever=net.createServer(net.TCP,28800) TCPSever:listen(8080,function(socket) socket:on("receive",function(socket,data) uartsocket = socket uart.write(0,data) if data =https://www.it610.com/article/="++MD610" then gpio.write(2,1) socket:send("relay=1") end if data =https://www.it610.com/article/="++MD600" then gpio.write(2,0) socket:send("relay=0") end end) socket:on("disconnection",function(sck,c) socket = nil end) end)uart.on("data",0,function(data) if uartsocket ~= nil then uartsocket:send(data) endend, 0))printip = 0 wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T) printip = 0 end)wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T) if printip == 0 then print("+IP"..T.IP) end printip = 1 end)

小感悟之串口,服务器,客户端之间的收发数据 看来,服务器向客户端发送消息就是通过socket:send
客户端向服务器则是直接发,只需要再服务器端进行接收监听即可
socket:on("receive",function(socket,data)...
【#|【ESP8266之LUA开发】三、建立TCP服务器,实现socket通信控制继电器,串口,服务器,客户端收发数据小感悟】同样,我们8266的串口和串口调试助手的通信也是如此呢!
8266的串口向串口调试助手发送消息通过print或者uart.write
串口调试助手向8266进行发送消息直接发即可,只需要注册串口数据监听即可
uart.on("data",0,function(data)

    推荐阅读