廣博帶你玩esp8266-WIFI芯片(四)(lua開發)--WIFI芯片不通信有個啥用(TCP服務器、客戶端)


經過了前幾次的練習,大家已經掌握了lua語言開發的ESP8266芯片的基本使用了吧,這一次我們就要用WIFI的熱點與終端模式的TCP協議來通信,還可以控制點燈哦!

TCP協議是**傳輸控制協議(TCP,Transmission Control Protocol)是一種面向連接的、可靠的、基於字節流的傳輸層通信協議,**由IETF的RFC 793 定義。
TCP旨在適應支持多網絡應用的分層協議層次結構。 連接到不同但互連的計算機通信網絡的主計算機中的成對進程之間依靠TCP提供可靠的通信服務。TCP假設它可以從較低級別的協議獲得簡單的,可能不可靠的數據報服務。 原則上,TCP應該能夠在從硬線連接到分組交換或電路交換網絡的各種通信系統之上操作。

TCP協議有兩個模式,一個是客戶端模式,一個是服務器模式
如果你選擇服務器模式的話,就意味着你需要等待他人的鏈接,你需要持續監聽某一個端口,當有人鏈接時你就可以通過鏈接後的通道進行通信。

如果你選擇客戶端模式的話,那這與服務器模式相反,你需要主動的鏈接其他人的某個端口,在連接成功後就可以通信。

值得注意的是 :TCP是面向鏈接的通信協議,所以每次通信需要建立鏈接後進行通信,如果中途斷開鏈接,則需要重新進行鏈接纔可以通信。

TCP服務器的使用

TCP服務器的創建

我們先建立TCP服務器。使用的API可以在官方的API網站查找。
在這裏插入圖片描述
代碼的話就是:
表示創建了一個TCP的服務器,但是這還沒完!你還需要監聽一個端口,等待別人鏈接!

server=net.createServer(net.TCP,30)

註冊事件

在這裏插入圖片描述

監聽端口:

在這裏插入圖片描述

代碼:
意思是註冊了接收信息時的回調函數,功能是打印出接收的值。

server:listen(8000,function(conn)    
		conn:on("receive",function(client,payload) 
				print("recv:"..payload)  	
		end)
	end)

TCP服務器整體代碼

因爲TCP服務器是在有網的環境下才能使用,所以我們需要建立WIFI熱點(不知道怎麼辦可以看上期,本期直接給出代碼)
先創建WIFI熱點並設置用戶名密碼,以及有人鏈接時的IP地址的分配的開始值
在串口打印熱點的IP地址,
創建一個TCP服務器並設置監聽8000端口,
註冊接收到信息時在串口打印所接收的信息。

wifi.setmode(wifi.SOFTAP)
wifi.ap.config({ssid="@PHICOMM_D",pwd="123321000"})
cfg =
{
    ip="192.168.1.1",
    netmask="255.255.255.0",
    gateway="192.168.1.1"
}
wifi.ap.setip(cfg)
dhcp_config ={}
dhcp_config.start = "192.168.1.100"
wifi.ap.dhcp.config(dhcp_config)
wifi.ap.dhcp.start()
print("AP_Ip is "..wifi.ap.getip()) 
server=net.createServer(net.TCP,30)
server:listen(8000,function(conn)    
		conn:on("receive",function(client,payload) 
		print("recv:"..payload) 
		end) 	
	end)

TCP服務器測試

效果圖:
發送的hello world已經在串口打印出來了
在這裏插入圖片描述

TCP客戶端的使用

與TCP服務器類似但是又簡單了點,同樣需要創建,但是創建的不是服務器了而是客戶端了

創建TCP客戶端

在這裏插入圖片描述
代碼:

sock =  net.createConnection(net.TCP,0)

連接TCP服務器

在這裏插入圖片描述
代碼:

 sock:connect(8000,"192.168.1.100")

發送消息

在這裏插入圖片描述
代碼:

sock:send("hello pc")

註冊事件

在這裏插入圖片描述
代碼:
註冊接收函數,也有其他的事件,可以在官方API中查找
在這裏插入圖片描述

sock:on("receive",function(sck,data)
           print(data)
          end)

TCP客戶端完整代碼

wifi.setmode(wifi.SOFTAP)
wifi.ap.config({ssid="@PHICOMM_DC",pwd="123321000"})
cfg =
{
    ip="192.168.1.1",
    netmask="255.255.255.0",
    gateway="192.168.1.1"
}
wifi.ap.setip(cfg)
dhcp_config ={}
dhcp_config.start = "192.168.1.100"
wifi.ap.dhcp.config(dhcp_config)
wifi.ap.dhcp.start()
print("AP_Ip is "..wifi.ap.getip()) 
arr={}
t = tmr.create()
t:register(1000,tmr.ALARM_AUTO,function()
    arr=nil
    arr=wifi.ap.getclient()
    for mac,ip in pairs(arr) do
        print(mac,ip)
        t:stop()
        t:register(1000,tmr.ALARM_SINGLE,tcpclient)
        t:start()
        end
        
        return

end)
t:start()
function tcpclient()
     sock =  net.createConnection(net.TCP,0)
     sock:connect(8000,"192.168.1.100")
     sock:send("hello pc")
     sock:on("receive",function(sck,data)
           print(data)
          end)
end

TCP客戶端測試

最後是TCP客戶端的測試
使用時需要在連接WIFI後的5秒內打開TCPServer才能正確使用。
如果你不用WIFI的熱點模式!只需要將WIFI芯片連接至WIFI後連接TCP服務器就可以,當然!需要改變IP地址,否則不能正確連接
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章