zoukankan      html  css  js  c++  java
  • 树莓派中QT实现串口通讯

    树莓派中QT实现串口通讯

    开发平台为QT

    此博客QT使用的为WiringPi驱动

    我使用的串口调试助手为 cutecom

    先简单说一些开发过程中需要注意的问题

    • Linux 下设备为 tty ,对应在 windows 下为 COM
    • ttyS0ttyUSB0 不是一个东西
    • raspi-config 中, serial 应该被打开, 但是 Serial Console 不应该被打开,除非你想要用 Serial Console 去作为终端来控制树莓派
    • 默认pin8,10 是作为 Serial1 分配给蓝牙, 需要关闭蓝牙才可以使用
    • 在树莓派与本机中USB设备如何选择可以看这里
    • 树莓派中QT要使用QtSerialPort需要安装库
    sudo apt-get install libqt5serialport5
    sudo apt-get install libqt5serialport5-dev
    

    UI

    结果展示

    接线示意

    代码展示

    widget.pro

    QT       += core gui
    LIBS     += -lwiringPi
    QT       += serialport
    

    widget.h

    #include <QWidget>
    #include <QtSerialPort/QSerialPort>
    #include <QtSerialPort/QSerialPortInfo>
    #include <QDebug>
    #include <QString>
    
    namespace Ui {
    class Widget;
    }
    
    class Widget : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit Widget(QWidget *parent = 0);
        ~Widget();
    
    private slots:
        void on_pushButton_clicked();
        void read();
    
    private:
        Ui::Widget *ui;
        QSerialPort *serial;
    

    widget.cpp

    #include "widget.h"
    #include "ui_widget.h"
    
    Widget::Widget(QWidget *parent) : QWidget(parent),
        ui(new Ui::Widget) {
        ui->setupUi(this);
        serial = new QSerialPort;
        serial->close();
        serial->setPortName("ttyS0");
        serial->open(QIODevice::ReadWrite);
        serial->setBaudRate(115200);
        serial->setDataBits(QSerialPort::Data8);
        serial->setParity(QSerialPort::NoParity);
        serial->setStopBits(QSerialPort::OneStop);
        serial->setFlowControl(QSerialPort::NoFlowControl);
    
        connect(serial,&QSerialPort::readyRead,this,&Widget::read);
    }
    
    Widget::~Widget(){
        delete ui;
    }
    
    void Widget::on_pushButton_clicked(){
        QByteArray a = QByteArray("
    ");
        a.append(ui->textEdit->toPlainText().toLatin1());
        serial->write(a);
    }
    
    void Widget::read(){
        QByteArray buf;
        buf = serial->readAll();
        qDebug() << buf;
        QString a = QString(buf);
        ui->textEdit_2->setText(a);
    }
    

    说在最后

    关于如何选择你的设备

    在树莓派中选择你的串口

    一般来说, 选择 ttyS0 即对应了你的pin8,10 serial1

    详细可见

    https://www.raspberrypi.org/documentation/configuration/uart.md

    在你的电脑上选择对应的USB

    试试命令

    ls -l /dev/ttyUSB*
    

    详细可以参考:

    https://blog.csdn.net/qq_25544855/article/details/79313496

  • 相关阅读:
    【简●解】[AHOI2009]中国象棋
    【讲●解】KMP算法
    【简●解】POJ 1185,LG P2704【炮兵阵地】
    学习网站整理
    【讲●解】火车进出栈类问题 & 卡特兰数应用
    洛谷4556 [Vani有约会]雨天的尾巴
    BZOJ2212或洛谷3521 [POI2011]ROT-Tree Rotations
    洛谷1119 灾后重建
    洛谷1462(重题1951) 通往奥格瑞玛的道路(收费站_NOI导刊2009提高(2))
    BZOJ2721或洛谷1445 [Violet]樱花
  • 原文地址:https://www.cnblogs.com/wangha/p/10559834.html
Copyright © 2011-2022 走看看