Qt温度湿度传感器采样上位机源代码C++数据记录功能Windows上位机

在开发Windows上位机应用程序时,利用Qt框架来实现温度湿度传感器数据的采样及记录是一个相当不错的选择。今天就来和大家分享一下如何在Qt中实现这一功能。

一、项目初始化

首先,我们创建一个新的Qt Widgets Application项目。打开Qt Creator,依次选择“File” -> “New File or Project”,然后在“Application”下选择“Qt Widgets Application”,按照向导提示一步步完成项目的创建。

二、界面设计

我们需要设计一个简单的界面,用于显示传感器数据以及记录数据的相关操作按钮。在Qt Designer中,我们可以轻松地拖拽各种控件来搭建界面。

Qt温度湿度传感器采样上位机源代码C++数据记录功能Windows上位机

例如,我们可能会添加几个QLabel用于显示温度和湿度的数值,再添加一个QPushButton用于开始/停止数据记录,还需要一个QTextEdit或者QTableWidget来临时展示记录的数据(这里以QTextEdit为例)。

三、核心代码实现

1. 数据采样模拟

在实际项目中,温度湿度传感器的数据通常通过串口、I2C或者其他通信协议获取。这里我们先简单模拟一下数据的获取过程。

// 模拟获取温度数据
double getTemperature() {
    // 实际应用中这里会是与传感器通信获取数据的代码
    return qrand() % 40 + 10; // 模拟10 - 50之间的随机温度值
}

// 模拟获取湿度数据
double getHumidity() {
    // 实际应用中这里会是与传感器通信获取数据的代码
    return qrand() % 60 + 20; // 模拟20 - 80之间的随机湿度值
}

2. 数据记录功能

接下来实现数据记录功能。我们可以将数据记录到文件中,方便后续查看和分析。

#include <QFile>
#include <QDateTime>

void saveDataToFile(double temperature, double humidity) {
    QFile file("sensor_data.txt");
    if (!file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text)) {
        qWarning() << "Could not open file for writing";
        return;
    }

    QDateTime currentTime = QDateTime::currentDateTime();
    QString timeStr = currentTime.toString("yyyy-MM-dd hh:mm:ss");
    QString dataLine = QString("%1, Temperature: %2 °C, Humidity: %3 %%\n")
                         .arg(timeStr)
                         .arg(temperature, 0, 'f', 2)
                         .arg(humidity, 0, 'f', 2);

    file.write(dataLine.toUtf8());
    file.close();
}

在这段代码中,我们首先尝试打开一个名为sensor_data.txt的文件。如果文件打开失败,我们通过qWarning输出警告信息。成功打开文件后,我们获取当前的日期和时间,并将温度、湿度数据按照一定的格式组合成一行字符串写入文件。arg函数用于格式化字符串,其中0表示不指定最小宽度,'f'表示以浮点数形式输出,2表示保留两位小数。

3. 与界面交互

我们需要将数据采样和记录功能与界面上的按钮等控件关联起来。假设我们有一个QPushButton用于开始/停止记录数据,在mainwindow.cpp中的MainWindow构造函数里进行如下关联:

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
 , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    connect(ui->startRecordButton, &QPushButton::clicked, this, &MainWindow::startStopRecord);
}

void MainWindow::startStopRecord() {
    static bool isRecording = false;
    if (!isRecording) {
        ui->startRecordButton->setText("Stop Record");
        isRecording = true;
        QTimer *timer = new QTimer(this);
        connect(timer, &QTimer::timeout, [this]() {
            double temperature = getTemperature();
            double humidity = getHumidity();
            ui->temperatureLabel->setText(QString("Temperature: %1 °C").arg(temperature, 0, 'f', 2));
            ui->humidityLabel->setText(QString("Humidity: %1 %%").arg(humidity, 0, 'f', 2));
            saveDataToFile(temperature, humidity);
            ui->dataTextEdit->append(QString("Time: %1, Temperature: %2 °C, Humidity: %3 %%")
                                        .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"))
                                        .arg(temperature, 0, 'f', 2)
                                        .arg(humidity, 0, 'f', 2));
        });
        timer->start(5000); // 每5秒获取并记录一次数据
    } else {
        ui->startRecordButton->setText("Start Record");
        isRecording = false;
    }
}

startStopRecord函数中,我们使用一个静态变量isRecording来跟踪当前是否正在记录数据。当按钮第一次被点击时,按钮文本变为“Stop Record”,同时创建一个QTimer,并将其timeout信号连接到一个匿名函数。在这个匿名函数中,我们获取模拟的温度和湿度数据,更新界面上显示温度和湿度的QLabel,调用saveDataToFile函数将数据保存到文件,并且在QTextEdit中追加显示最新的数据记录。QTimer设置为每5000毫秒(即5秒)触发一次timeout信号,实现定时采样和记录。当按钮再次被点击时,按钮文本变回“Start Record”,并停止记录。

通过以上步骤,我们就利用Qt完成了一个简单的温度湿度传感器采样上位机的数据记录功能,能够在Windows系统上稳定运行。当然,在实际应用中,还需要根据具体的传感器通信协议来准确获取真实的数据,这只是一个基础的框架示例。希望这篇博文能给你在相关开发工作中带来一些帮助和启发。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