電子工程網(wǎng)
標題: 基于米爾-STM32MP257開(kāi)發(fā)板的環(huán)境監測系統方案應用 [打印本頁(yè)]
作者: swiftman 時(shí)間: 2025-4-18 15:23
標題: 基于米爾-STM32MP257開(kāi)發(fā)板的環(huán)境監測系統方案應用
本文將介紹基于米爾電子MYD-LD25X開(kāi)發(fā)板(米爾基于STM35MP257開(kāi)發(fā)板)的環(huán)境監測系統方案測試。
摘自?xún)?yōu)秀創(chuàng )作者-lugl4313820
一、前言
環(huán)境監測是當前很多場(chǎng)景需要的項目,剛好我正在論壇參與的一個(gè)項目:Thingy:91X 蜂窩物聯(lián)網(wǎng)原型開(kāi)發(fā)平臺的試用。把兩個(gè)項目結合起來(lái),實(shí)現一個(gè)簡(jiǎn)單的環(huán)境監測系統。
二、硬件平臺
1、米爾-STM32MP257開(kāi)發(fā)板
2、Thingy:91X
三、項目規劃
1、米爾-STM32MP257開(kāi)發(fā)板,板載了wifi模塊,通過(guò)wifi連接到互聯(lián)網(wǎng)。2、啟用MQTT,連接到私有的服務(wù)器,并訂閱指定的主題。3、使用QT設計UI界面。4、接收數據并在UI界面中展示。
四、QT設計
1、QT安裝
1.1. 下載在線(xiàn)安裝包,現在好像只有一個(gè)在線(xiàn)安裝包了。網(wǎng)址:Index of /qtproject/official_releases/online_installers/

1.2. 下載好后,上傳給虛擬機,執行安裝。安裝有幾個(gè)地方要注意。

其他的按官方的教程就可以安裝了。
2、Kit的配置
在官方給出的示例中,與這個(gè)版本的不一樣,首先設置GCC只需要選擇gcc就行了,然后g++自動(dòng)在下面選擇:
最后是QT version的選擇要按下圖選擇。
這樣就可以進(jìn)行交叉編譯了,然后如下:
3、創(chuàng )建桌面程序在文章介紹的基礎上,我創(chuàng )建了一個(gè)基于QT的桌面程序,其UI界面如下:
4、定義標簽值給相應的需要顯示的label根據接收的數據,定義了相應的標簽值:
5、引入QT的QtMqtt/QMqttClient 庫
【注】在官方發(fā)布的固件中,是沒(méi)有QTMqtt的連接文件的,當運行帶的QtMqtt的程序會(huì )報錯:
- error while loading shared libraries: libQt5Mqtt.so.5: cannot open shared object file: No such file or directory
復制代碼
需要從SDK中復制到開(kāi)發(fā)板目錄中。
6、檢測連接狀態(tài)同時(shí)為了實(shí)現檢測與MQTT服務(wù)器的連接狀態(tài),需要引入一個(gè)線(xiàn)程,用于檢測是否連接到服務(wù)器:
- void run() override
- {
- while (true)
- {
- if (m_client)
- {
- QString statusText = m_client->state() == QMqttClient::Connected
- ? "連接服務(wù)器:成功"
- : "連接服務(wù)器:失敗";
- emit updateStatus(statusText);
- }
- msleep(1000); // 每秒檢測一次
- }
- }
復制代碼
7、在main中編寫(xiě)代碼如下:- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent), ui(new Ui::MainWindow), m_client(new QMqttClient(this)) // 初始化MQTT客戶(hù)端實(shí)例
- {
- ui->setupUi(this);
-
- // 設置MQTT客戶(hù)端參數
- 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("連接服務(wù)器:成功");
-
-
- // 訂閱主題
- m_client->subscribe(QMqttTopicFilter("devacademy/publish/topic")); });
-
- // 連接信號槽,處理消息接收事件
- connect(m_client, &QMqttClient::messageReceived, this, &MainWindow::onMessageReceived);
-
- // 啟動(dòng)MQTT連接
- m_client->connectToHost();
-
- // 創(chuàng )建并啟動(dòng)連接狀態(tài)檢測線(xiàn)程
- 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";
- }
- }
復制代碼五、實(shí)驗效果
編譯好程序后,上傳到開(kāi)發(fā)板,運行后,效果如下:
六、總結
米爾-STM32MP257開(kāi)發(fā)板,通過(guò)QT來(lái)設計UI界面,通過(guò)mqtt來(lái)訂閱指定的主題,實(shí)現環(huán)境監測。在物聯(lián)網(wǎng)方面大有作為!
歡迎光臨 電子工程網(wǎng) (http://selenalain.com/) |
Powered by Discuz! X3.4 |
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页