如何在米尔-STM32MP257开发板上部署环境监测系统
本文将介绍基于米尔电子MYD-LD25X开发板(米尔基于STM35MP257开发板)的环境监测系统方案测试。摘自优秀创作者-lugl4313820一、前言环境监测是当前很多场景需要的项目,刚好我正在论坛参与的一个项目:Thingy:91X 蜂窝物联网原型开发平台的试用。把两个项目结合起来,实现一个简单的环境监测系统。
二、硬件平台1、米尔-STM32MP257开发板https://srcc.myir.cn/images/20250417/b6042c5124609d9e6d833da11fc443f1.png?v=4317492、Thingy:91X https://srcc.myir.cn/images/20250417/cdcb36437bff361d60fd76e37bb8000f.png?v=827606
三、项目规划1、米尔-STM32MP257开发板,板载了wifi模块,通过wifi连接到互联网。2、启用MQTT,连接到私有的服务器,并订阅指定的主题。3、使用QT设计UI界面。4、接收数据并在UI界面中展示。
四、QT设计1、QT安装1.1. 下载在线安装包,现在好像只有一个在线安装包了。网址:Index of /qtproject/official_releases/online_installers/
https://srcc.myir.cn/images/20250417/480f05f4e120d3fa86ec764d36d19814.png?v=9972251.2. 下载好后,上传给虚拟机,执行安装。安装有几个地方要注意。https://srcc.myir.cn/images/20250417/f7735d67a7969f8a1c9e04da56d23f30.png?v=390795https://srcc.myir.cn/images/20250417/eb489289dc0f8a5c54412e2c8d2286c1.png?v=454034其他的按官方的教程就可以安装了。
2、Kit的配置在官方给出的示例中,与这个版本的不一样,首先设置GCC只需要选择gcc就行了,然后g++自动在下面选择:https://srcc.myir.cn/images/20250417/2d8afdcfef260a2ee0b09798b50538da.png?v=785265最后是QT version的选择要按下图选择。https://srcc.myir.cn/images/20250417/da01be3860e8fa959f254a41f6251a2c.png?v=586486
这样就可以进行交叉编译了,然后如下:https://srcc.myir.cn/images/20250417/fd84271bbc6786afd2c140656ec597a4.jpg?v=904570
3、创建桌面程序在文章介绍的基础上,我创建了一个基于QT的桌面程序,其UI界面如下:https://srcc.myir.cn/images/20250417/d062e3355b7f9882e6f6c90085baa6ea.png?v=499040
4、定义标签值给相应的需要显示的label根据接收的数据,定义了相应的标签值:https://srcc.myir.cn/images/20250417/33bc2bb8434f3d4a52f234fd2e749190.png?v=972550
5、引入QT的QtMqtt/QMqttClient 库#include <QtMqtt/QMqttClient>
【注】在官方发布的固件中,是没有QTMqtt的连接文件的,当运行带的QtMqtt的程序会报错:error while loading shared libraries: libQt5Mqtt.so.5: cannot open shared object file: No such file or directory
需要从SDK中复制到开发板目录中。
6、检测连接状态同时为了实现检测与MQTT服务器的连接状态,需要引入一个线程,用于检测是否连接到服务器: void run() override
{
while (true)
{
if (m_client)
{
QString statusText = m_client->state() == QMqttClient::Connected
? "连接服务器:成功"
: "连接服务器:失败";
emit updateStatus(statusText);
}
msleep(1000); // 每秒检测一次
}
}
7、在main中编写代码如下:<pre class="brush:cpp;toolbar:false" style="margin-top: 0.5em; margin-bottom: 0.5em; padding: 0.4em 0.6em; border-radius: 8px; background: rgb(248, 248, 248); line-height: 1.5;">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, ()
{
// 连接成功,修改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, (const QString &status)
{ ui->mqtt_client_state->setText(status); });
checker->start();
}</pre>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";
}
}
五、实验效果编译好程序后,上传到开发板,运行后,效果如下:https://srcc.myir.cn/images/20250417/4df02f76baad9bc792f8177aee8d0cd0.jpg?v=374857https://srcc.myir.cn/images/20250417/e35b95f7033025468550ada55b5c8dfb.jpg?v=751303
六、总结米尔-STM32MP257开发板,通过QT来设计UI界面,通过mqtt来订阅指定的主题,实现环境监测。在物联网方面大有作为!
后续可拓展支持报警机制(如CO₂过高时发出提示)、远程控制、历史数据存储等功能,增强实用性。
页:
[1]