当前位置:   article > 正文

Qt 编程——串口通信方法_ubuntu22下qt串口编程

ubuntu22下qt串口编程

这两天在帮小伙伴做项目,给我提了一个任务,就是用Qt做一个串口通信的上位机。研究了两天后,直接利用Qt封装了一个类。

关于串口通信协议,我就不多扯了,别人说的比我专业,我这里直接把我参考的作者的连结放在这里,感兴趣的直接跳转过去就好了。

《Qt实现串口通信(C++实现串口通信小助手)—串口收发及串口数据解码、串口通信模拟器。》

如果你需要代码的话,直接拷贝复制到你的项目就可以用了,除了Qt的库以外没有用任何第三方库,所以应该很容易移植的。

H文件部分

#ifndef SERIALHELPER_H
#define SERIALHELPER_H

#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>

class SerialHelper
{
private:
    QSerialPort serial;

public:
    SerialHelper();

public:
    void connect(QString portName, qint32 baudRate, QSerialPort::DataBits dataBits,
                 QSerialPort::StopBits stopBits, QSerialPort::Parity parity);

    void disconnect();

    bool connected();

    bool available();

    QSerialPort* getInstance();

    void send(QString msg);

    QString recv();

    QString errormsg();
};

#endif // SERIALHELPER_H
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

C++ 文件部分

#include "serialhelper.h"

SerialHelper::SerialHelper() : serial()
{

}


void SerialHelper::connect(QString portName, qint32 baudRate, QSerialPort::DataBits dataBits,
             QSerialPort::StopBits stopBits, QSerialPort::Parity parity)
{
    serial.setPortName(portName);
    serial.setBaudRate(baudRate);
    serial.setStopBits(stopBits);
    serial.setDataBits(dataBits);
    serial.setParity(parity);

    // connect to remote device via serial port
    serial.open(QIODevice::ReadWrite);
};

void SerialHelper::disconnect()
{
    serial.clear();
    serial.close();
};

bool SerialHelper::connected()
{
    return serial.isOpen();
};

bool SerialHelper::available()
{
    return serial.isOpen() & serial.isWritable() & serial.isReadable();
};

QSerialPort* SerialHelper::getInstance()
{
    return &serial;
};

void SerialHelper::send(QString msg)
{
    serial.write(msg.toLocal8Bit());
};

QString SerialHelper::recv()
{
    auto buf = serial.readAll();
    if (!buf.isEmpty())
    {
        QString msg = QString::fromLocal8Bit(buf); //支持中文显示
        buf.clear();
        return msg;
    } else {
        return "read data failed";
        buf.clear();
    }
};

QString SerialHelper::errormsg()
{
    return serial.errorString();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

你要做的就是拷贝以上两段代码,然后在下面做如下操作:

	// 创建对象
	SerialHelper helper;
	
	// 创建Serial的连结
	helper.connect("COM", QSerialPort::Baud1200,
			QSerialPort::Data8,
			QSerialPort::OneStop,
			QSerialPort::NoParity);
	// 断开连结
	helper.disconnect();
	
	// 收发数据
	if (helper.available()) {
		// 发送数据
		helper.send("Hello world!");
		...
		// 接收数据
		auto msg = helper.recv();
		...
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

大概就这么简单,好了,祝你顺利!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/979388
推荐阅读
相关标签
  

闽ICP备14008679号