树莓派中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*
详细可以参考: