日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

合宙Air105|Socket|UDP |TCP/IP|W5500|Serial 串口|透传|DTU|网络测试助手|双机互联|内网测试|官方demo|学习(8-3):Socket网络接口-双机互联透传

發布時間:2023/12/20 编程问答 32 豆豆

?基礎資料

基于Air105開發板:Air105 - LuatOS 文檔

上手:開發上手 - LuatOS 文檔

探討重點

對官方Socket網絡接口demo中DTU連接示例(dtu_demo.lua)進行復現及分析,進行用阻塞方式做串口透傳DTU內容的學習及探討。

基本連接步驟及說明

合宙Air105|Socket|UDP |TCP/IP|W5500|TCP&UDP測試|服務器|客戶端|官方demo|學習(8-2):Socket網絡接口- UDP |TCP/IP連接示例_Medlar_CN的博客-CSDN博客

實現功能

不通過交換機或路由器等設備,雙機互聯條件下,進行內網透傳|DTU|基于UDP |TCP/IP的實現的網絡接口測試及學習;

硬件準備

Air105開發板1塊,面包板1塊,W5500網絡模塊,CH340G串口模塊,雙機互聯線(交叉線,RJ45接口),導線若干。

接線

W5500模塊是標準SPI設備,可參考

合宙Air105|攝像頭|capture|SPI|Serial 串口|TFTLCD|Micro SD卡|GC032A|USB轉TTL|官方demo|學習(2-1):攝像頭camera-capture_Medlar_CN的博客

中SPI接口外置sd卡的接線及串口模塊的接線方式。

W5500接線說明:

W5500管腳功能

air105對應管腳

air105管腳功能

MOSI

pin.PB04

SPI_2_MOSI

MISO

pin.PB05

SPI_2_MISO

SCLK

pin.PB02

SPI_2_CLK

SCS

pin.PB03

SPI_2_CSN

INT

pin.PC00

GPIO32

RST

pin.PE10

GPIO74

GND

GND

GND

VCC

3V3

3V3

PIN口設置:

w5500.init(spi.SPI_2, 24000000, pin.PB03, pin.PC00, pin.PE10)。

W5500.config() --默認是DHCP模式

UART3串口設置:

uart.setup(3,115200,8,1) --使用串口3

軟件版本

AIR105:LuatOS@AIR105 base 22.10 bsp V0013

LLCOM串口調試工具

TCP&UDP測試工具

網絡調試助手

例程

"main.lua.lua” (根據官方demo修改)

"dtu_demo_tcp.lua" (根據官方demo修改)

"dtu_demo_udp.lua" (根據官方demo修改)

軟件使用

W5500模塊數據手冊V1.3版

接口文檔可參考:socket網絡接口

w5500以太網驅動 - LuatOS 文檔

雙機互聯線(交叉線的做法)

平常電腦主機與路由器相連,均采用RJ45接口,直連線(兩端線序相同,均為568A或568B線序)。而當采用電腦主機與AIR105+W5500模塊直接相連時,需采用交叉線序,即一端為568A或568B。

568A標準線序:

1、白綠、2、綠、3、白橙、4、藍、5、白藍、6、橙、7、白棕、8、棕,

568B標準線序:

1、白橙,2、橙,3、白綠,4、藍,5、白藍,6、綠,7、白棕,8、棕

兩種線序的主要區別:

8根線中的1號和3號線,2號和6號線互換,即1-3、2-6交叉,類似于串口的TX,RX對接方式,進行數據的收發。

IP地址的設置

由于未接入路由器等網絡設備,無DHCP功能,模塊及主機均需采用手動設置靜態IP地址(使用內網網段)。

W5500模塊IP設置:

--設置靜態IP和DNS后,log輸出中顯示手工設定IP,速度憂于DHCPw5500.config("192.168.1.210","255.255.255.0","192.168.1.1",string.fromHex("d1f17f7f97ae6bea")) ?--本地雙機互連TCP serverw5500.bind(socket.ETH0)

提醒

設置完成插入網線后,一定要在電腦主機上ping一下模塊,再進行后續操作。

DTU設備是什么?

dtu設備也就是無線終端設備,指專門用于將串口數據與IP數據之間進行來回轉換的,然后通過無線通信網絡進行傳送的無線終端設備。

注意

為方便調試和區分,將官方demo的dtu_demo.lua根據server和client端、收發送原理和所用的協議,進行了代碼調整,修改后的源文件為: "dtu_demo_tcp" , "dtu_demo_udp",“main.lua” 見附件。

具體修改如下文分析所述:

DTU透傳(AIR105+W5500作為TCP 服務器)

端口無限制,注意避免沖突。內網測試,無需接入互聯網,建議關閉防火墻或其他殺毒軟件,避免端口限制。端口選擇無限制,但應注意避免沖突。

Main.lua:

require "dtu_demo_tcp" --W5500+AIR105作為tcp服務器時啟用 dtuDemo(3, 14000) -- --本地雙機互連,對絞線,W5500+AIR105作為tcp服務器時啟用--采用UART3,TCP服務端口設置為14000

dtu_demo_tcp.lua主要代碼分析:

