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)
具体的函数介绍,还是看
LUA
的API
<这里>即可!建立服务器并分得相应
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.write
从8266
的串口发送到电脑端的串口调试助手,(同时拷贝此时的服务器客户端建立的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)
推荐阅读
- 数据结构和算法|LeetCode 的正确使用方式
- #|7.分布式事务管理
- #|算法设计与分析(Java实现)——贪心算法(集合覆盖案例)
- #|算法设计与分析(Java实现)—— 动态规划 (0-1 背包问题)
- #|阿尔法点亮LED灯(一)汇编语言
- #|Multimedia
- #|ARM裸机开发(汇编LED灯实验(I.MX6UL芯片))
- 基础课|使用深度优先搜索(DFS)、广度优先搜索(BFS)、A* 搜索算法求解 (n^2 -1) 数码难题,耗时与内存占用(时空复杂度)对比(附((n^2 - 1) 数码问题控
- #|学习笔记 | Ch05 Pandas数据清洗 —— 缺失值、重复值、异常值
- win10|搏一搏 单车变摩托,是时候捣鼓一下家中的小米电视机啦。