news 2026/6/9 9:22:00

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/6/9 18:41:30

Playwright CI/CD集成:GitHub Actions与Jenkins配置

关注 霍格沃兹测试学院公众号&#xff0c;回复「资料」, 领取人工智能测试开发技术合集在现代软件开发中&#xff0c;持续集成和持续部署&#xff08;CI/CD&#xff09;已成为确保代码质量和加速交付的核心实践。对于前端和端到端测试&#xff0c;微软开源的Playwright凭借其跨…

作者头像 李华
网站建设 2026/6/9 18:33:14

Qwen3Guard-Gen-WEB数据标注:构建高质量训练集的方法论

Qwen3Guard-Gen-WEB数据标注&#xff1a;构建高质量训练集的方法论 1. 引言&#xff1a;安全审核模型的演进与挑战 随着大语言模型&#xff08;LLM&#xff09;在各类应用场景中的广泛部署&#xff0c;内容安全问题日益凸显。不当、有害或违规内容的生成不仅影响用户体验&…

作者头像 李华
网站建设 2026/6/9 19:40:46

保护隐私的语音合成|Supertonic完全本地化推理详解

保护隐私的语音合成&#xff5c;Supertonic完全本地化推理详解 1. 引言&#xff1a;为什么需要设备端TTS&#xff1f; 随着人工智能在语音交互场景中的广泛应用&#xff0c;文本转语音&#xff08;Text-to-Speech, TTS&#xff09;技术已成为智能助手、无障碍阅读、有声内容生…

作者头像 李华
网站建设 2026/6/9 22:38:08

图解说明STM32在嘉立创EDA中的差分布线技巧

图解说明STM32在嘉立创EDA中的差分布线技巧从一个USB通信失败说起你有没有遇到过这样的情况&#xff1a;STM32程序烧录正常&#xff0c;外设初始化无误&#xff0c;但USB就是枚举失败&#xff1f;或者以太网偶尔丢包&#xff0c;调试数小时却找不到原因&#xff1f;别急——问题…

作者头像 李华
网站建设 2026/6/9 19:55:05

探索OMRON NJ501 - 1520真实项目程序:编程思维与能力的飞升之旅

OMRON NJ501-1520真实项目程序 欧姆龙NJ做的程序27轴110个气缸1个机械手。 里面的功能块可以会给你种全新的思维。 如果你想扩展编程思维以及提升编程能力&#xff01; 里面写的气缸块 伺服块 转盘块 三轴码垛拆垛位置计算以及触摸屏上伺服和气缸分别用一个页面显示操作。 而…

作者头像 李华
网站建设 2026/6/9 23:18:45

Llama3与cv_unet对比:大模型与视觉模型部署差异实战分析

Llama3与cv_unet对比&#xff1a;大模型与视觉模型部署差异实战分析 1. 引言&#xff1a;大模型与视觉模型的部署场景差异 随着人工智能技术的快速发展&#xff0c;大规模语言模型&#xff08;LLM&#xff09;和计算机视觉模型在实际业务中得到了广泛应用。Llama3作为当前主流…

作者头像 李华