查看: 499|回复: 0

基于米尔-STM32MP257开发板的环境监测系统方案应用

[复制链接]
发表于 7 天前 | 显示全部楼层 |阅读模式
关键词: ST , 嵌入式 , STM32MP257 , 米尔 , 开发板
本文将介绍基于米尔电子MYD-LD25X开发板(米尔基于STM35MP257开发板)的环境监测系统方案测试。
摘自优秀创作者-lugl4313820

一、前言

环境监测是当前很多场景需要的项目,刚好我正在论坛参与的一个项目:Thingy:91X 蜂窝物联网原型开发平台的试用。把两个项目结合起来,实现一个简单的环境监测系统。


二、硬件平台

1、米尔-STM32MP257开发板

2、Thingy:91X


三、项目规划
1、米尔-STM32MP257开发板,板载了wifi模块,通过wifi连接到互联网。2、启用MQTT,连接到私有的服务器,并订阅指定的主题。3、使用QT设计UI界面。

4、接收数据并在UI界面中展示。


四、QT设计

1、QT安装

1.1. 下载在线安装包,现在好像只有一个在线安装包了。网址:

Index of /qtproject/official_releases/online_installers/



1.2. 下载好后,上传给虚拟机,执行安装。安装有几个地方要注意。
其他的按官方的教程就可以安装了。

2、Kit的配置

在官方给出的示例中,与这个版本的不一样,首先设置GCC只需要选择gcc就行了,然后g++自动在下面选择:最后是QT version的选择要按下图选择。

这样就可以进行交叉编译了,然后如下:
3、创建桌面程序在文章介绍的基础上,我创建了一个基于QT的桌面程序,其UI界面如下:

4、定义标签值

给相应的需要显示的label根据接收的数据,定义了相应的标签值:



5、引入QT的QtMqtt/QMqttClient 库
  1. #include
复制代码

【注】在官方发布的固件中,是没有QTMqtt的连接文件的,当运行带的QtMqtt的程序会报错:
  1. error while loading shared libraries: libQt5Mqtt.so.5: cannot open shared object file: No such file or directory
复制代码

需要从SDK中复制到开发板目录中。


6、检测连接状态

同时为了实现检测与MQTT服务器的连接状态,需要引入一个线程,用于检测是否连接到服务器:

  1.     void run() override
  2. {
  3.         while (true)
  4.         {
  5.             if (m_client)
  6.             {
  7.                QString statusText = m_client->state() == QMqttClient::Connected
  8.                             ? "连接服务器:成功"
  9.                             : "连接服务器:失败";
  10.               emit updateStatus(statusText);
  11.             }
  12.             msleep(1000); // 每秒检测一次
  13.         }
  14. }
复制代码

7、在main中编写代码如下:
  1. MainWindow::MainWindow(QWidget *parent)
  2.     : QMainWindow(parent), ui(new Ui::MainWindow), m_client(new QMqttClient(this)) // 初始化MQTT客户端实例
  3. {
  4.      ui->setupUi(this);
  5.      
  6.     // 设置MQTT客户端参数
  7.     m_client->setHostname("hostname");
  8.     m_client->setPort(1883); // 默认MQTT端口
  9.     m_client->setClientId("client_id");
  10.     m_client->setUsername("usrename");
  11.     m_client->setPassword("pwd");
  12.    
  13.     // 连接信号槽,处理连接成功事件
  14.     connect(m_client, &QMqttClient::connected, this, [this]()
  15.            {
  16.         // 连接成功,修改label的文本
  17.         ui->mqtt_client_state->setText("连接服务器:成功");
  18.         
  19.         
  20.         // 订阅主题
  21.         m_client->subscribe(QMqttTopicFilter("devacademy/publish/topic")); });
  22.         
  23.     // 连接信号槽,处理消息接收事件
  24.     connect(m_client, &QMqttClient::messageReceived, this, &MainWindow::onMessageReceived);
  25.    
  26.     // 启动MQTT连接
  27.     m_client->connectToHost();
  28.    
  29.     // 创建并启动连接状态检测线程
  30.     MqttConnectionChecker *checker = new MqttConnectionChecker(m_client, ui->mqtt_client_state, this);
  31.     connect(checker, &MqttConnectionChecker::updateStatus, this, [this](const QString &status)
  32.             { ui->mqtt_client_state->setText(status); });
  33.     checker->start();
  34. }
复制代码

8、编译订阅回调如下:
  1. void MainWindow::onMessageReceived(const QByteArray &message, const QMqttTopicName &topic)
  2. {
  3.     Q_UNUSED(topic);
  4.    
  5.     // 解析JSON数据
  6.     QJsonDocument doc = QJsonDocument::fromJson(message);
  7.     if (!doc.isNull() && doc.isObject())
  8.     {
  9.        QJsonObject obj = doc.object();
  10.        double temp = obj.value("temp").toDouble();
  11.        double press = obj.value("press").toDouble()/100;
  12.        double humidity = obj.value("humidity").toDouble();
  13.        int iaq = obj.value("iaq").toInt();
  14.        double co2 = obj.value("co2").toDouble();
  15.        double voc = obj.value("voc").toDouble();
  16.       
  17.         //将这些数据更新到UI
  18.         ui->label_temp->setText(QString::number(temp, 'f', 2));
  19.         ui->label_press->setText(QString::number(press, 'f', 2));
  20.         ui->label_humidity->setText(QString::number(humidity, 'f', 2));
  21.         ui->label_iaq->setText(QString::number(iaq, 'f', 2));
  22.         ui->label_co2->setText(QString::number(co2, 'f', 2));
  23.         ui->label_voc->setText(QString::number(voc, 'f', 2));
  24.         
  25.         // 在这里可以将解析后的数据更新到UI或其他处理逻辑
  26.      }
  27.      else
  28.      {
  29.          qDebug() << "Invalid JSON message received";
  30.       }
  31. }
复制代码
五、实验效果

编译好程序后,上传到开发板,运行后,效果如下:


六、总结

米尔-STM32MP257开发板,通过QT来设计UI界面,通过mqtt来订阅指定的主题,实现环境监测。在物联网方面大有作为!



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表