樹莓派中QT實現串口通訊
開發平台為QT
此博客QT使用的為WiringPi驅動
我使用的串口調試助手為 cutecom
先簡單說一些開發過程中需要注意的問題
- Linux 下設備為 tty ,對應在 windows 下為 COM
- ttyS0 與 ttyUSB0 不是一個東西
- 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("\n");
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*
詳細可以參考: