新聞中心
隨著物聯(lián)網(wǎng)技術(shù)的發(fā)展,各種物聯(lián)設(shè)備逐漸走進(jìn)人們的日常生活中。而要實(shí)現(xiàn)設(shè)備之間的互聯(lián)和數(shù)據(jù)交換,串口通信技術(shù)就顯得尤為重要。在Linux系統(tǒng)下,QT作為一種跨平臺應(yīng)用程序框架,可以方便地實(shí)現(xiàn)串口通信功能,從而輕松打開物聯(lián)網(wǎng)之門。

目前創(chuàng)新互聯(lián)公司已為上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、網(wǎng)站運(yùn)營、企業(yè)網(wǎng)站設(shè)計、大悟網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
一、Linux系統(tǒng)下的串口通信
Linux系統(tǒng)內(nèi)核中提供了許多與串口通信相關(guān)的驅(qū)動程序,可以通過在應(yīng)用程序中使用系統(tǒng)調(diào)用函數(shù)來實(shí)現(xiàn)串口通信。如圖1所示,Linux系統(tǒng)下,串口驅(qū)動程序主要由以下幾部分組成:
1.串口芯片驅(qū)動程序:Linux系統(tǒng)內(nèi)核支持多種串口芯片,如16550A、16650、16750、16850等。不同的芯片驅(qū)動程序?qū)崿F(xiàn)方式不同,但是它們都提供了相應(yīng)的接口函數(shù)用于訪問串口寄存器。
2.串口設(shè)備驅(qū)動程序:Linux系統(tǒng)將串口設(shè)備看作一種特殊的字符設(shè)備,因此串口設(shè)備驅(qū)動程序?qū)嵸|(zhì)上也是一種字符設(shè)備驅(qū)動程序。它提供了打開、關(guān)閉、讀、寫、控制等基本接口函數(shù),并且通過ioctl()系統(tǒng)調(diào)用函數(shù)提供了設(shè)置串口參數(shù)的接口。
3.串口控制臺驅(qū)動程序:除了可以通過應(yīng)用程序進(jìn)行串口通信外,Linux系統(tǒng)還提供了一種特殊的串口路由,即串口控制臺。用戶可以將其視為一種遠(yuǎn)程終端,通過串口連接到電腦上,實(shí)現(xiàn)遠(yuǎn)程登錄的功能,以便于在遠(yuǎn)程主機(jī)上進(jìn)行操作。
圖1 Linux系統(tǒng)下的串口通信結(jié)構(gòu)
二、QT實(shí)現(xiàn)串口通信
QT是一種基于C++語言的跨平臺應(yīng)用程序框架,其中包括了許多用于GUI開發(fā)的組件,同時還提供了一些底層接口函數(shù),可以方便地實(shí)現(xiàn)串口通信功能。
1.串口基本設(shè)置
在QT應(yīng)用程序中使用串口通信功能之前,首先需要對串口進(jìn)行初始化設(shè)置。QT提供了一個QSerialPort類,該類封裝了串口通信的底層操作,實(shí)現(xiàn)了如下幾個重要的功能:
1.打開、關(guān)閉串口
2.設(shè)置串口各項(xiàng)參數(shù),如波特率、數(shù)據(jù)位、停止位等
3.讀、寫數(shù)據(jù)
在使用QSerialPort類之前,需要先引入頭文件,即#include
在進(jìn)行串口初始化時,需要以如下方式定義QSerialPort類的實(shí)例:
QSerialPort serial;
然后利用該實(shí)例中提供的函數(shù)進(jìn)行串口設(shè)置,如下所示:
serial.setPortName(“/dev/ttyUSB0”); //串口設(shè)備文件名
serial.setBaudRate(QSerialPort::Baud115200); //波特率
serial.setDataBits(QSerialPort::Data8); //數(shù)據(jù)位數(shù)
serial.setParity(QSerialPort::NoParity); //校驗(yàn)位
serial.setStopBits(QSerialPort::OneStop); //停止位數(shù)
serial.setFlowControl(QSerialPort::NoFlowControl); //流控制
在進(jìn)行完上述設(shè)置之后,調(diào)用以下函數(shù)將串口打開即可:
if(serial.open(QIODevice::ReadWrite)){//串口打開成功 }else{//串口打開失敗 }
如果想關(guān)閉串口,可以使用如下代碼:
serial.close();//關(guān)閉串口
2.讀取串口數(shù)據(jù)
在串口成功打開之后,就可以使用QIODevice類中提供的read()函數(shù)進(jìn)行數(shù)據(jù)的讀取了。該函數(shù)的原型如下所示:
qint64 read(char *data, qint64 maxSize);
其中,data表示數(shù)據(jù)緩沖區(qū),maxSize表示最多讀取的字節(jié)數(shù)。函數(shù)的返回值為實(shí)際讀取到的字節(jié)數(shù)。下面是一個調(diào)用read()函數(shù)進(jìn)行串口數(shù)據(jù)讀取的示例:
char data[100]; //定義一個100字節(jié)大小的緩沖區(qū)
serial.wtForReadyRead(100); //等待100ms,確保有數(shù)據(jù)可讀
qint64 ret = serial.read(data, 100); //讀取數(shù)據(jù)
if(ret != -1){//讀取成功,處理數(shù)據(jù) }
3.發(fā)送串口數(shù)據(jù)
在串口成功打開之后,還需要使用QIODevice類中提供的write()函數(shù)進(jìn)行數(shù)據(jù)發(fā)送。該函數(shù)的原型如下所示:
qint64 write(const char *data, qint64 maxSize);
其中,data表示待發(fā)送的數(shù)據(jù),maxSize表示待發(fā)送的數(shù)據(jù)長度。函數(shù)的返回值為實(shí)際發(fā)送的字節(jié)數(shù)。下面是一個調(diào)用write()函數(shù)進(jìn)行串口數(shù)據(jù)發(fā)送的示例:
char data[100] = “Hello, World!”;
qint64 ret = serial.write(data, strlen(data));//發(fā)送數(shù)據(jù)
if(ret != -1){//發(fā)送成功 }
三、實(shí)現(xiàn)物聯(lián)網(wǎng)應(yīng)用
在掌握了QT中串口通信的基本操作之后,就可以開始開發(fā)物聯(lián)網(wǎng)應(yīng)用了。比如,利用樹莓派和QT實(shí)現(xiàn)一個遠(yuǎn)程控制小車的應(yīng)用。
需要在樹莓派上連接一個藍(lán)牙模塊和一個串口控制器。然后,使用QT中提供的串口通信功能,通過藍(lán)牙模塊與小車進(jìn)行數(shù)據(jù)交互,實(shí)現(xiàn)小車的遠(yuǎn)程控制。具體實(shí)現(xiàn)過程如下:
1.在QT應(yīng)用程序中初始化串口,將其連接到藍(lán)牙模塊上。
2.通過使用QT中提供的GUI組件,實(shí)現(xiàn)小車的遠(yuǎn)程控制界面,包括按鍵、滑條等。
3.定義一個線程或者定時器,在固定的時間間隔內(nèi)讀取遠(yuǎn)程控制界面上的數(shù)據(jù),并將控制命令通過藍(lán)牙模塊發(fā)送給小車。
4.小車收到控制命令之后,解析命令并執(zhí)行相應(yīng)的動作。
通過上述方法,就可以方便地實(shí)現(xiàn)一個基于串口通信技術(shù)的物聯(lián)網(wǎng)應(yīng)用,實(shí)現(xiàn)對物理設(shè)備的遠(yuǎn)程控制和數(shù)據(jù)交換。
相關(guān)問題拓展閱讀:
- 怎樣用Qt編寫arm與linuxTCP通信程序,arm做服務(wù)器,linux做客戶端,獲取arm上AD轉(zhuǎn)換器的值?
- 串口助手可以連qt連不了
怎樣用Qt編寫arm與linuxTCP通信程序,arm做服務(wù)器,linux做客戶端,獲取arm上AD轉(zhuǎn)換器的值?
大佬 還有這方面的例子嗎?
1、可采用Linux下的socket編程技術(shù),跟QT或ARM的關(guān)聯(lián)性不大。
2、ARM開猜緩發(fā)板上運(yùn)行多線坦昌程的服務(wù)器端程序,主線程Listen,子線程采集AD轉(zhuǎn)換器的值。
3、LinuxPC上運(yùn)行tcp的讓兆扒客戶端程序,connect到ARM開發(fā)板上的服務(wù)器進(jìn)行數(shù)據(jù)獲取和展現(xiàn)。
去下載一個現(xiàn)成的串口通信的QT或VC工程,源咐這種東西很多;然后把數(shù)據(jù)讀寫相關(guān)部分抽出來,雹吵純換成你的代碼
另:這種通信一般都用udp,用tcp,握手和重傳碰檔不好寫……
串口助手可以連qt連不了
1.檢查網(wǎng)絡(luò)是否晌隱穩(wěn)祥謹(jǐn)握定
2.查看服務(wù)器是否正在維護(hù)
3.使用殺毒工具清理緩存謹(jǐn)慶
4.更新軟件版本
串口助手使用方法:
在這里一定要注意一下,這個虛擬串口軟件不要使用最新版本的9.0,會報錯,一般使用7.2或者6.9版本即可。
9.0使用幾天后,
中文版本報錯如下悶歲:
無法配對端口。 有關(guān)詳細(xì)信息,請參見日志。 要忽略錯誤并仍然創(chuàng)建捆綁包,請在選項(xiàng)中啟用相應(yīng)的設(shè)置。
英文版本報錯如下:
Cannot pair ports. See log for details. To ignore errors and create bundles anyway, please, enable the corresponding setting in options.
換個版本即可解決。
使用目的
我們使用虛擬串口到底是干螞鏈睜什么?如果有經(jīng)驗(yàn)就知道。如果手頭有一個實(shí)際的單片機(jī),那么使用一個類似U盤的USB轉(zhuǎn)TTL的東西,便可以將單片機(jī)發(fā)送的串口內(nèi)容在串口助手中顯示出來,但是如果沒有單片機(jī),也沒有USB轉(zhuǎn)TTL,那么可以在Proteus中,仿真一個單片機(jī),發(fā)出串口內(nèi)容,同時在Proteus中為單片機(jī)連接COMPIM(虛擬串口),同時在電腦上安裝Virtual Serial Port Driver這個軟件,那么,在Proteus中,單片機(jī)發(fā)出的串口內(nèi)容便可以在同一個電腦中的串口助手中接收。這就是我們要完成的功能。
再概括一下就是,這個COMPIM模塊能夠?qū)roteus中單片機(jī)的串口綁定到電腦上的一個串口,比如是com1,而這個虛擬串口就可以將com1和com2綁定,那么便可以利用上位機(jī)或者串口助手應(yīng)用程序等從com2接收來自于com1中單片機(jī)的串口信息。
實(shí)現(xiàn)步驟如下:
(1)Proteus中單片機(jī)可以正常收發(fā)串口內(nèi)容
(2)Proteus中單片機(jī)的引腳連接COMPIM,TXD連接TXD
(3)電腦中安裝Virtual Serial Port Driver軟件
(4)電腦中擁有串口助手
(5)Virtual Serial Port Driver軟件中配對COM口,COMPIM設(shè)置相應(yīng)COM口
9.0安裝步驟:
雙擊安裝vspdpro.exe
打開文件安裝位置,將vspdproCHS.EXE復(fù)制過去
vspdpro-jie.exe可以不用復(fù)制過去
以后喚族使用,直接雙擊vspdCHS.EXE
7.2安裝步驟:
點(diǎn)擊vspd.exe安裝
打開文件所在位置,將vspdctl.dll覆蓋復(fù)制到這個路徑中
每次卸載完畢后,直接delete all,不要一直占用串口。
、新建工程
文件->新建文件或項(xiàng)目->項(xiàng)目選擇Application(Qt Widget Application)->點(diǎn)擊choose…->填寫名稱,路徑等->點(diǎn)擊下一步->點(diǎn)擊下一步->(左邊Details)Base class選侍胡擇QDialog,整體都變成dialog相關(guān)的文件了,其他默認(rèn)->點(diǎn)擊下一步->點(diǎn)擊下一步老備攔->(左邊Kit)選中MinGW 32bit->滾備點(diǎn)擊下一步->點(diǎn)擊完成。
Copyright ?, CSDN.NET, All Rights Reserved
串口通信
打開APP
龍騰飛宇
關(guān)注
如何使用鍵叢QT編寫自己的串口調(diào)試助手及QT串口使用注意事項(xiàng) 原創(chuàng)
:34:50
1點(diǎn)贊
龍騰飛宇
碼齡4年
關(guān)注
QT 如何使用QT編寫自己的串口調(diào)試助手,QT串口使用注意事項(xiàng)
QT 串口調(diào)試助手
1 環(huán)境與工具
2 設(shè)計過程
2.1 新建項(xiàng)目與界面布局
2.2 程序設(shè)計
3 注意事項(xiàng)和說明
最近在學(xué)習(xí)qt,邊學(xué)邊寫,寫了個串口調(diào)試助手,記錄過程的同時分享出來御亮改正在學(xué)習(xí)的伙伴。
QT 串口調(diào)試助手
** 主要功能:串口數(shù)據(jù)收發(fā)、顯示,定時發(fā)送,接收數(shù)據(jù)保存、文件發(fā)送,不同編碼、進(jìn)制轉(zhuǎn)換等。**
1 環(huán)境與工具
PC Windows10
QT 5.12.0
2 設(shè)計過程
QT實(shí)現(xiàn)串口通信主要是利用QT自帶的串口類和函數(shù),在.pro文件中添加”QT += serialport”,然后在項(xiàng)目文件中包含頭文件(#include ),我們就可以在項(xiàng)目中使用QSerialPort來讀取和發(fā)送串口數(shù)據(jù)了。主要過程:實(shí)例化串口——>搜索可用串口——>打開串口——>設(shè)置串口參數(shù)——>讀取數(shù)據(jù)或發(fā)送數(shù)據(jù)。
2.1 新建項(xiàng)目與界面布局
? 新建串口調(diào)試助手的項(xiàng)目,由于QT還沒玩熟,這里就直接使用QT Designer進(jìn)行ui界面的繪制和布局。布局過程鎮(zhèn)判不再贅述,根據(jù)自己的需要放置適當(dāng)?shù)目丶纯?,更好對控件對象也重命名一下,完成布局?/p>
linuxqt串口的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于linuxqt串口,使用LinuxQT實(shí)現(xiàn)串口通信,輕松打開物聯(lián)網(wǎng)之門,怎樣用Qt編寫arm與linuxTCP通信程序,arm做服務(wù)器,linux做客戶端,獲取arm上AD轉(zhuǎn)換器的值?,串口助手可以連qt連不了的信息別忘了在本站進(jìn)行查找喔。
創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級標(biāo)準(zhǔn)機(jī)房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達(dá)10T,機(jī)柜接入千兆交換機(jī),能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運(yùn)行;創(chuàng)新互聯(lián)專注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認(rèn)可。
文章標(biāo)題:使用LinuxQT實(shí)現(xiàn)串口通信,輕松打開物聯(lián)網(wǎng)之門(linuxqt串口)
文章鏈接:http://m.fisionsoft.com.cn/article/copcsdc.html


咨詢
建站咨詢
