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

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();
}

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

	// 创建对象
	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();
		...
	}

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

相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页