本文将介绍基于米尔电子MYD-LD25X开发板(米尔基于STM35MP257开发板)的环境监测系统方案测试。
一、前言
环境监测是当前很多场景需要的项目,刚好我正在论坛参与的一个项目:Thingy:91X 蜂窝物联网原型开发平台的试用。把两个项目结合起来,实现一个简单的环境监测系统。
二、硬件平台
1、米尔-STM32MP257开发板
2、Thingy:91X
三、项目规划
4、接收数据并在UI界面中展示。
四、QT设计
1、QT安装
Index of /qtproject/official_releases/online_installers/
其他的按官方的教程就可以安装了。
2、Kit的配置
给相应的需要显示的label根据接收的数据,定义了相应的标签值:
#include <QtMqtt/QMqttClient>
【注】在官方发布的固件中,是没有QTMqtt的连接文件的,当运行带的QtMqtt的程序会报错:
error while loading shared libraries: libQt5Mqtt.so.5: cannot open shared object file: No such file or directory
需要从SDK中复制到开发板目录中。
同时为了实现检测与MQTT服务器的连接状态,需要引入一个线程,用于检测是否连接到服务器:
void run() override { while (true) { if (m_client) { QString statusText = m_client->state() == QMqttClient::Connected ? "连接服务器:成功" : "连接服务器:失败"; emit updateStatus(statusText); } msleep(1000); // 每秒检测一次 } }
7、在main中编写代码如下: MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), m_client(new QMqttClient(this)) // 初始化MQTT客户端实例 { ui->setupUi(this); // 设置MQTT客户端参数 m_client->setHostname("hostname"); m_client->setPort(1883); // 默认MQTT端口 m_client->setClientId("client_id"); m_client->setUsername("usrename"); m_client->setPassword("pwd"); // 连接信号槽,处理连接成功事件 connect(m_client, &QMqttClient::connected, this, [this]() { // 连接成功,修改label的文本 ui->mqtt_client_state->setText("连接服务器:成功"); // 订阅主题 m_client->subscribe(QMqttTopicFilter("devacademy/publish/topic")); }); // 连接信号槽,处理消息接收事件 connect(m_client, &QMqttClient::messageReceived, this, &MainWindow::onMessageReceived); // 启动MQTT连接 m_client->connectToHost(); // 创建并启动连接状态检测线程 MqttConnectionChecker *checker = new MqttConnectionChecker(m_client, ui->mqtt_client_state, this); connect(checker, &MqttConnectionChecker::updateStatus, this, [this](const QString &status) { ui->mqtt_client_state->setText(status); }); checker->start(); }
8、编译订阅回调如下: void MainWindow::onMessageReceived(const QByteArray &message, const QMqttTopicName &topic) { Q_UNUSED(topic); // 解析JSON数据 QJsonDocument doc = QJsonDocument::fromJson(message); if (!doc.isNull() && doc.isObject()) { QJsonObject obj = doc.object(); double temp = obj.value("temp").toDouble(); double press = obj.value("press").toDouble()/100; double humidity = obj.value("humidity").toDouble(); int iaq = obj.value("iaq").toInt(); double co2 = obj.value("co2").toDouble(); double voc = obj.value("voc").toDouble(); //将这些数据更新到UI ui->label_temp->setText(QString::number(temp, 'f', 2)); ui->label_press->setText(QString::number(press, 'f', 2)); ui->label_humidity->setText(QString::number(humidity, 'f', 2)); ui->label_iaq->setText(QString::number(iaq, 'f', 2)); ui->label_co2->setText(QString::number(co2, 'f', 2)); ui->label_voc->setText(QString::number(voc, 'f', 2)); // 在这里可以将解析后的数据更新到UI或其他处理逻辑 } else { qDebug() << "Invalid JSON message received"; } }
五、实验效果
编译好程序后,上传到开发板,运行后,效果如下:
六、总结
米尔-STM32MP257开发板,通过QT来设计UI界面,通过mqtt来订阅指定的主题,实现环境监测。在物联网方面大有作为!