标题:Qt环境下实现串口温湿度数据实时显示教程
文章正文:
随着物联网技术的不断发展,数据采集与显示已成为许多应用场景中的重要环节。在智能家居、工业控制等领域,实时监测温湿度数据对于确保设备正常运行和用户舒适度至关重要。本文将介绍如何使用Qt框架结合串口通信技术,实现温湿度数据的实时显示。
一、准备工作
-
硬件设备
- 温湿度传感器(如DHT11、DHT22等)
- 串口模块(如Arduino、STM32等)
- PC电脑
-
软件环境
- Qt Creator 5.14.2及以上版本
- Qt 5.14.2及以上版本
- 串口通信库(如Qt Serial Port)
二、串口温湿度数据采集
-
传感器连接 将温湿度传感器连接到串口模块的相应引脚上,确保连接正确。
-
串口模块编程 根据所选串口模块的编程手册,编写相应的代码,实现温湿度数据的采集。以下以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);
}
- 串口模块与PC通信 将串口模块通过USB线连接到PC,打开串口监视器,设置波特率为9600。
三、Qt串口实时显示温湿度数据
-
创建Qt项目 打开Qt Creator,创建一个新的Qt Widgets Application项目,命名为“温湿度显示”。
-
添加串口通信模块 在项目文件中,添加Qt Serial Port模块。
-
设计界面 在Qt Designer中,设计界面,包括以下控件:
- QLabel:用于显示温湿度数据
- QPushButton:用于连接/断开串口
-
编写代码 在主窗口类中,编写以下代码:
#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请参考李洋个人博客