合宙Air105|Socket|UDP |TCP/IP|W5500|Serial 串口|透传|DTU|网络测试助手|双机互联|内网测试|官方demo|学习(8-3):Socket网络接口-双机互联透传
?基礎(chǔ)資料
基于Air105開發(fā)板:Air105 - LuatOS 文檔
上手:開發(fā)上手 - LuatOS 文檔
探討重點
對官方Socket網(wǎng)絡(luò)接口demo中DTU連接示例(dtu_demo.lua)進(jìn)行復(fù)現(xiàn)及分析,進(jìn)行用阻塞方式做串口透傳DTU內(nèi)容的學(xué)習(xí)及探討。
基本連接步驟及說明
合宙Air105|Socket|UDP |TCP/IP|W5500|TCP&UDP測試|服務(wù)器|客戶端|官方demo|學(xué)習(xí)(8-2):Socket網(wǎng)絡(luò)接口- UDP |TCP/IP連接示例_Medlar_CN的博客-CSDN博客
實現(xiàn)功能
不通過交換機(jī)或路由器等設(shè)備,雙機(jī)互聯(lián)條件下,進(jìn)行內(nèi)網(wǎng)透傳|DTU|基于UDP |TCP/IP的實現(xiàn)的網(wǎng)絡(luò)接口測試及學(xué)習(xí);
硬件準(zhǔn)備
Air105開發(fā)板1塊,面包板1塊,W5500網(wǎng)絡(luò)模塊,CH340G串口模塊,雙機(jī)互聯(lián)線(交叉線,RJ45接口),導(dǎo)線若干。
接線
W5500模塊是標(biāo)準(zhǔn)SPI設(shè)備,可參考:
合宙Air105|攝像頭|capture|SPI|Serial 串口|TFTLCD|Micro SD卡|GC032A|USB轉(zhuǎn)TTL|官方demo|學(xué)習(xí)(2-1):攝像頭camera-capture_Medlar_CN的博客
中SPI接口外置sd卡的接線及串口模塊的接線方式。
W5500接線說明:
| W5500管腳功能 | air105對應(yīng)管腳 | 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口設(shè)置:
w5500.init(spi.SPI_2, 24000000, pin.PB03, pin.PC00, pin.PE10)。
W5500.config() --默認(rèn)是DHCP模式
UART3串口設(shè)置:
uart.setup(3,115200,8,1) --使用串口3
軟件版本
AIR105:LuatOS@AIR105 base 22.10 bsp V0013
LLCOM串口調(diào)試工具
TCP&UDP測試工具
網(wǎng)絡(luò)調(diào)試助手
例程
"main.lua.lua” (根據(jù)官方demo修改)
"dtu_demo_tcp.lua" (根據(jù)官方demo修改)
"dtu_demo_udp.lua" (根據(jù)官方demo修改)
軟件使用
W5500模塊數(shù)據(jù)手冊V1.3版
接口文檔可參考:socket網(wǎng)絡(luò)接口
w5500以太網(wǎng)驅(qū)動 - LuatOS 文檔
雙機(jī)互聯(lián)線(交叉線的做法)
平常電腦主機(jī)與路由器相連,均采用RJ45接口,直連線(兩端線序相同,均為568A或568B線序)。而當(dāng)采用電腦主機(jī)與AIR105+W5500模塊直接相連時,需采用交叉線序,即一端為568A或568B。
568A標(biāo)準(zhǔn)線序:
1、白綠、2、綠、3、白橙、4、藍(lán)、5、白藍(lán)、6、橙、7、白棕、8、棕,
568B標(biāo)準(zhǔn)線序:
1、白橙,2、橙,3、白綠,4、藍(lán),5、白藍(lán),6、綠,7、白棕,8、棕
兩種線序的主要區(qū)別:
8根線中的1號和3號線,2號和6號線互換,即1-3、2-6交叉,類似于串口的TX,RX對接方式,進(jìn)行數(shù)據(jù)的收發(fā)。
IP地址的設(shè)置
由于未接入路由器等網(wǎng)絡(luò)設(shè)備,無DHCP功能,模塊及主機(jī)均需采用手動設(shè)置靜態(tài)IP地址(使用內(nèi)網(wǎng)網(wǎng)段)。
W5500模塊IP設(shè)置:
--設(shè)置靜態(tài)IP和DNS后,log輸出中顯示手工設(shè)定IP,速度憂于DHCPw5500.config("192.168.1.210","255.255.255.0","192.168.1.1",string.fromHex("d1f17f7f97ae6bea")) ?--本地雙機(jī)互連TCP serverw5500.bind(socket.ETH0)提醒
設(shè)置完成插入網(wǎng)線后,一定要在電腦主機(jī)上ping一下模塊,再進(jìn)行后續(xù)操作。
DTU設(shè)備是什么?
dtu設(shè)備也就是無線終端設(shè)備,指專門用于將串口數(shù)據(jù)與IP數(shù)據(jù)之間進(jìn)行來回轉(zhuǎn)換的,然后通過無線通信網(wǎng)絡(luò)進(jìn)行傳送的無線終端設(shè)備。
注意
為方便調(diào)試和區(qū)分,將官方demo的dtu_demo.lua根據(jù)server和client端、收發(fā)送原理和所用的協(xié)議,進(jìn)行了代碼調(diào)整,修改后的源文件為: "dtu_demo_tcp" , "dtu_demo_udp",“main.lua” 見附件。
具體修改如下文分析所述:
DTU透傳(AIR105+W5500作為TCP 服務(wù)器)
端口無限制,注意避免沖突。內(nèi)網(wǎng)測試,無需接入互聯(lián)網(wǎng),建議關(guān)閉防火墻或其他殺毒軟件,避免端口限制。端口選擇無限制,但應(yīng)注意避免沖突。
Main.lua:
require "dtu_demo_tcp" --W5500+AIR105作為tcp服務(wù)器時啟用 dtuDemo(3, 14000) -- --本地雙機(jī)互連,對絞線,W5500+AIR105作為tcp服務(wù)器時啟用--采用UART3,TCP服務(wù)端口設(shè)置為14000dtu_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!')--[[注冊串口事件回調(diào) 給UART3注冊一個接收事件回調(diào),在Air105 UART3接收到數(shù)據(jù)的時候進(jìn)行讀取和打印 接收string類型的數(shù)據(jù) 代碼如下 uart.on(1, "receive", function(id, len)local data = uart.read(id, len) --string 讀取到的數(shù)據(jù) / 傳入zbuff時,返回讀到的長度,并把zbuff指針后移log.info(PROJECT .. ".receive-" .. id, data) end) ]]uart.on(uart_id, "receive", function(id, len)--[[uart.rx(id, buff)buff形式讀串口,一次讀出全部數(shù)據(jù)存入buff中,如果buff空間不夠會自動擴(kuò)展,目前只有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) --本地雙機(jī)互連UDPsocket.config(netc,port) --本地雙機(jī)互連TCP通訊部分:
netc = socket.create(socket.ETH0, d1Name) --d1Name:taskNamesocket.config(netc,port) --本地雙機(jī)互連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的硬件協(xié)議棧不支持一對多,關(guān)鍵確認(rèn)環(huán)節(jié)if result thenlog.info("服務(wù)器連上了")libnet.tx(d1Name, 0, netc, "helloworld")endend協(xié)程:
function dtuDemo(uart_id, port)--[[--- 創(chuàng)建一個任務(wù)線程,在模塊最末行調(diào)用該函數(shù)并注冊模塊中的任務(wù)函數(shù),main.lua導(dǎo)入該模塊即可 -- @param fun 任務(wù)函數(shù)名,用于resume喚醒時調(diào)用 -- @param taskName 任務(wù)名稱,用于喚醒任務(wù)的id -- @param cbFun 接收到非目標(biāo)消息時的回調(diào)函數(shù) -- @param ... 任務(wù)函數(shù)fun的可變參數(shù) -- @return co 返回該任務(wù)的線程號 ]]sysplus.taskInitEx(dtuTask, d1Name, netCB, uart_id, port) end主機(jī)開啟服務(wù)器后,顯示服務(wù)器連接狀態(tài),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服務(wù)器連上了 [2022-12-20 16:39:59.201] I/?:04021206985671032DTU透傳(采用UDP方式連接)
main.lua:
require "dtu_demo_udp" --采用udp協(xié)議時時啟用 dtuDemo(3, "192.168.1.117", 14000) --本地雙機(jī)互連,對絞線,采用udp協(xié)議時時啟用。--本例電腦主機(jī)IP地址設(shè)置為:192.168.1.117通訊部分:??????
netc = socket.create(socket.ETH0, d1Name) --d1Name:taskName socket.config(netc,8080, true,false) --本地雙機(jī)互連,為了區(qū)別端口設(shè)置為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("服務(wù)器連上了") libnet.tx(d1Name, 0, netc, "helloworld") endUDP協(xié)議下的透傳實例?:
連接過程中的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 服務(wù)器連上了 [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 收到服務(wù)器數(shù)據(jù),長度 18 [2022-12-22 07:21:27.700] I/?:0 402120 73976 73976總結(jié)
以上是生活随笔為你收集整理的合宙Air105|Socket|UDP |TCP/IP|W5500|Serial 串口|透传|DTU|网络测试助手|双机互联|内网测试|官方demo|学习(8-3):Socket网络接口-双机互联透传的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 同事关系再好也别表现,学做曾国藩和左宗棠
- 下一篇: STM32F103 16路PWM 配置