1. 程式人生 > >ESP8266 -- lua開發學習之路 五 (TCP客戶端透傳)

ESP8266 -- lua開發學習之路 五 (TCP客戶端透傳)

透傳本人理解就是把串列埠接收的資料通過網路傳送給伺服器,  客戶端接收的資料通過串列埠再發送出去 ESP8266充當一個通道把網路資料與串列埠聯絡起來

init.lua檔案:

--[[
init.lua檔案中不用做過多的操作初始化和載入檔案...
]]
gpio.mode(4,gpio.OUTPUT)
gpio.write(4,1)

tmr.alarm(1, 3000, 0, function()
    dofile("tcpclient.lua")
end)

tcpclient.lua檔案:

LinkStat = 0        --定義連線狀態
TCPClient = nil     --建立停tcp客戶端返回引數



wifi.setmode(wifi.STATIONAP)

local APcfg = {
    ssid="ESP8266WIFI",
    pwd="12345678"      
}
wifi.ap.config(APcfg) 

local stacfg={
    ssid="TP-Link",      
    pwd="12345678"  
}
wifi.sta.config(stacfg)
wifi.sta.autoconnect(1) --設定模組自動連線WIFI網路


--[[
定時器3 每秒迴圈一次
在定時器中去建立客戶端連線伺服器,註冊接收資料事件,斷開事件,重連事件
在連線上伺服器後停止此定時器
斷開連線後啟動此定時器,再次去連線伺服器
]]
tmr.alarm(3,1000,1,function()
    if LinkStat == 0 then  --LinkStat=0表示沒有連線伺服器
        TCPClient = net.createConnection(net.TCP,0)   --建立客戶端
     
        TCPClient:connect(8080,"192.168.191.1")   --連線伺服器 埠和ip

        TCPClient:on("receive", function(sck, data) --註冊接收資料函式 把接收的資料通過串列埠傳送出去
              uart.write(0,data) 
        end)
        TCPClient:on("connection", function(sck, c) --註冊重連函式連線斷開會呼叫此函式
            LinkStat = 1
            print("Link OK")
            tmr.stop(3)

            TCPClient:on("disconnection", function(sck, c) --註冊斷函式,斷開連線時啟動定時器重新連線
                LinkStat = 0
                print("link no")
                tmr.start(3)
            end)
       end)
       if  LinkStat == 0 then print("LinkError") end
    end
end)


--串列埠接收事件
uart.on("data",0,function (receive)       
               if  TCPClient ~= nil then--當客戶端有連結時把串列埠接收的資料傳送給tcp伺服器
                  TCPClient:send(receive,function() end)
               end
end,0)