2025-4-18 15:02
27 次阅读|
0 个评论
本文将介绍基于米尔电子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 库 https: / /mbb.eet-china.com/forum /topic/ 150530_1_1 .html 【注】在官方发布的固件中,是没有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中编写代码如下: 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 (); } 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来订阅指定的主题,实现环境监测。在物联网方面大有作为!