【ESP8266의 LUA 개발】3. TCP 서버를 구축하여 socket 통신 제어 계전기, 직렬, 서버, 클라이언트 송수신 데이터의 작은 깨달음을 실현한다.
4635 단어 #ESP8266 학습
8266 서버로 TCP 통신 가능
주석, 실제 소록할 때 주석이 너무 많아서 소록이 들어가지 않는 상황이 발생할 수 있습니다. 이때 주석을 삭제해야 합니다!
먼저 테스트
8266
서버 구축 및 분리IP
녹음할 때 먼저 태우고wifi.lua
, 그 다음에 태우고init.lua
.init.lua
-- gpio2 -> IO4
-- gpio4 -> IO2
gpio.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 == "++MD610" then
gpio.write(2,1)
socket:send("relay=1")
end
if data == "++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 == "++MD610" then
gpio.write(2,1)
socket:send("relay=1")
end
if data == "++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)
end
end, 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)...
.마찬가지로 우리 8266의 인터페이스와 인터페이스 디버깅 조수의 통신도 마찬가지다!8266의 직렬 디버깅 조수에게 메시지를 보내거나
print
또는uart.write
을 통해 직렬 디버깅 조수가 8266에게 메시지를 보내면 되고, 직렬 데이터 감청만 등록하면 된다uart.on("data",0,function(data)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rails Turbolinks를 페이지 단위로 비활성화하는 방법원래 Turobolinks란? Turbolinks는 링크를 생성하는 요소인 a 요소의 클릭을 후크로 하고, 이동한 페이지를 Ajax에서 가져옵니다. 그 후, 취득 페이지의 데이터가 천이 전의 페이지와 동일한 것이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.