1000|0

7258

帖子

11

TA的资源

版主

楼主
 

【米尔-STM32MP257开发板】环境监测系统 [复制链接]

【前言】

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

【硬件平台】

1、米尔-STM32MP257开发板

 

2、Thingy:91X 

 

【项目规划】

1、米尔-STM32MP257开发板,板载了wifi模块,通过wifi连接到互联网。

2、启用MQTT,连接到私有的服务器,并订阅指定的主题。

3、使用QT设计UI界面。

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

【QT设计】

【米尔-STM32MP257开发板】创建QT开发环境 - 工业自动化与控制 - 电子工程世界-论坛在这一篇文章我详细的分享了如何使用米尔提供的SDK来创建QT的开发环境。

1、在文章介绍的基础上,我创建了一个基于QT的桌面程序,其UI界面如下:

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

 

3、引入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中复制到开发板目录中。

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

  • void run() override
  • {
  • while (true)
  • {
  • if (m_client)
  • {
  • QString statusText = m_client->state() == QMqttClient::Connected
  • ? "连接服务器:成功"
  • : "连接服务器:失败";
  • emit updateStatus(statusText);
  • }
  • msleep(1000); // 每秒检测一次
  • }
  • }

5、在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();
  • }

6、编译订阅回调如下:

  • 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来订阅指定的主题,实现环境监测。在物联网方面大有作为!

查看本帖全部内容,请登录或者注册
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
直播报名最后1周:艾迈斯欧司朗 OSP 开放协议,从氛围灯动态照明到传感器交互融合
直播时间:4月22日(周二)10:00
直播奖励:京东卡、蓝牙温湿度计、定制水杯

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 14

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表