Linux 虚拟串口及 Qt 串口通信实例

Linux下的虚拟终端

由于手上没有可以测试的串口设备,因此发了点时间找了一个Linux下的虚拟串口工具:http://fayaa.com/code/view/8500/ ,这个工具打开了两个伪终端,然后读两个口子的数据,如果是从1号口来的,就往2号口写入数据,从2号口来的就写到1号口。

经过我的修改后变成了这个样子:

 
 
  1. #! /usr/bin/env python  
  2.  
  3. #coding=utf-8  
  4.  
  5. import pty  
  6. import os  
  7. import select  
  8.  
  9. def mkpty():  
  10.     #  
  11.     master1, slave = pty.openpty()  
  12.     slaveName1 = os.ttyname(slave)  
  13.     master2, slave = pty.openpty()  
  14.     slaveName2 = os.ttyname(slave)  
  15.     print '\nslave device names: ', slaveName1, slaveName2  
  16.     return master1, master2  
  17.  
  18.  
  19. if __name__ == "__main__":  
  20.  
  21.     master1, master2 = mkpty()  
  22.     while True:          
  23.         rl, wl, el = select.select([master1,master2], [], [], 1)  
  24.         for master in rl:  
  25.             data = os.read(master, 128)  
  26.             if master==master1:  
  27.                 print "read %d data:" % len(data)  
  28.                 print data  
  29.                 #os.write(master2, data)  
  30.             else:  
  31.                 print "to write %d data:" % len(data)  
  32.                 print data.strip()  
  33.                 os.write(master1, data.strip()) 

改变后 我们让1号口为读入口(串口设备读入数据的口子),2号口为写出口(串口向外面写数据),将其保存为com.py

 
 
  1. #python com.py  
  2. slave device names:  /dev/pts/1 /dev/pts/2 

意思是pts/1为1号口 pts/2为2号口

另建一个终端 #cd /dev/pts/

 
 
  1. #echo 456 > 2 

就会向2号口写数据,如果我们没有其他程序读串口的数据的话,那么就会出现4行数:

 
 
  1. to write 5 data:  
  2. 456  
  3. read 3 data:  
  4. 456 

那么我们只要用程序读/dev/pts/1就可以模拟串口通信了

Qt下的串口通讯

Qt没有自带串口模块,只有第三方库 http://wenku.baidu.com/view/55849f4ffe4733687e21aa99.html,这篇文章介绍了简单的Qt串口通信

