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

2011-06-22 17:49 佚名 互联网 字号:T | T

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

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

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.     ui->setupUi(this); 
  5.     com = new QextSerialPort("/dev/pts/1", QextSerialPort::Polling); 
  6.     com->open(QextSerialPort::ReadWrite); 
  7.     com->setBaudRate(BAUD9600); 
  8.     com->setDataBits(DATA_8); 
  9.     com->setParity(PAR_NONE); 
  10.     com->setStopBits(STOP_1); 
  11.     com->setFlowControl(FLOW_OFF); 
  12.     com->setTimeout(10); 
  13.     QTimer *timer = new QTimer(this); 
  14.     connect(timer, SIGNAL(timeout()), this, SLOT(readCOM())); 
  15.     timer->start(20); 
  16. void MainWindow::readCOM() 
  17.     if (com->bytesAvailable() > 1) 
  18.         ui->showText->insertPlainText(com->readAll()); 
  19. void MainWindow::on_btnSend_clicked() 
  20.     com->write(ui->edit->text().toAscii().data()); 
  21. }

运行结果:Qt串口写数据

收到数据:

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

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

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

Linux 虚拟串口及 Qt 串口通信实例的更多相关文章

  1. PIC18F45K80串口1和串口2异步收发通信实例

    PIC18F45K80串口1和串口2异步收发通信实例 一:配置串口1初始化函数 首先打开技术手册,查看异步串口的操作流程以及配置. 需要将串口对应引脚的方向寄存器设置为输入

  2. qt tcp 通信实例

    #include "mainwindow.h" #include "ui_mainwindow.h" #include <QHostAddress> ...

  3. linux下的qt串口通信

    1.linux下的qt串口通信跟windows唯一的差别就是端口号的名字,windows下面是COM,而linux是ttyUSB0的路径 2.一般情况下linux插上USB转串口线就可以在/dev/目 ...

  4. VM中linux和windows主机进行串口通信

    最近在做关于AIS的内容.为了对AIS电文进行解码,串口收发. 数据有PC机模拟发送,为了调试方便,不用次次将程序放到开发板上运行,所以利用pc主机和虚拟机进行串口通信模拟该过程. 首先需要用到一个软 ...

  5. Qt串口通信

    1. Qt串口通信类QSerialPort 在Qt5的的更新中,新增了串口通信的相关接口类QSerialPort,这使得在开发者在使用Qt进行UI开发时,可以更加简单有效地实现串口通信的相关功能. 开 ...

  6. linux虚拟串口及远程访问

    1. 虚拟终端概念 linux中有很多终端,如下简单介绍下各种终端或串口的概念. 1.1 tty:终端设备的统称 tty是Teletype或TeletypeWriter的缩写,中文翻译为电传打字机.电 ...

  7. QT串口通信编程

    QT串口编程 文件夹目录结构如下图所示 设计的示例界面如下图所示 首先在项目文件里面添加一句 QT += serialport SerialPortDemo.pro文件如下: #----------- ...

  8. Qt 串口通信之使用16进制发送数据的转换方式

    Qt 串口通信之使用16进制发送数据的转换方式 一 概述 有时候在做上位机串口通讯时,经常需要将字符串转成16进制的形式作为发送,借此分析记录一下. 二 需求分析 //假设需要转换的字符:如下 QSt ...

  9. QT5入门之23 -QT串口编程(转)

    QT5入门之23 -QT串口编程   QT5有专门的串口类: QSerialPort:提供访问串口的功能 QSerialPortInfo:提供系统中存在的串口的信息 具体使用方法: 1.在pro文件中 ...

随机推荐

  1. Linux od命令(以指定进制显示文件)

    从“读取二进制文件”出发,到od命令的使用 在桃村实习期间,一直努力做毕业设计,我的毕业设计中有一个内容就是读取SEGY文件.在读取文件时,经常遇到的问题时你要读取浮点型数据,这时你就必须考虑你所使用 ...

  2. 详解 Tomcat 的连接数与线程池(转)

    很不错的文章 https://juejin.im/post/5a0bf917f265da432d27a215

  3. 页面倒计时跳转页面效果,js倒计时效果

    页面倒计时跳转页面效果,js倒计时效果 >>>>>>>>>>>>>>>>>>>> ...

  4. PHPMailer命令执行及任意文件读取漏洞

    今天在thinkphp官网闲逛,无意下载了一套eduaskcms,查看了一下libs目录中居然存在PHPMailer-5.2.13,想起了之前看到的PHPMailer的漏洞,可惜这套CMS只提供了一个 ...

  5. 通过RF数据库查询中文字段结果正常显示的转换方法

    方法1:统一显示为中文 1.通过RF数据库查询中文字段结果格式:'\xba\xcb\xbc\xf5\xcd\xa8\xb9\xfd' 2.通过Decode Bytes To String进行gbk解码 ...

  6. [XPath] XPath 与 lxml (五)XPath 实例

    本文继续沿用第三章的 XML 示例文档. 选取价格高于30的 price 节点 # 从父节点进行筛选 >>> root.xpath('//book[price>30]/pric ...

  7. Kafka Java consumer动态修改topic订阅

    前段时间在Kafka QQ群中有人问及此事——关于Java consumer如何动态修改topic订阅的问题.仔细一想才发现这的确是个好问题,因为如果简单地在另一个线程中直接持有consumer实例然 ...

  8. IOS音频1:之采用四种方式播放音频文件(一)AudioToolbox AVFoundation OpenAL AUDIO QUEUE

    本文转载至 http://blog.csdn.net/u014011807/article/details/40187737 在本卷你可以学到什么? 采用四种方法设计应用于各种场合的音频播放器: 基于 ...

  9. 使用createprocess()创建进程打开其他文件方法

    #include "stdafx.h"#include "windows.h"#include <iostream>#include "s ...

  10. 安装windows7/8/10到U盘或移动硬盘

    https://jingyan.baidu.com/article/e52e36156f6ad240c60c518c.html jpg改rar