本文將介紹基于米爾電子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 庫
#include
【注】在官方發布的固件中,是沒有QTMqtt的連接文件的,當運行帶的QtMqtt的程序會報錯:
errorwhileloadingsharedlibraries:libQt5Mqtt.so.5:cannotopensharedobjectfile:Nosuchfileordirectory
需要從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, [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來訂閱指定的主題,實現環境監測。在物聯網方面大有作為!
-
STM32
+關注
關注
2307文章
11128瀏覽量
371479 -
監測系統
+關注
關注
8文章
3032瀏覽量
84288 -
開發板
+關注
關注
26文章
6161瀏覽量
114163 -
米爾電子
+關注
關注
2文章
181瀏覽量
1016
發布評論請先 登錄

如何在米爾-STM32MP257開發板上實現環境監測系統
評論