Linux 虚拟串口及 Qt 串口通信实例
创始人
2024-08-01 12:31:00
0

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 串口通信实例的内容介绍完了,希望本文对你 有所帮助!

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...