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

  • 相关阅读:
    TCP/IP资料整理
    对谷歌自带闹钟应用中材料设计的吹毛求疵
    如何给非AppCompatActivity添加Toolbar?--关于5.0新特性兼容5.0以下设备的探索
    Android 5.0自定义动画
    Android开发Tips-1
    Android控件RecyclerView与ListView的异同
    有关Android存储的相关概念辨析
    关于RecyclerView中Viewholder和View的缓存机制的探究
    Android Wear和二维码
    构建具有深度和灵活性的安卓Wear应用
  • 原文地址:https://www.cnblogs.com/wangha/p/10559834.html
Copyright © 2011-2022 走看看