【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)
      

구체적인 함수 소개는 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 == "++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.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 == "++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)

좋은 웹페이지 즐겨찾기