学着他的例子也做了一个程序,核心代码:

 
 
  1. MainWindow::MainWindow(QWidget *parent) :  
  2.     QMainWindow(parent),  
  3.     ui(new Ui::MainWindow)  
  4. {  
  5.     ui->setupUi(this);  
  6.     com = new QextSerialPort("/dev/pts/1", QextSerialPort::Polling);  
  7.     com->open(QextSerialPort::ReadWrite);  
  8.     com->setBaudRate(BAUD9600);  
  9.     com->setDataBits(DATA_8);  
  10.     com->setParity(PAR_NONE);  
  11.     com->setStopBits(STOP_1);  
  12.     com->setFlowControl(FLOW_OFF);  
  13.     com->setTimeout(10);  
  14.     QTimer *timer = new QTimer(this);  
  15.     connect(timer, SIGNAL(timeout()), this, SLOT(readCOM()));  
  16.     timer->start(20);  
  17. }  
  18. void MainWindow::readCOM()  
  19. {  
  20.     if (com->bytesAvailable() > 1)  
  21.         ui->showText->insertPlainText(com->readAll());  
  22. }  
  23. void MainWindow::on_btnSend_clicked()  
  24. {  
  25.     com->write(ui->edit->text().toAscii().data());  

运行结果:Qt串口写数据

收到数据:

Linux 虚拟串口及 Qt 串口通信实例

串口Qt写数据(下面那个终端控制)

Linux 虚拟串口及 Qt 串口通信实例

注意:1号口和2号口的方向问题很难分清楚,暂时这样理解了没必要深究 windows下的虚拟串口工具为VSPM,是Telnet管理的,建议先研究这个。

小结:Linux 虚拟串口 Qt 串口通信实例的内容介绍完了,希望本文对你 有所帮助!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: QT是一个跨平台的应用程序开发框架,是基于C++的。在Linux系统中进行串口通信时,可以使用QT提供的串口通信类QSerialPort类来进行操作。 首先,需要在QT项目中包含QSerialPort头文件,这样就能够使用QSerialPort类了。然后,可以通过实例化QSerialPort类的对象,来进行串口的打开、设置、读写等操作。 串口的打开可以通过调用QSerialPort类的open函数来实现,传入串口号和参数等信息。如果打开成功,则可以进行串口参数的设置,例如设置波特率、数据位、停止位、校验位等。这些参数通过QSerialPort的setBaudRate、setDataBits、setParity、setStopBits等函数来设置。 串口的读写操作可以通过QSerialPort类的read和write函数来实现。使用read函数读取串口数据时,可以设置读取的字节数,然后通过readAll函数获取读取到的数据。使用write函数写入串口数据时,可以将待发送的数据放入QByteArray对象中,然后通过write函数发送。 在串口通信过程中,还可以通过QSerialPort类提供的其他函数来获取串口状态、设置流控制、检测数据接收完成等。 最后,在不需要使用串口时,需要调用QSerialPort类的close函数关闭串口,释放串口资源。 总的来说,QTLinux系统中进行串口通信,可以使用QSerialPort类提供的函数进行串口的打开、设置、读写等操作,非常方便。 ### 回答2: 在Linux系统中,Qt提供了一种方便的方式来进行串口通信。首先,我们需要在Qt项目中包含QtSerialPort模块,并且在.pro文件中添加相应的模块依赖。 然后,我们可以使用QSerialPort类来访问和控制串口。通过实例化一个QSerialPort对象,我们可以设置串口的各种属性,例如波特率、数据位数、停止位、奇偶校验等。 在通信过程中,我们可以使用QSerialPort的read函数和write函数来实现读取和写入数据。对于接收数据,我们可以使用readyRead信号和QSerialPort的readAll函数来实时读取串口接收缓冲区中的数据。 如果需要发送数据,我们可以使用QSerialPort的write函数来将数据写入到串口发送缓冲区中。需要注意的是,在写入数据之前,我们应该先使用QSerialPort的waitForBytesWritten函数等待数据成功写入。 除了基本的串口通信功能,Qt还提供了一些其他的辅助功能。例如,我们可以使用QSerialPortInfo类来获取系统中可用的串口信息,例如串口名称、制造商、描述等。 此外,Qt还提供了QtCharts模块,可以用于显示串口数据的图表。我们可以通过实时获取串口数据并更新图表来实现可视化显示。 总而言之,QtLinux系统上实现串口通信非常方便。通过使用QtSerialPort模块,我们可以轻松地设置串口属性、实时读取和写入数据,并通过图表展示数据。这使得开发串口通信应用程序变得更加简单和高效。 ### 回答3: QT是一个跨平台的应用程序开发框架,可在Linux环境中使用。对于在Linux上进行串口通信QT提供了一些类和函数来简化开发过程。 首先,我们需要包含Qt SerialPort模块头文件。在代码顶部添加以下语句: #include <QtSerialPort/QSerialPort> 接下来,我们需要创建一个QSerialPort对象来进行串口通信。在打开串口之前,我们需要设置一些串口属性,例如波特率、数据位、奇偶校验等。以下是一个简单的示例代码: QSerialPort serial; serial.setPortName("/dev/ttyUSB0"); // 设置串口名字 serial.setBaudRate(QSerialPort::Baud9600); // 设置波特率 serial.setDataBits(QSerialPort::Data8); // 设置数据位 serial.setParity(QSerialPort::NoParity); // 设置奇偶校验 serial.setStopBits(QSerialPort::OneStop); // 设置停止位 然后,我们可以使用open()函数打开串口: if (serial.open(QIODevice::ReadWrite)) { // 串口已成功打开 } 一旦串口打开,我们就可以使用write()函数向串口发送数据,使用read()函数读取串口接收到的数据。例如: serial.write("Hello World"); QByteArray data = serial.readAll(); 最后,当我们不再需要使用串口时,应该使用close()函数关闭串口: serial.close(); 总之,QT提供了一种简洁的方式来在Linux平台上进行串口通信,只需几行代码就能实现打开、读写和关闭串口的功能。以上是一个简单的例子,你可以根据实际需求进行调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值