zoukankan      html  css  js  c++  java
  • Linux 虚拟串口及 Qt 串口通信实例

    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 ' slave 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串口写数据

    收到数据:

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

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

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

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

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

  • 相关阅读:
    静态链表与动态链表(C语言实现)
    Java处理java.util.ConcurrentModificationException异常
    java读取文件
    java如何引入接口中定义的常量
    java反编译命令javap
    【算法】如何将一个文件分割成多份(C,Java语言实现)
    【算法】计算一篇文章的单词数(C、Java语言实现)
    如何将mongodb bson文件转成json文件
    Gunicorn快速入门
    nginx+uwsgi+django
  • 原文地址:https://www.cnblogs.com/cute/p/4920770.html
Copyright © 2011-2022 走看看