ESP8266 lua设置TCP客户端连接路由器

本帖最后由 沙漠之痕 于 2018-11-7 12:45 编辑

1. 设置模块连接路由器,并打印路由器分配的ip
Init.lua 文件:
tmr.alarm(0,4000,0,function()
    dofile("tcpclient.lua")
end)
Init.lua 文件结束
tcpclient.lua 文件:
wifi.setmode(wifi.STATION)
cfg={}
cfg.ssid="qqqqq"
cfg.pwd="11223344"
wifi.sta.config(cfg)
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)
tcpclient.lua 文件结束

1.png (118.2 KB, 下载次数: 0)

下载附件

 保存到相册

2018-11-6 14:30 上传

</ignore_js_op>


2. 参照官方手册,创建客户端连接服务器;看见模块获取了ip 但是连接不上服务器
Init.lua 文件:
tmr.alarm(0,4000,0,function()
    dofile(“tcpclient.lua”)
end)
Init.lua 文件结束

tcpclient.lua 文件:
wifi.setmode(wifi.STATION)
local stacfg={
    ssid="qqqqq",      
    pwd="11223344"  
}
wifi.sta.config(stacfg)
wifi.sta.autoconnect(1)
TCPClient = net.createConnection(net.TCP,0)  
TCPClient:connect(8080,"192.168.0.105")   
TCPClient:on("receive", function(sck, data)
        uart.write(0,data)
end)
TCPClient:on("disconnection", function(sck, c)
        print("Disconnection")
end)
TCPClient:on("connection", function(sck, c)
        print("Connection")
end)
----------Got IP Style:+IP-> xxx.xxx.xxx.xxx----------------------------
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----------------------------------
tcpclient.lua 文件结束

2.png (203.63 KB, 下载次数: 0)

下载附件

 保存到相册

2018-11-6 14:31 上传

</ignore_js_op>


3. 是不是,没有获取到ip 就去连接了呢?添加一个定时器延时 10 秒后再去创建 TCP 客户端连接服务器,这下可以看到能连接上服务器
Init.lua 文件:
tmr.alarm(0,4000,0,function()
    dofile(“tcpclient.lua”)
end)
Init.lua 文件结束
tcpclient.lua 文件:
wifi.setmode(wifi.STATION)
local stacfg={
    ssid=“qqqqq”,      
    pwd=“11223344”  
}
wifi.sta.config(stacfg)
wifi.sta.autoconnect(1)
----------Got IP Style:+IP-> xxx.xxx.xxx.xxx----------------------------
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----------------------------------
tmr.alarm(3,10000,0,function()
    TCPClient = net.createConnection(net.TCP,0)  
    TCPClient:connect(8080,“192.168.0.105”)   
   
    TCPClient:on(“receive”, function(sck, data)
        uart.write(0,data)
    end)
    TCPClient:on(“disconnection”, function(sck, c)
        print(“Disconnection”)
    end)
    TCPClient:on(“connection”, function(sck, c)
        print(“Connection”)
    end)
end)
tcpclient.lua 文件结束

<ignore_js_op>

3.png (131.31 KB, 下载次数: 0)

下载附件

 保存到相册

2018-11-6 14:31 上传

</ignore_js_op>


那断开服务器,再重新打开服务器,客户端又不连接了。。。

<ignore_js_op>

4.png (167.88 KB, 下载次数: 0)

下载附件

 保存到相册

2018-11-6 14:32 上传

</ignore_js_op>

4. 如何让模块断开连接后一直自动重连服务器呢?
Init.lua 文件:
tmr.alarm(0,4000,0,function()
    dofile("tcpclient.lua")
end)
Init.lua 文件结束
tcpclient.lua 文件:
wifi.setmode(wifi.STATION)
local stacfg={
    ssid="qqqqq",      
    pwd="11223344"  
}
wifi.sta.config(stacfg)
wifi.sta.autoconnect(1)
tmr.alarm(3,1000,1,function()
    TCPClient = net.createConnection(net.TCP,0)  
    TCPClient:connect(8080,"192.168.0.105")   
    TCPClient:on("receive", function(sck, data)
        uart.write(0,data)
    end)
    TCPClient:on("disconnection", function(sck, c)
        print("Disconnection")
        tmr.start(3)
    end)
    TCPClient:on("connection", function(sck, c)
        print("Connection")
        tmr.stop(3)
    end)
end)
----------Got IP Style:+IP-> xxx.xxx.xxx.xxx----------------------------
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----------------------------------
tcpclient.lua 文件结束

5.png (168.23 KB, 下载次数: 0)

下载附件

 保存到相册

2018-11-6 14:33 上传

</ignore_js_op>


