色偷偷偷久久伊人大杳蕉,色爽交视频免费观看,欧美扒开腿做爽爽爽a片,欧美孕交alscan巨交xxx,日日碰狠狠躁久久躁蜜桃

x
x
查看: 840|回復(fù): 0
打印 上一主題 下一主題

基于米爾-STM32MP257開(kāi)發(fā)板的環(huán)境監(jiān)測(cè)系統(tǒng)方案應(yīng)用

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2025-4-18 15:23:24 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
關(guān)鍵詞: ST , 嵌入式 , STM32MP257 , 米爾 , 開(kāi)發(fā)板
本文將介紹基于米爾電子MYD-LD25X開(kāi)發(fā)板(米爾基于STM35MP257開(kāi)發(fā)板)的環(huán)境監(jiān)測(cè)系統(tǒng)方案測(cè)試。
摘自?xún)?yōu)秀創(chuàng)作者-lugl4313820

一、前言

環(huán)境監(jiān)測(cè)是當(dāng)前很多場(chǎng)景需要的項(xiàng)目,剛好我正在論壇參與的一個(gè)項(xiàng)目:Thingy:91X 蜂窩物聯(lián)網(wǎng)原型開(kāi)發(fā)平臺(tái)的試用。把兩個(gè)項(xiàng)目結(jié)合起來(lái),實(shí)現(xiàn)一個(gè)簡(jiǎn)單的環(huán)境監(jiān)測(cè)系統(tǒng)。


二、硬件平臺(tái)

1、米爾-STM32MP257開(kāi)發(fā)板

2、Thingy:91X


三、項(xiàng)目規(guī)劃
1、米爾-STM32MP257開(kāi)發(fā)板,板載了wifi模塊,通過(guò)wifi連接到互聯(lián)網(wǎng)。2、啟用MQTT,連接到私有的服務(wù)器,并訂閱指定的主題。3、使用QT設(shè)計(jì)UI界面。

4、接收數(shù)據(jù)并在UI界面中展示。


四、QT設(shè)計(jì)

1、QT安裝

1.1. 下載在線(xiàn)安裝包,現(xiàn)在好像只有一個(gè)在線(xiàn)安裝包了。網(wǎng)址:

Index of /qtproject/official_releases/online_installers/



1.2. 下載好后,上傳給虛擬機(jī),執(zhí)行安裝。安裝有幾個(gè)地方要注意。
其他的按官方的教程就可以安裝了。

2、Kit的配置

在官方給出的示例中,與這個(gè)版本的不一樣,首先設(shè)置GCC只需要選擇gcc就行了,然后g++自動(dòng)在下面選擇:最后是QT version的選擇要按下圖選擇。

這樣就可以進(jìn)行交叉編譯了,然后如下:
3、創(chuàng)建桌面程序在文章介紹的基礎(chǔ)上,我創(chuàng)建了一個(gè)基于QT的桌面程序,其UI界面如下:

4、定義標(biāo)簽值

給相應(yīng)的需要顯示的label根據(jù)接收的數(shù)據(jù),定義了相應(yīng)的標(biāo)簽值:



5、引入QT的QtMqtt/QMqttClient 庫(kù)
  1. #include
復(fù)制代碼

【注】在官方發(fā)布的固件中,是沒(méi)有QTMqtt的連接文件的,當(dāng)運(yùn)行帶的QtMqtt的程序會(huì)報(bào)錯(cuò):
  1. error while loading shared libraries: libQt5Mqtt.so.5: cannot open shared object file: No such file or directory
復(fù)制代碼

需要從SDK中復(fù)制到開(kāi)發(fā)板目錄中。


6、檢測(cè)連接狀態(tài)

同時(shí)為了實(shí)現(xiàn)檢測(cè)與MQTT服務(wù)器的連接狀態(tài),需要引入一個(gè)線(xiàn)程,用于檢測(cè)是否連接到服務(wù)器:

  1.     void run() override
  2. {
  3.         while (true)
  4.         {
  5.             if (m_client)
  6.             {
  7.                QString statusText = m_client->state() == QMqttClient::Connected
  8.                             ? "連接服務(wù)器:成功"
  9.                             : "連接服務(wù)器:失敗";
  10.               emit updateStatus(statusText);
  11.             }
  12.             msleep(1000); // 每秒檢測(cè)一次
  13.         }
  14. }
復(fù)制代碼

7、在main中編寫(xiě)代碼如下:
  1. MainWindow::MainWindow(QWidget *parent)
  2.     : QMainWindow(parent), ui(new Ui::MainWindow), m_client(new QMqttClient(this)) // 初始化MQTT客戶(hù)端實(shí)例
  3. {
  4.      ui->setupUi(this);
  5.      
  6.     // 設(shè)置MQTT客戶(hù)端參數(shù)
  7.     m_client->setHostname("hostname");
  8.     m_client->setPort(1883); // 默認(rèn)MQTT端口
  9.     m_client->setClientId("client_id");
  10.     m_client->setUsername("usrename");
  11.     m_client->setPassword("pwd");
  12.    
  13.     // 連接信號(hào)槽,處理連接成功事件
  14.     connect(m_client, &QMqttClient::connected, this, [this]()
  15.            {
  16.         // 連接成功,修改label的文本
  17.         ui->mqtt_client_state->setText("連接服務(wù)器:成功");
  18.         
  19.         
  20.         // 訂閱主題
  21.         m_client->subscribe(QMqttTopicFilter("devacademy/publish/topic")); });
  22.         
  23.     // 連接信號(hào)槽,處理消息接收事件
  24.     connect(m_client, &QMqttClient::messageReceived, this, &MainWindow::onMessageReceived);
  25.    
  26.     // 啟動(dòng)MQTT連接
  27.     m_client->connectToHost();
  28.    
  29.     // 創(chuàng)建并啟動(dòng)連接狀態(tài)檢測(cè)線(xiàn)程
  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. }
復(fù)制代碼

8、編譯訂閱回調(diào)如下:
  1. void MainWindow::onMessageReceived(const QByteArray &message, const QMqttTopicName &topic)
  2. {
  3.     Q_UNUSED(topic);
  4.    
  5.     // 解析JSON數(shù)據(jù)
  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.         //將這些數(shù)據(jù)更新到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.         // 在這里可以將解析后的數(shù)據(jù)更新到UI或其他處理邏輯
  26.      }
  27.      else
  28.      {
  29.          qDebug() << "Invalid JSON message received";
  30.       }
  31. }
復(fù)制代碼
五、實(shí)驗(yàn)效果

編譯好程序后,上傳到開(kāi)發(fā)板,運(yùn)行后,效果如下:


六、總結(jié)

米爾-STM32MP257開(kāi)發(fā)板,通過(guò)QT來(lái)設(shè)計(jì)UI界面,通過(guò)mqtt來(lái)訂閱指定的主題,實(shí)現(xiàn)環(huán)境監(jiān)測(cè)。在物聯(lián)網(wǎng)方面大有作為!



本版積分規(guī)則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表