当前位置: 首页 > news >正文

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

http://www.cnnetsun.cn/news/637423.html

相关文章:

  • Whisper Large v3模型量化:INT8推理加速实践
  • 2026大厂测试技术栈全景:新人该学什么?
  • YOLOv10环境配置太难?官版镜像帮你省心搞定
  • NewBie-image-Exp0.1性能测试:不同硬件配置对比分析
  • UNet人像卡通化社交媒体营销:爆款内容创作利器实战演示
  • YOLOv8远程控制:Web端操作部署指南
  • 一站式PDF内容提取方案|基于科哥开发的PDF-Extract-Kit镜像
  • 视觉语言模型新思路:Glyph技术原理与实战入门必看
  • CV-UNet抠图技术揭秘:如何实现高精度Alpha通道提取
  • Z-Image-Turbo生成模糊?提升推理步数优化案例详解
  • 台达触摸屏与多台变频器及温控器485通信全攻略
  • 测试开机启动脚本镜像使用心得:简洁高效适合初学者
  • 基于Flask框架的AI服务封装:Super Resolution实战教学
  • 避免重复检测:FSMN-VAD去重策略优化实战
  • 轻量语音合成模型对比:CosyVoice-300M Lite优势分析
  • 实测分享:BSHM人像抠图真实效果,边缘细节太细腻
  • 图像修复结果保存技巧:fft npainting lama时间戳命名规则
  • DeepSeek-R1支持中文吗?本地化推理实战解答
  • 基于CanFestival协议栈的CANopen程序开发:STM32F407实战
  • 多模态检索准备:bge-m3文本嵌入服务部署入门必看
  • 三相逆变整流并网技术的正负序分离与负序电流消除,保障电网电流三相对称——适用于光伏和风力发电系...
  • JLink下载STM32配置指南:手把手教程(从零实现)
  • 解决模糊文本检测难题:cv_resnet18_ocr-detection低阈值实战技巧
  • ‌我被AI骗了:它说“通过”,结果生产环境爆了10个严重缺陷
  • 感应电机与异步电机定子匝间短路现象的Matlab Simulink仿真研究
  • 探索汇川MD500/MD380变频器77版源码的魅力
  • 看完就想试!BGE-Reranker-v2-m3打造的智能检索效果分享
  • 打造C#松下PLC通信工具,开启高效工业自动化之旅
  • 玩转Crowbar:双馈风机低电压穿越仿真实战
  • 西门子博途V16最新同步运行程序:三轴码垛双驱同步与PN通讯SCL项目实战学习教程