5. 通过接收TCP 服务器的控制指令“ 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("tcpclient.lua")
end)
Init.lua 文件结束
tcpclient.lua 文件:
LinkStat = 0      
TCPClient = nil   
ClientReceData = ""
ClientReceCnt = 0
ClientReceDataStat = true
wifi.setmode(wifi.STATION)
local stacfg={
    ssid="qqqqq",      
    pwd="11223344"  
}
wifi.sta.config(stacfg)
wifi.sta.autoconnect(1)
tmr.alarm(1,1000,1,function()
    if LinkStat == 0 then
        TCPClient = net.createConnection(net.TCP,0)  
        TCPClient:connect(8080,"192.168.0.105")   
        TCPClient:on("receive", function(sck, data)
            ClientReceData = ClientReceData..data
            ClientReceCnt = 0
            ClientReceDataStat = true
        end)
        TCPClient:on("connection", function(sck, c)
            LinkStat = 1
            print("Connection")
            tmr.stop(1)
       end)
       TCPClient:on("disconnection", function(sck, c)
                LinkStat = 0
                print("Disconnection")
                tmr.start(1)
       end)
       if  LinkStat == 0 then print("LinkError") end
    end
end)
tmr.alarm(2,10,1,function()
    if ClientReceDataStat==true then
        ClientReceCnt=ClientReceCnt+1
        if ClientReceCnt>=10 then --receive finsion
           if ClientReceData=="open" then
                gpio.write(RELAY_Pin,1)
           end
           if ClientReceData=="close" then
                gpio.write(RELAY_Pin,0)
           end
           uart.write(0,ClientReceData)
           ClientReceData = ""
           ClientReceCnt = 0
           ClientReceDataStat = false
       end
   end
end)
----------Got IP Style:+IP-> xxx.xxx.xxx.xxx----------------------------
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----------------------------------
tcpclient.lua 文件结束

6.png (177.55 KB, 下载次数: 1)

下载附件

 保存到相册

2018-11-6 14:33 上传

</ignore_js_op>



<ignore_js_op>

7.png (157.05 KB, 下载次数: 0)

下载附件

 保存到相册

2018-11-6 14:34 上传

</ignore_js_op>



<ignore_js_op>

8.png (475.22 KB, 下载次数: 1)

下载附件

 保存到相册

2018-11-6 14:34 上传

</ignore_js_op>



<ignore_js_op>

9.png (91.76 KB, 下载次数: 0)

下载附件

 保存到相册

2018-11-6 14:35 上传

</ignore_js_op>


6. 我想使用串口助手给模块发送数据,然后让模块吧数据发送给TCP 服务器:
TCP 服务器发送的数据我们通过模块的串口发送出来了,但是服务器并没有接收到串口发送过来的数据

<ignore_js_op>

0.png (96.97 KB, 下载次数: 0)

下载附件

 保存到相册

2018-11-6 14:35 上传

</ignore_js_op>


通过串口助手发送数据给服务器:
Init.lua 文件
RELAY_Pin = 1
gpio.mode(RELAY_Pin, gpio.OUTPUT)
gpio.write(RELAY_Pin,0)
tmr.alarm(0,4000,0,function()
    dofile(“tcpclient.lua”)
end)
Init.lua 文件结束
tcpclient.lua 文件
LinkStat = 0      
TCPClient = nil   
ClientReceData = ““
ClientReceCnt = 0
ClientReceDataStat = true
wifi.setmode(wifi.STATION)
local stacfg={
    ssid=“qqqqq”,      
    pwd=“11223344”  
}
wifi.sta.config(stacfg)
wifi.sta.autoconnect(1)
tmr.alarm(1,1000,1,function()
    if LinkStat == 0 then
        TCPClient = net.createConnection(net.TCP,0)  
        TCPClient:connect(8080,“192.168.0.105”)   
        TCPClient:on(“receive”, function(sck, data)
            ClientReceData = ClientReceData…data
            ClientReceCnt = 0
            ClientReceDataStat = true
        end)
        TCPClient:on(“connection”, function(sck, c)
            LinkStat = 1
            print(“Connection”)
            tmr.stop(1)
       end)
       TCPClient:on(“disconnection”, function(sck, c)
                LinkStat = 0
                print(“Disconnection”)
                tmr.start(1)
       end)
       if  LinkStat == 0 then print(“LinkError”) end
    end
end)
tmr.alarm(2,10,1,function()
    if ClientReceDataStattrue then
        ClientReceCnt=ClientReceCnt+1
        if ClientReceCnt>=10 then --receive finsion
           if ClientReceData"open” then
                gpio.write(RELAY_Pin,1)
           end
           if ClientReceData==“close” then
                gpio.write(RELAY_Pin,0)
           end
           uart.write(0,ClientReceData)
           ClientReceData = “”
           ClientReceCnt = 0
           ClientReceDataStat = false
       end
   end
end)
----------Got IP Style:+IP-> xxx.xxx.xxx.xxx----------------------------
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----------------------------------
------------------uart  send  data  to  server ----------------
uart.on(“data”,0,function(data)
    if  TCPClient ~= nil then
       TCPClient:send(data,function() end)
    end
end,0)
--------------------end uart send data to server------------------
tcpclient.lua 文件结束

<ignore_js_op>

10.png (149.85 KB, 下载次数: 1)

下载附件

 保存到相册

2018-11-6 14:36 上传

</ignore_js_op>





11.png (438.11 KB, 下载次数: 0)

下载附件

 保存到相册

2018-11-6 14:36 上传

</ignore_js_op>



<ignore_js_op>

12.png (121.52 KB, 下载次数: 1)

下载附件

 保存到相册

2018-11-6 14:37 上传

</ignore_js_op>





<ignore_js_op>

ESP8266 TCP客户端连接路由器 lua源码.zip

(6.99 KB, 下载次数: 1)

2018-11-7 12:45 上传
点击文件名下载附件
源码
下载积分: 黑币 -5

</ignore_js_op>








交流QQ:1813763867
QQ群:607064330



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值