QT在Windows和Linux下的虚拟串口通信

QT在Windows和Linux下的虚拟串口通信

Qt串口类包含在 serialport 中,需要在.pro中引用该文件,添加头文件

QT       += core gui serialport

#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>

一、Linux:

添加虚拟串口工具:socat
apt-get install socat
生成虚拟串口
socat -d -d PTY PTY
在这里插入图片描述
生成了相互连接的虚拟串口 /dev/pts/18和/dev/pts/19

开启socat服务,同时打开两个终端作为服务器与客户端尝试进行通信
在这里插入图片描述
通信成功,接下来通过代码实现通信

//定义客户端与服务器端口属性
    sersend=new QSerialPort();
    sersend->setPortName("/dev/pts/19");
    sersend->setBaudRate(QSerialPort::Baud9600);
    sersend->setDataBits(QSerialPort::Data8);
    sersend->setStopBits(QSerialPort::OneStop);
    sersend->setParity(QSerialPort::EvenParity);

    serread=new QSerialPort();
    serread->setPortName("/dev/pts/18");
    serread->setBaudRate(QSerialPort::Baud9600);
    serread->setDataBits(QSerialPort::Data8);
    serread->setStopBits(QSerialPort::OneStop);
    serread->setParity(QSerialPort::EvenParity);
//打开端口
    if(sersend->open(QIODevice::ReadWrite)&&serread->open(QIODevice::ReadWrite))
          qDebug()<<1;
//监听
    connect(serread,&QSerialPort::readyRead,[=]
                                                {
                                                    qDebug()<<serread->bytesAvailable();
                                                    ui->textEdit_2->setText(serread->readAll());

                                                    openlog("test",LOG_CONS|LOG_PID,LOG_USER);
                                                    syslog(LOG_INFO,ui->textEdit_2->toPlainText().toUtf8());
                                                    closelog();
                                                    system("tail -n 1 /var/log/syslog");
                                                });
//确认消息发送                          
void MainWindow::on_pushButton_clicked()
{
        sersend->write(ui->textEdit->toPlainText().toUtf8());
}

运行结果如下:
在这里插入图片描述

二、Windows

下载虚拟串口工具CVSPD,添加互联的串口COM1、COM2
在这里插入图片描述
代码通信:

//遍历本机可用串口
foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
    {
        QSerialPort se;
        se.setPort(info);
        if(se.open(QIODevice::ReadWrite))
        {
            ui->com->addItem(se.portName());
        }
    }
  //选择串口创建连接
    ser=new QSerialPort();
    ser->setPortName(ui->com->currentText());
    if(ser->open(QIODevice::ReadWrite))
    ser->setBaudRate(QSerialPort::Baud9600);
    ser->setDataBits(QSerialPort::Data8);
    ser->setStopBits(QSerialPort::OneStop);
    ser->setParity(QSerialPort::EvenParity);
    ser->setFlowControl(QSerialPort::NoFlowControl);

    ser1=new QSerialPort();
    ser1->setPortName(ui->com->itemText(1));
    if(ser1->open(QIODevice::ReadWrite))
    ser1->setBaudRate(QSerialPort::Baud9600);
    ser1->setDataBits(QSerialPort::Data8);
    ser1->setStopBits(QSerialPort::OneStop);
    ser1->setParity(QSerialPort::EvenParity);
    ser1->setFlowControl(QSerialPort::NoFlowControl);
}
//发送数据
void MainWindow::on_send_clicked()
{
    ser->write(ui->write->toPlainText().toUtf8(),ui->write->toPlainText().toUtf8().length());
    ui->read->setText(ser1->readAll());
}

结果如下:
在这里插入图片描述
可以在CVSPD中看到串口实时通信数据
在这里插入图片描述有问题请指教,不喜勿喷。

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值