LCUS型 USB继电器模块 电脑串口控制开关 PC智能控制器在pc端使用Qt程序进行串口控制

cpp 复制代码
#include "my_serial.h"  // 或者包含你的主窗口头文件

/*
    * 通讯协议说明:
    * LC USB 开关默认通讯波特率为:9600BPS
    * 打开第一路USB开关:A0 01 01 A2
    * 关闭第一路USB开关:A0 01 00 A1
    * 打开第二路USB开关:A0 02 01 A3
    * 关闭第二路USB开关:A0 02 00 A2
    *
    * LC USB 开关通讯协议
    * 数据(1) --- 启始标识(默认为0xA0)
    * 数据(2) --- 开关地址码(0x01和0x02分别代表第一和第二路开关)
    * 数据(3) --- 操作数据(0x00为"关",0x01为"开")
    * 数据(4) --- 校验码
    *
 */

    SerialPortHandler::SerialPortHandler(QObject *parent) : QObject(parent) {

    }

    SerialPortHandler::~SerialPortHandler() {
        if (serial->isOpen()) {
            serial->close();
        }
    }

    QSerialPort * SerialPortHandler::SerialPortInit(){
        serial = new QSerialPort(this);

        connect(serial, &QSerialPort::readyRead, this, &SerialPortHandler::readData);

        // 配置串口参数
        serial->setPortName("COM3");  // 根据实际情况修改串口名称
        serial->setBaudRate(QSerialPort::Baud9600);
        serial->setDataBits(QSerialPort::Data8);
        serial->setParity(QSerialPort::NoParity);
        serial->setStopBits(QSerialPort::OneStop);
        serial->setFlowControl(QSerialPort::NoFlowControl);

        if (!serial->open(QIODevice::ReadWrite)) {
            qDebug() << "Failed to open port" << serial->portName() << ", error:" << serial->errorString();
        } else {
            qDebug() << "Port" << serial->portName() << "opened successfully.";
        }
        return serial;
    }

    void SerialPortHandler::readData() {
        QByteArray data = serial->readAll();
        qDebug() << "Read data:" << data;

        // 示例:回显接收到的数据
        serial->write(data);
    }

    void SerialPortHandler::sendData(const QByteArray &data) {
        if (serial->isOpen()) {
            serial->write(data);
        } else {
            qDebug() << "Port is not open!";
        }
    }

    void SerialPortHandler::sendOpen1() {
        // QByteArray hexString = "A00101A2";
        QByteArray hexData = QByteArray::fromHex("A00101A2");
        if (serial->isOpen()) {
            // serial->write(hexData);
            qint64 bytesWritten = serial->write(hexData);
            if (bytesWritten == -1) {
                qDebug() << "Failed to write data to serial port";
            } else {
                qDebug() << "Data written to serial port successfully";
            }
        } else {
            qDebug() << "Port is not open!";
        }
    }

    void SerialPortHandler::sendClose1() {
        // QByteArray hexString = ;
        QByteArray hexData = QByteArray::fromHex("A00100A1");
        if (serial->isOpen()) {
            qint64 bytesWritten = serial->write(hexData);
            if (bytesWritten == -1) {
                qDebug() << "Failed to write data to serial port";
            } else {
                qDebug() << "Data written to serial port successfully";
            }
        } else {
            qDebug() << "Port is not open!";
        }
    }

    void SerialPortHandler::sendOpen2() {
        QByteArray hexString = "A00201A3";
        QByteArray hexData = QByteArray::fromHex(hexString);
        if (serial->isOpen()) {
            serial->write(hexData);
        } else {
            qDebug() << "Port is not open!";
        }
    }

    void SerialPortHandler::sendClose2() {
        QByteArray hexString = "A00200A2";
        QByteArray hexData = QByteArray::fromHex(hexString);
        if (serial->isOpen()) {
            serial->write(hexData);
        } else {
            qDebug() << "Port is not open!";
        }
    }

my_serial.cpp

cpp 复制代码
#ifndef MY_SERIAL_H
#define MY_SERIAL_H

#include <QCoreApplication>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QObject>
#include <QDebug>
#include <QByteArray>


class SerialPortHandler : public QObject {
    Q_OBJECT

public:
    // explicit ReceiveThread(QObject *parent = nullptr);
    explicit SerialPortHandler(QObject *parent = nullptr);

    ~SerialPortHandler();

    QSerialPort * SerialPortInit();

    void sendData(const QByteArray &data);

    void sendOpen1();

    void sendClose1();

    void sendOpen2();

    void sendClose2();

public slots:
    void readData();



private:
    QSerialPort *serial;
};
#endif // MY_SERIAL_H

my_serial.h

上面是串口封装代码

同时需要在.pro文件的中添加串口模块:确保在项目文件(.pro)中添加了串口通信相关的运行库。QT += serialport

接下来就是安装驱动程序,这个我推荐看b站up的视频,下面是链接。

CH340串口驱动安装教程-不废话_哔哩哔哩_bilibili

按照链接安装好程序驱动后启动你写的qt程序之后调用对应的代码就可以控制继电器了

下面是我写的控制代码

cpp 复制代码
void MainWindow::on_pushButton_2_clicked()
{
    if(false == power_flag){
        power_on();
        power_flag = true;
    }else if(true == power_flag){
        power_off();
        power_flag = false;
    }
}

void MainWindow::power_on(){
    m_serialSend->sendOpen1();
    m_serialSend->sendOpen2();
    ui->pushButton_2->setStyleSheet("QPushButton { border-radius: 20px; background-color: rgb(144,238,144); }");
}

void MainWindow::power_off(){
    m_serialSend->sendClose2();
    m_serialSend->sendClose1();
    ui->pushButton_2->setStyleSheet("QPushButton { border-radius: 20px; background-color: rgb(255,157,154); }");
}

通过点击电源按钮即可控制电源的通断,同时也可在程序中调用代码进行逻辑上的控制电源通断。

相关推荐
Julien20042 小时前
管理机密(一)
运维·服务器·开发语言·学习方法
Chen_harmony2 小时前
七、STL与string类
开发语言·c++
沐晓时光2 小时前
C语言入门,字符串和字符串函数知识讲解
c语言·开发语言
xxxiugou1233 小时前
C++命名空间与引用全解析
开发语言·c++
BroNekoX3 小时前
我将基于 QtQuick 框架开发的音乐播放器性能做到顶级
qt
yangmu32034 小时前
编程语言发展简史:从机器指令到智能协作
开发语言
Pniubi7 小时前
Java为什么要分堆和栈
java·开发语言
小小晓.7 小时前
Qt 对话框、QLineEdit 与布局管理实战详解
开发语言·qt
炸薯条!8 小时前
博客系统测试报告
开发语言·lua
Evand J8 小时前
【MATLAB例程12】永磁同步电机基于增广无迹卡尔曼滤波的未知负载转矩在线观测
开发语言·matlab