本帖最后由 沙漠之痕 于 2018-11-7 12:50 编辑
一. 模块连接路由器开启监听端口
1. 模块开启监听8080 端口: init.lua文件: tmr.alarm(0,4000,0,function() dofile("udp.lua") end) init.lua文件结束 udp.lua文件: ListenPort = 8080 wifi.setmode(wifi.STATIONAP) stacfg={} stacfg.ssid="qqqqq" stacfg.pwd="11223344" wifi.sta.config(stacfg) wifi.sta.autoconnect(1) UdpSocket = net.createUDPSocket() UdpSocket:listen(ListenPort) UdpSocket:on("receive", function(socket, data, port, ip) print("\r\nport:"..port.."---ip:"..ip.."\r\n") ConnectPort = port ConnectIP = ip uart.write(0,data) end) uart.on("data",0,function(data) if UdpSocket~=nil then if ConnectPort~=0 then UdpSocket:send(ConnectPort, ConnectIP, data) end end end,0) ------------------Got IP ----------------------------------------- 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) ------------------END Got IP ------------------------------------- udp.lua文件结束 2. 通过手机端发送”open”打开继电器; 发送”close”关闭继电器 init.lua文件: RELAY_Pin = 1 gpio.mode(RELAY_Pin, gpio.OUTPUT) gpio.write(RELAY_Pin,0) tmr.alarm(0,4000,0,function() dofile("udp.lua") end) init.lua文件结束 udp.lua文件: UdpReceData = "" UdpReceDataCnt = 0 UdpReceDataStat = false ListenPort = 8080 wifi.setmode(wifi.STATIONAP) stacfg={} stacfg.ssid="qqqqq" stacfg.pwd="11223344" wifi.sta.config(stacfg) wifi.sta.autoconnect(1) UdpSocket = net.createUDPSocket() UdpSocket:listen(ListenPort) UdpSocket:on("receive", function(socket, data, port, ip) print("\r\nport:"..port.."---ip:"..ip.."\r\n") ConnectPort = port ConnectIP = ip UdpReceData = UdpReceData..data UdpReceDataCnt = 0 UdpReceDataStat = true end) tmr.alarm(1,10,1,function() if UdpReceDataStat == true then UdpReceDataCnt = UdpReceDataCnt+1 if UdpReceDataCnt >=10 then uart.write(0,UdpReceData) if UdpReceData=="open" then gpio.write(RELAY_Pin,1) end if UdpReceData=="close" then gpio.write(RELAY_Pin,0) end UdpReceData = "" UdpReceDataStat = false UdpReceDataCnt = 0 end end end) uart.on("data",0,function(data) if UdpSocket~=nil then if ConnectPort~=0 then UdpSocket:send(ConnectPort, ConnectIP, data) end end end,0) ------------------Got IP ----------------------------------------- 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) ------------------END Got IP ------------------------------------- udp.lua文件结束
手机端发送”open”开继电器 手机端发送”close”开继电器 接收模块通过UDP发送出的数据
二 . 模块连接路由器向8080端口发送数据(客户端模式) init.lua文件: tmr.alarm(0,4000,0,function() dofile("udp.lua") end) init.lua文件结束 udp.lua文件: wifi.setmode(wifi.STATIONAP) stacfg={} stacfg.ssid="qqqqq" stacfg.pwd="11223344" wifi.sta.config(stacfg) wifi.sta.autoconnect(1) ConnectIP = "192.168.0.103" ConnectPort = 8000 UdpSocket = net.createUDPSocket() UdpSocket:on("receive", function(socket, data, port, ip) print("\r\nport:"..port.."---ip:"..ip.."\r\n") uart.write(0,data) end) uart.on("data",0,function(data) if UdpSocket~=nil then UdpSocket:send(ConnectPort, ConnectIP, 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) udp.lua文件结束
三 . 模块开放热点监听端口
1. 模块开放热点建立UDP监听端口通信 init.lua文件: tmr.alarm(0,4000,0,function() dofile("udp.lua") end) init.lua文件结束 udp.lua文件: wifi.setmode(wifi.SOFTAP) apcfg={} apcfg.ssid="ESP_udp" apcfg.pwd="11223344" wifi.ap.config(apcfg) UdpSocket = net.createUDPSocket() UdpSocket:listen(8080) UdpSocket:on("receive", function(socket, data, port, ip) print("\r\nport:"..port.."---ip:"..ip.."\r\n") ConnectPort = port ConnectIP = ip uart.write(0,data) end) uart.on("data",0,function(data) if UdpSocket~=nil then if ConnectPort~=0 then UdpSocket:send(ConnectPort, ConnectIP, data) end end end,0) udp.lua文件结束
手机端与模块间发送数据
四 .模块开放热点建立UDP通信向某个端口发送数据(客户端模式) 1. init.lua文件: tmr.alarm(0,4000,0,function() dofile("udp.lua") end) init.lua文件结束 udp.lua文件: wifi.setmode(wifi.SOFTAP) apcfg={} apcfg.ssid="ESP_udp" apcfg.pwd="11223344" wifi.ap.config(apcfg) UdpSocket = net.createUDPSocket() UdpSocket:on("receive", function(socket, data, port, ip) print("\r\nport:"..port.."---ip:"..ip.."\r\n") ConnectPort = port ConnectIP = ip uart.write(0,data) end) UdpConnectIP = "192.168.4.2" UdpConnectPort = 8000 uart.on("data",0,function(data) if UdpSocket~=nil then if ConnectPort~=0 then UdpSocket:send(UdpConnectPort, UdpConnectIP, data) end end end,0) udp.lua文件结束
UDP间发送数据; 需要模块下对其发送数据,在手机端建立UDP通信;手机端会显示模块的ip和端口然后手机端可以向模块发送数据
2. 手机端通过发送”open”打开继电器; 发送”close”关闭继电器 init.lua文件: RELAY_Pin = 1 gpio.mode(RELAY_Pin, gpio.OUTPUT) gpio.write(RELAY_Pin,0) tmr.alarm(0,4000,0,function() dofile("udp.lua") end) init.lua文件结束 Udp.lua文件: UdpReceData = "" UdpReceDataCnt = 0 UdpReceDataStat = false wifi.setmode(wifi.SOFTAP) apcfg={} apcfg.ssid="ESP_udp" apcfg.pwd="11223344" wifi.ap.config(apcfg) UdpSocket = net.createUDPSocket() UdpSocket:listen(8080) UdpSocket:on("receive", function(socket, data, port, ip) print("\r\nport:"..port.."---ip:"..ip.."\r\n") ConnectPort = port ConnectIP = ip UdpReceData = UdpReceData..data UdpReceDataCnt = 0 UdpReceDataStat = true uart.write(0,data) end) tmr.alarm(1,10,1,function() if UdpReceDataStat == true then UdpReceDataCnt = UdpReceDataCnt+1 if UdpReceDataCnt >= 10 then if UdpReceData=="close" then gpio.write(RELAY_Pin,0) end if UdpReceData=="open" then gpio.write(RELAY_Pin,1) end UdpReceData = "" UdpReceDataCnt = 0 UdpReceDataStat = false end end end) uart.on("data",0,function(data) if UdpSocket~=nil then if ConnectPort~=0 then UdpSocket:send(ConnectPort, ConnectIP, data) end end end,0) udp.lua文件结束
连接模块热点, 创建手机udp客户端 为什么要让模块建立监听端口呢; 因为模块要去向服务端发送数据才可以得到对方的ip和端口,那么要控制继电器不能先让模块给你发送数据吧?而且每次的连接端口都是变化的; 所以让模块去监听端口,其ip和端口都是固定的; 这样也方便控制
交流QQ:1813763867 QQ群:235371864
|