李小龍 朱海霞 趙凱熠 趙晨翔 董正琪
摘 要:文章設(shè)計(jì)了一種無(wú)線(xiàn)傳輸?shù)奶摂M串口系統(tǒng),采用Windows驅(qū)動(dòng)+上位機(jī)軟件+下位機(jī)終端的方式,實(shí)現(xiàn)了PC與下位機(jī)的高速數(shù)據(jù)傳輸。電腦通過(guò)虛擬出的串口控制下位機(jī)完成包括但不限于UART、SPI、IIC總線(xiàn)、顯示屏以及各種外設(shè)。
關(guān)鍵詞:虛擬串口;ESP32;WiFi
0 引言
傳統(tǒng)的電磁信號(hào)傳輸是利用實(shí)體串口接收和發(fā)送信息,PC的核心是一個(gè)高速的中央處理器,它并沒(méi)有集成UART之類(lèi)的低速通信接口。實(shí)際開(kāi)發(fā)時(shí),通過(guò)USB/PCI-E總線(xiàn)連接MCU,或者USB轉(zhuǎn)TTL線(xiàn)材,這些需要寫(xiě)操作系統(tǒng)與MCU的通信協(xié)議。這類(lèi)傳統(tǒng)的實(shí)體串口開(kāi)發(fā)不僅需要大量的財(cái)力物力,而且在這樣長(zhǎng)的數(shù)據(jù)交換鏈中數(shù)據(jù)極易丟失。
本項(xiàng)目研究目的就是通過(guò)無(wú)線(xiàn)和虛擬硬件技術(shù),在PC操作系統(tǒng)中虛擬出串口,并通過(guò)無(wú)線(xiàn)技術(shù)與下位機(jī)通信,實(shí)現(xiàn)操作系統(tǒng)直接控制下位機(jī)的無(wú)線(xiàn)串口。
1 虛擬串口的意義
在傳統(tǒng)的測(cè)控系統(tǒng)中,通常電信號(hào)傳輸信息,這種傳輸方式常常會(huì)帶來(lái)電磁干擾和信號(hào)衰減。利用電磁信號(hào),脫離物理連接就可以克服電信號(hào)傳輸帶來(lái)的電磁干擾和信號(hào)衰減,同時(shí)也避免了錯(cuò)綜復(fù)雜的線(xiàn)路連接,有效地節(jié)省人力物力。
本文以串口為起點(diǎn),對(duì)無(wú)線(xiàn)傳輸協(xié)議,傳輸硬件選擇,傳輸中數(shù)據(jù)的壓縮和復(fù)原,數(shù)據(jù)的加密,Windows底層驅(qū)動(dòng)等進(jìn)行研究,試圖在PC設(shè)備上虛擬出一個(gè)無(wú)線(xiàn)的串口,并在此基礎(chǔ)上虛擬SPI,IIC,CAN,SDIO等總線(xiàn),提供PC與單片機(jī)的無(wú)線(xiàn)通信方式。圖1為虛擬串口與實(shí)體串口的數(shù)據(jù)鏈,圖中能直觀(guān)看出實(shí)體串口數(shù)據(jù)鏈臃長(zhǎng)、不安全。
2 系統(tǒng)總體設(shè)計(jì)
本項(xiàng)目是基于ESP32且具有上位機(jī)的通信軟件,上位機(jī)驅(qū)動(dòng)程序與下位機(jī)解析控制的從控制器設(shè)計(jì)。上位機(jī)部分用QT實(shí)現(xiàn)文本編輯,數(shù)據(jù)可視化與通信;驅(qū)動(dòng)程序部分負(fù)責(zé)將文本數(shù)據(jù)轉(zhuǎn)化為無(wú)線(xiàn)信號(hào)轉(zhuǎn)發(fā)給下位機(jī),同時(shí)接收下位機(jī)的反饋;下位機(jī)用ESP32解析指令并運(yùn)行,同時(shí)反饋狀態(tài)。
3 上位機(jī)軟件開(kāi)發(fā)
上位機(jī)采用QT開(kāi)發(fā),軟件分為3個(gè)部分。第一部分是數(shù)據(jù)傳輸?shù)牡讓?,包括TCP/UDP的套接字和Qt5封裝的串口類(lèi),負(fù)責(zé)數(shù)據(jù)的傳輸與接收;第二部分是數(shù)據(jù)的編輯部分,負(fù)責(zé)顯示數(shù)據(jù),同時(shí)編輯數(shù)據(jù),支持語(yǔ)法高亮等特性;第三部分是可視化界面,包括數(shù)據(jù)波形顯示器以及圖片顯示器等,保留給開(kāi)發(fā)人員,便于下位機(jī)的數(shù)據(jù)分析。本項(xiàng)目開(kāi)發(fā)的上位機(jī)軟件界面如圖2所示。
4 驅(qū)動(dòng)開(kāi)發(fā)
這一部分主要負(fù)責(zé)將串口與TCP/UDP之間的數(shù)據(jù)轉(zhuǎn)發(fā)。采用Microsoft Visual Studio(WDK)開(kāi)發(fā)。本項(xiàng)目開(kāi)發(fā)的Windows驅(qū)動(dòng)界面如圖3所示。
5 下位機(jī)開(kāi)發(fā)
下位機(jī)采用ESP32開(kāi)發(fā),ESP32兩個(gè)240m的核心,核心0用來(lái)執(zhí)行各種指令,核心1用來(lái)處理WiFi通信,解析指令,運(yùn)行中斷。為了避免數(shù)據(jù)錯(cuò)誤,系統(tǒng)采用freertos的開(kāi)發(fā),充分利用了互斥量、定時(shí)器和中斷管理。本次開(kāi)發(fā)采用VScode(PIO)。下位機(jī)主函數(shù)部分如圖4所示,負(fù)責(zé)初始化各個(gè)模塊并啟動(dòng)各個(gè)線(xiàn)程。
6 字符串解析函數(shù)
傳統(tǒng)的腳本語(yǔ)言繼承了自然數(shù)計(jì)算等功能,造成系統(tǒng)解算時(shí)間很長(zhǎng)。
字符串解析分成兩個(gè)部分,一個(gè)是用用戶(hù)自定義函數(shù),另一個(gè)是系統(tǒng)的自動(dòng)解析回調(diào)。得益于雙核結(jié)構(gòu),用戶(hù)可以充分利用其中一個(gè)核心完成用戶(hù)的任務(wù),而不影響我們的字串穿解析。
字符串解析的核心是int sscanf(const char *, const char*, ...);所以函數(shù)繼承c語(yǔ)言的一切特性,包括正則表達(dá)式。
受限于各種編譯器和優(yōu)化,不同平臺(tái)編譯出來(lái)的代碼可能有所差異。最終采用了c++來(lái)編譯我們的文件。當(dāng)然,具體的系統(tǒng)中改用c語(yǔ)言+結(jié)構(gòu)體指針能有更好的執(zhí)行效率。
#define debugLen 50
int DebugConut=0;
7 結(jié)語(yǔ)
本項(xiàng)目研究的目的就是通過(guò)無(wú)線(xiàn)和虛擬硬件技術(shù),在PC操作系統(tǒng)中虛擬出串口,并通過(guò)無(wú)線(xiàn)技術(shù)與下位機(jī)通信,實(shí)現(xiàn)操作系統(tǒng)直接控制下位機(jī)的無(wú)線(xiàn)串口。在串口的基礎(chǔ)上引入IIC,SPI等總線(xiàn)。在最終的成品上,直接寫(xiě)UART/IIC/ SPI的協(xié)議,PC直接與連接在下位機(jī)的傳感器通信。
[參考文獻(xiàn)]
[1]黃麗娥.網(wǎng)口設(shè)備虛擬串口設(shè)備技術(shù)的設(shè)計(jì)與實(shí)現(xiàn)[D].廣州:華南理工大學(xué),2012.
[2]郭書(shū)軍,田志鵬.基于單片Wi-Fi MCU CC3200的無(wú)線(xiàn)串口[J].儀器儀表用戶(hù),2016(1):24-27.
[3]楊思俊.基于VB6.0的太陽(yáng)能發(fā)電基站電源的上位機(jī)軟件設(shè)計(jì)[J].科技廣場(chǎng),2011(1):133-135.
[4]楊楊,潘洪躍.基于虛擬串口的數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].大眾科技,2008(4):73-75.
(編輯 王雪芬)
Design of virtual serial port based on wireless transmission
Li Xiaolong, Zhu Haixia, Zhao Kaiyi, Zhao Chenxiang, Dong Zhengqi(NUAA Jincheng College, Nanjing 211156, China)
Abstract:This paper designs a wireless transmission virtual serial port system, which uses Windows Driver + PC + lower terminal to realize high-speed data transmission between PC and lower computer. The computer controls the lower computer through the virtual serial port, including but not limited to UART, SPI, IIC bus, display screen and various peripherals.
Key words:virtual serial port; ESP32; WiFi