<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • 查看: 693|回復: 0
    打印 上一主題 下一主題

    基于米爾-STM32MP257開發板的環境監測系統方案應用

    [復制鏈接]
    跳轉到指定樓層
    樓主
    發表于 2025-4-18 15:23:24 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
    關鍵詞: ST , 嵌入式 , STM32MP257 , 米爾 , 開發板
    本文將介紹基于米爾電子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 庫
    1. #include
    復制代碼

    【注】在官方發布的固件中,是沒有QTMqtt的連接文件的,當運行帶的QtMqtt的程序會報錯:
    1. error while loading shared libraries: libQt5Mqtt.so.5: cannot open shared object file: No such file or directory
    復制代碼

    需要從SDK中復制到開發板目錄中。


    6、檢測連接狀態

    同時為了實現檢測與MQTT服務器的連接狀態,需要引入一個線程,用于檢測是否連接到服務器:

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

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

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

    編譯好程序后,上傳到開發板,運行后,效果如下:


    六、總結

    米爾-STM32MP257開發板,通過QT來設計UI界面,通過mqtt來訂閱指定的主題,實現環境監測。在物聯網方面大有作為!



    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規則

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