local function dtuTask(uart_id, port)d1Online = falselocal tx_buff = zbuff.create(1024)local rx_buff = zbuff.create(1024)local netclocal result, param, is_err, rIP, rPortresult = uart.setup(uart_id,115200,8,1)uart.write(uart_id, 'uart init OK!')--[[注冊串口事件回調 給UART3注冊一個接收事件回調,在Air105 UART3接收到數據的時候進行讀取和打印 接收string類型的數據 代碼如下 uart.on(1, "receive", function(id, len)local data = uart.read(id, len) --string 讀取到的數據 / 傳入zbuff時,返回讀到的長度,并把zbuff指針后移log.info(PROJECT .. ".receive-" .. id, data) end) ]]uart.on(uart_id, "receive", function(id, len)--[[uart.rx(id, buff)buff形式讀串口,一次讀出全部數據存入buff中,如果buff空間不夠會自動擴展,目前只有air105支持這個操作傳入值類型 解釋int 串口id, uart0寫0, uart1寫1zbuff zbuff對象返回值類型 解釋int 返回讀到的長度,并把zbuff指針后移]]uart.rx(id, com_buff)if d1Online thensys_send(d1Name, socket.EVENT, 0)endend)netc = socket.create(socket.ETH0, d1Name) --d1Name:taskName-- socket.debug(netc, true)--socket.config(netc,port,true,false) --本地雙機互連UDPsocket.config(netc,port) --本地雙機互連TCP

通訊部分:

netc = socket.create(socket.ETH0, d1Name) --d1Name:taskNamesocket.config(netc,port) --本地雙機互連TCPwhile true dolog.info(rtos.meminfo("sys"))result = libnet.waitLink(d1Name, 0, netc)result = libnet.listen(d1Name, 0, netc)d1Online = resultif result thenresult,_ = socket.accept(netc, nil) --W5500的硬件協議棧不支持一對多,關鍵確認環節if result thenlog.info("服務器連上了")libnet.tx(d1Name, 0, netc, "helloworld")endend

協程:

function dtuDemo(uart_id, port)--[[--- 創建一個任務線程,在模塊最末行調用該函數并注冊模塊中的任務函數,main.lua導入該模塊即可 -- @param fun 任務函數名,用于resume喚醒時調用 -- @param taskName 任務名稱,用于喚醒任務的id -- @param cbFun 接收到非目標消息時的回調函數 -- @param ... 任務函數fun的可變參數 -- @return co 返回該任務的線程號 ]]sysplus.taskInitEx(dtuTask, d1Name, netCB, uart_id, port) end

主機開啟服務器后,顯示服務器連接狀態,log信息:

[2022-12-20 16:39:59.063] w5500_ip_state 1115:ip 0 -> 1 [2022-12-20 16:39:59.109] w5500_ip_state 1115:ip 0 -> 1 [2022-12-20 16:39:59.201] w5500_link_state 1074:link 0 -> 1 [2022-12-20 16:39:59.201] w5500_nw_state 980:network ready [2022-12-20 16:39:59.201] I/?:0服務器連上了 [2022-12-20 16:39:59.201] I/?:04021206985671032

DTU透傳(采用UDP方式連接)

main.lua:

require "dtu_demo_udp" --采用udp協議時時啟用 dtuDemo(3, "192.168.1.117", 14000) --本地雙機互連,對絞線,采用udp協議時時啟用。--本例電腦主機IP地址設置為:192.168.1.117

通訊部分:??????

netc = socket.create(socket.ETH0, d1Name) --d1Name:taskName socket.config(netc,8080, true,false) --本地雙機互連,為了區別端口設置為8080,可以自訂while true do log.info(rtos.meminfo("sys")) result = libnet.waitLink(d1Name, 0, netc) result = libnet.connect(d1Name, 5000, netc, ip, port) d1Online = result if result then log.info("服務器連上了") libnet.tx(d1Name, 0, netc, "helloworld") end

UDP協議下的透傳實例?:

連接過程中的log文件:

[2022-12-22 07:17:18.812] D/main loadlibs luavm 204792 15344 15344 [2022-12-22 07:17:18.812] D/main loadlibs sys 402120 51112 51616 [2022-12-22 07:17:18.813] I/?:11 402120 69888 69888 [2022-12-22 07:17:18.859] w5500_ip_state 1115:ip 0 -> 1 [2022-12-22 07:17:18.864] w5500_ip_state 1115:ip 0 -> 1 [2022-12-22 07:17:18.967] w5500_link_state 1074:link 0 -> 1 [2022-12-22 07:17:18.967] w5500_nw_state 980:network ready [2022-12-22 07:17:18.967] I/?:0 服務器連上了 [2022-12-22 07:17:18.967] I/?:0 402120 69856 71032 [2022-12-22 07:17:23.984] I/?:0 402120 69888 71032[2022-12-22 07:21:23.968] I/?:0 402120 69888 71032 [2022-12-22 07:21:27.700] I/?:-1071709759 收到服務器數據,長度 18 [2022-12-22 07:21:27.700] I/?:0 402120 73976 73976

總結

以上是生活随笔為你收集整理的合宙Air105|Socket|UDP |TCP/IP|W5500|Serial 串口|透传|DTU|网络测试助手|双机互联|内网测试|官方demo|学习(8-3):Socket网络接口-双机互联透传的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。