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

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


咨詢
建站咨詢
