Qt环境下实现串口温湿度数据实时显示教程

Qt环境下实现串口温湿度数据实时显示教程

富贵荣华 2024-12-13 职业发展 89 次浏览 0个评论

标题:Qt环境下实现串口温湿度数据实时显示教程

文章正文:

随着物联网技术的不断发展,数据采集与显示已成为许多应用场景中的重要环节。在智能家居、工业控制等领域,实时监测温湿度数据对于确保设备正常运行和用户舒适度至关重要。本文将介绍如何使用Qt框架结合串口通信技术,实现温湿度数据的实时显示。

一、准备工作

  1. 硬件设备

    Qt环境下实现串口温湿度数据实时显示教程

    • 温湿度传感器(如DHT11、DHT22等)
    • 串口模块(如Arduino、STM32等)
    • PC电脑
  2. 软件环境

    • Qt Creator 5.14.2及以上版本
    • Qt 5.14.2及以上版本
    • 串口通信库(如Qt Serial Port)

二、串口温湿度数据采集

  1. 传感器连接 将温湿度传感器连接到串口模块的相应引脚上,确保连接正确。

  2. 串口模块编程 根据所选串口模块的编程手册,编写相应的代码,实现温湿度数据的采集。以下以Arduino为例:

#include <DHT.h>

#define DHTPIN 2
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  dht.begin();
}

void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.println(" *C");

  delay(2000);
}
  1. 串口模块与PC通信 将串口模块通过USB线连接到PC,打开串口监视器,设置波特率为9600。

三、Qt串口实时显示温湿度数据

  1. 创建Qt项目 打开Qt Creator,创建一个新的Qt Widgets Application项目,命名为“温湿度显示”。

  2. 添加串口通信模块 在项目文件中,添加Qt Serial Port模块。

  3. 设计界面 在Qt Designer中,设计界面,包括以下控件:

    • QLabel:用于显示温湿度数据
    • QPushButton:用于连接/断开串口
  4. 编写代码 在主窗口类中,编写以下代码:


#include <QSerialPort>
#include <QSerialPortInfo>
#include <QThread>

class SerialThread : public QThread {
public:
    QSerialPort *serialPort;
    QString data;

    SerialThread(QSerialPort *port) {
        serialPort = port;
        connect(serialPort, &QSerialPort::readyRead, this, &SerialThread::readData);
    }

private slots:
    void readData() {
        data = serialPort->readAll();
        emit dataReady(data);
    }
};

class MainWindow : public QMainWindow {
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) {
        // 初始化串口
        serialPort = new QSerialPort(this);
        serialThread = new SerialThread(serialPort);

        // 连接信号与槽
        connect(serialThread, &SerialThread::dataReady, this, &MainWindow::updateData);

        // 连接串口
        connectButton = new QPushButton("Connect", this);
        connect(connectButton, &QPushButton::clicked, this, &MainWindow::connectSerial);

        // 显示温湿度数据
        temperatureLabel = new QLabel("Temperature: ", this);
        humidityLabel = new QLabel("Humidity: ", this);

        // 设置布局
        QVBoxLayout *layout = new QVBoxLayout(this);
        layout->addWidget(connectButton);
        layout->addWidget(temperatureLabel);
        layout->addWidget(humidityLabel);

        setCentralWidget(this);
    }

private slots:
    void connectSerial() {
        if (serialPort->isOpen()) {
            serialPort->close();
            connectButton->setText("Connect");
        } else {
            QString portName = QSerialPortInfo::availablePorts().at(0);
            serialPort->setPortName(portName);
            serialPort->setBaudRate(QSerialPort::Baud9600);
            serialPort->open(QIODevice::ReadWrite);
            connectButton->setText("Disconnect");
            serialThread->start();
        }
    }

    void updateData(const QString &data) {
        QStringList dataList = data.split("\n");
        for (int i = 0; i < dataList.size(); i++) {
            if (dataList.at(i).startsWith("Temperature: ")) {
                temperatureLabel->setText(dataList.at(i));
            } else if (
你可能想看:

转载请注明来自中国大学生门户网站,本文标题:《Qt环境下实现串口温湿度数据实时显示教程》

百度分享代码,如果开启HTTPS请参考李洋个人博客
Top