news 2026/9/30 13:08:57

Qt实现温度湿度传感器采样上位机之数据记录功能

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Qt实现温度湿度传感器采样上位机之数据记录功能

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系统上稳定运行。当然,在实际应用中,还需要根据具体的传感器通信协议来准确获取真实的数据,这只是一个基础的框架示例。希望这篇博文能给你在相关开发工作中带来一些帮助和启发。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/27 19:24:25

离线语音识别解决方案|基于科哥构建的SenseVoice Small镜像

离线语音识别解决方案&#xff5c;基于科哥构建的SenseVoice Small镜像 1. 引言&#xff1a;离线语音识别的现实需求与技术选型 在当前AI大模型快速发展的背景下&#xff0c;语音识别技术已广泛应用于智能客服、会议记录、内容创作等多个场景。然而&#xff0c;在实际落地过程…

作者头像 李华
网站建设 2026/9/26 16:24:24

Youtu-2B情感分析应用:舆情监控部署教程

Youtu-2B情感分析应用&#xff1a;舆情监控部署教程 1. 引言 随着社交媒体和在线平台的快速发展&#xff0c;公众情绪的实时感知已成为企业品牌管理、政府舆情应对和市场策略制定的重要依据。传统的情感分析方法在语义理解深度和上下文建模能力上存在局限&#xff0c;难以应对…

作者头像 李华
网站建设 2026/9/27 17:54:47

GLM-TTS实战指南:批量推理自动化生成音频详细步骤

GLM-TTS实战指南&#xff1a;批量推理自动化生成音频详细步骤 1. 引言 随着人工智能技术的不断演进&#xff0c;文本转语音&#xff08;TTS&#xff09;系统在内容创作、有声读物、虚拟助手等场景中发挥着越来越重要的作用。GLM-TTS 是由智谱AI开源的一款高质量语音合成模型&…

作者头像 李华
网站建设 2026/9/28 22:40:27

STM32串口通信在Keil中的实现:完整示例

手把手教你用Keil点亮STM32串口通信&#xff1a;从零开始的实战指南你有没有遇到过这样的场景&#xff1f;代码烧进STM32后&#xff0c;板子“安静如鸡”&#xff0c;既不报错也不输出&#xff0c;只能靠猜哪里出了问题。这时候&#xff0c;如果能通过串口打印一句Hello, Im al…

作者头像 李华
网站建设 2026/9/29 12:34:23

手把手教你用BGE-M3构建智能问答系统

手把手教你用BGE-M3构建智能问答系统 1. 引言&#xff1a;为什么选择BGE-M3构建智能问答系统&#xff1f; 1.1 智能问答系统的检索挑战 在现代智能问答系统中&#xff0c;用户的问题往往涉及多语言、长文档或精确关键词匹配。传统单一模式的嵌入模型&#xff08;如仅支持密集…

作者头像 李华
网站建设 2026/9/26 23:09:49

移动端AI新选择:DeepSeek-R1-Distill-Qwen-1.5B

移动端AI新选择&#xff1a;DeepSeek-R1-Distill-Qwen-1.5B 1. 引言&#xff1a;轻量级模型的推理革命 随着大模型在各类应用场景中的广泛落地&#xff0c;如何在资源受限的设备上实现高效、高质量的推理成为工程实践中的关键挑战。传统大模型虽然性能强大&#xff0c;但往往…

作者头像 李华