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

Linux 虚拟串口及 Qt 串口通信实例是本文所要介绍的内容,在实现过程中,打开了两个伪终端,然后读两个口子的数据,如果是从1号口来的,就往2号口写入数据,从2号口来的就写到1号口。

AD:【线下活动】三大新锐HTML 5企业汇聚51CTO—大话移动前端技术

Linux下的虚拟终端

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

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

1. 

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


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

1. 

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


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

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

1. #echo 456 > 2


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

1. 

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


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

Qt下的串口通讯

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

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

1. 

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


运行结果:Qt串口写数据

收到数据:

Linux 虚拟串口及 Qt 串口通信实例_数据

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

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

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

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