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

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

Linux下的虚拟终端

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

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

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

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

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

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

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

#echo 456 > 2 
  • 1.

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

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

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

Qt下的串口通讯

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

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

MainWindow::MainWindow(QWidget *parent) :  
    QMainWindow(parent),  
    ui(new Ui::MainWindow)  
{  
    ui->setupUi(this);  
    com = new QextSerialPort("/dev/pts/1", QextSerialPort::Polling);  
    com->open(QextSerialPort::ReadWrite);  
    com->setBaudRate(BAUD9600);  
    com->setDataBits(DATA_8);  
    com->setParity(PAR_NONE);  
    com->setStopBits(STOP_1);  
    com->setFlowControl(FLOW_OFF);  
    com->setTimeout(10);  
    QTimer *timer = new QTimer(this);  
    connect(timer, SIGNAL(timeout()), this, SLOT(readCOM()));  
    timer->start(20);  
}  
void MainWindow::readCOM()  
{  
    if (com->bytesAvailable() > 1)  
        ui->showText->insertPlainText(com->readAll());  
}  
void MainWindow::on_btnSend_clicked()  
{  
    com->write(ui->edit->text().toAscii().data());  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.

运行结果:Qt串口写数据

收到数据:

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

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

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

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

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

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-06-22 17:36:50

QT Linux 串口

2011-06-13 17:46:07

Qt 串口通信

2011-06-29 14:42:06

Qt 串口

2011-06-27 11:08:37

Qt 串口 通信

2011-06-29 14:23:08

Qt 串口

2011-06-29 14:32:25

Qt 串口

2011-06-29 14:06:15

Qt 串口

2011-06-29 13:50:15

Qt 串口

2024-12-24 07:38:44

C#串口通信

2011-07-01 13:03:32

QT 线程 串口

2024-06-03 10:11:13

2009-10-21 13:02:20

linux串口操作函数操作系统

2023-11-15 13:55:32

2011-07-11 14:19:54

JAVA串口通信

2011-07-11 14:12:19

Java串口通信

2009-08-25 17:24:55

C#串口通信程序

2010-01-05 17:39:10

.NET Framew

2021-01-18 05:30:22

串口通信Qt

2021-05-29 16:12:00

通信协议设备

2013-05-23 14:11:32

交换机虚拟串口配置网络虚拟化技术
点赞
收藏

51CTO技术栈公众号