Python代码引用自:http://fayaa.com/code/view/8500/
在终端新建一个文件,mkptych.py
以下是代码:
#! /usr/bin/env python
#coding=utf-8
import pty
import os
import select
def mkpty():
#open virtual com
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)
print "read %d data." % len(data)
if master==master1:
os.write(master2, data)
else:
os.write(master1, data
在终端里运行“python mkptych.py &”,这样就可以生成一个基于pty(伪终端)的虚拟端口对,
两个设备名会显示在终端里。然后就可以利用这两个设备名在本机上进行虚拟串口之类的调试~
使用完后用ps查看这个python进程的pid号,然后kill掉即可~
qt测试:
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QMainWindow>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QComboBox>
#include <QPushButton>
#include <QString>
namespace Ui {
class Widget;
}
class Widget : public QMainWindow
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
void initUI();
//QStringList getPortNameList();//get avaliable port list
void openPort();//open port
private slots:
void receiveInfo();
private:
Ui::Widget *ui;
QSerialPort *m_serialPort;//port class
QStringList m_portNameList;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QLayout>
#include <QDebug>
Widget::Widget(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
m_serialPort = new QSerialPort();
initUI();
connect(ui->pushButton,&QPushButton::clicked,
this,&Widget::openPort);
}
Widget::~Widget()
{
delete ui;
if(m_serialPort->isOpen()){
m_serialPort->close();
}
delete m_serialPort;
}
void Widget::initUI()
{
ui->pushButton->setText("open port");
}
void Widget::openPort()
{
//if port open,close it
if(m_serialPort->isOpen()){
m_serialPort->clear();
m_serialPort->close();
}
m_serialPort->setPortName("/dev/pts/18");
if(!m_serialPort->open(QIODevice::ReadWrite))// use ReadWrite mode open port
{
qDebug() << "open failed.";
return;
}
qDebug() << "open success.";
m_serialPort->setBaudRate(QSerialPort::Baud9600, QSerialPort::AllDirections);//set baud115200
m_serialPort->setDataBits(QSerialPort::Data8);//set data 8
m_serialPort->setFlowControl(QSerialPort::NoFlowControl);//set noFlow control
m_serialPort->setParity(QSerialPort::NoParity);//set noParity
m_serialPort->setStopBits(QSerialPort::OneStop);//set one stop bit
connect(m_serialPort,SIGNAL(readyRead()),this,SLOT(receiveInfo()));
}
//解析下位机发送的数据(串口)
void Widget::receiveInfo()
{
QByteArray info = m_serialPort->readAll();
qDebug() << "receive info:" << info;
}
然后再用串口调试助手进行测试,我用的是cutecom,在线下载 sudo apt-get install cutecom,下载有问题的可以试试sudo apt-get update,还有问题的请百度解决吧~
cutecom界面: