如何在米爾-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 庫

#include <QtMqtt/QMqttClient>

【注】在官方發布的固件中,是沒有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, [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來訂閱指定的主題,實現環境監測。在物聯網方面大有作為!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77443.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77443.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77443.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網絡互連與互聯網3

1.SMTP簡單郵件傳輸協議&#xff0c;用于發送電子郵件&#xff0c;默認情況下是明文傳輸&#xff0c;沒有加密機制。 SSL是一種安全協議&#xff0c;對電子郵件進行加密傳輸。 POP3主要用于接收電子郵件 IMAP用于接收電子郵件 2.采用存儲-轉發方式處理信號的設備是交換機 …

DICOM通訊(ACSE->DIMSE->Worklist)

DICOM 通訊協議中的 ACSE → DIMSE → Worklist 這條通訊鏈路。DICOM 通訊棧本身是一個多層的協議結構&#xff0c;就像 OSI 模型一樣&#xff0c;逐層封裝功能。 一、DICOM 通訊協議棧總體架構 DICOM 通訊使用 TCP/IP 建立連接&#xff0c;其上面封裝了多個協議層次&#xf…

優化自旋鎖的實現

在《C11實現一個自旋鎖》介紹了分別使用TAS和CAS算法實現自旋鎖的方案&#xff0c;以及它們的優缺點。TAS算法雖然實現簡單&#xff0c;但是因為每次自旋時都要導致一場內存總線流量風暴&#xff0c;對全局系統影響很大&#xff0c;一般都要對它進行優化&#xff0c;以降低對全…

Excel 中讓表格內容自適應列寬和行高

Excel 中讓表格內容自適應列寬和行高 目錄 Excel 中讓表格內容自適應列寬和行高自適應列寬自適應行高在Excel中讓表格內容自適應列寬和行高,可參考以下操作: 自適應列寬 方法一:手動調整 選中需要調整列寬的列(如果是整個表格,可點擊表格左上角行號和列號交叉處的三角形全…

JWT令牌:實現安全會話跟蹤與登錄認證的利器

摘要&#xff1a;本文深入探討了JWT令牌在實現會話跟蹤和登錄認證方面的應用&#xff0c;詳細介紹了JWT令牌的概念、組成、生成與校驗方法&#xff0c;以及在實際案例中如何通過JWT令牌進行會話跟蹤和登錄認證的具體實現步驟&#xff0c;為系統的安全認證機制提供了全面且深入的…

Mybtis和Mybatis-Plus區別

MyBatis 和 MyBatis-Plus 是 Java 中常用的持久層框架&#xff0c;MyBatis-Plus 是在 MyBatis 基礎上增強的工具包&#xff0c;讓開發更便捷、高效。下面是兩者主要的區別&#xff1a; ? 核心區別總結&#xff1a; 特性MyBatisMyBatis-Plus配置復雜度需要手寫大量 XML 或注解…

JavaScript 性能優化實戰

一、代碼執行效率優化 1. 減少全局變量的使用 全局變量在 JavaScript 中會掛載在全局對象(瀏覽器環境下是window,Node.js 環境下是global)上,頻繁訪問全局變量會增加作用域鏈的查找時間。 // 反例:使用全局變量 var globalVar = example; function someFunction() {con…

學習筆記十六——Rust Monad從頭學

&#x1f9e0; 零基礎也能懂的 Rust Monad&#xff1a;逐步拆解 三大定律通俗講解 實戰技巧 &#x1f4e3; 第一部分&#xff1a;Monad 是什么&#xff1f; Monad 是一種“包值 鏈操作 保持結構”的代碼模式&#xff0c;用來處理帶上下文的值&#xff0c;并方便連續處理。 …

PL/SQL登錄慢,程序連接Oracle 提示無法連接或無監聽

PL/SQL登錄慢&#xff0c;程序連接Oracle 提示無法連接或無監聽 錯誤提示&#xff1a;ORA-12541: TNS: 無監聽程序 的解決辦法&#xff0c; 現象&#xff1a;PL/SQL登錄慢&#xff0c;程序連接Oracle 提示無法連接或無監聽 監聽已經正常開起&#xff0c;但還是PL/SQL登錄慢或…

Windows10,11賬戶管理,修改密碼,創建帳戶...

在這里&#xff0c;我們使用微軟操作系統的一款工具:netplwiz 它可以非常便捷的管理用戶賬戶. 一:修改密碼(無需現在密碼) 01修改注冊表 運行命令&#xff1a;regedit 在地址欄輸入&#xff1a; HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Passwor…

電腦 BIOS 操作指南(Computer BIOS Operation Guide)

電腦 BIOS 操作指南 電腦的BIOS界面&#xff08;應為“BIOS”&#xff09;是一個固件界面&#xff0c;允許用戶配置電腦的硬件設置。 進入BIOS后&#xff0c;你可以進行多種設置&#xff0c;具體包括&#xff1a; 1.啟動配置 啟動順序&#xff1a;設置從哪個設備啟動&#x…

iOS 冷啟動時間監控:啟動起點有哪些選擇?

?? iOS 冷啟動時間監控&#xff1a;啟動起點有哪些選擇&#xff1f; 作者&#xff1a;侯仕奇 來源&#xff1a;sqi.io 在監控 iOS 冷啟動性能時&#xff0c;一個關鍵問題是&#xff1a;如何精確記錄 App 冷啟動的開始時間&#xff1f; 本文將對不同的“冷啟動起點”監控方式…

onlyoffice關閉JWT后依然報錯如何解決?

onlyoffice關閉JWT后依然報錯如何解決&#xff1f; 一、部署方式 我是以docker方式部署的&#xff0c;直接通過環境變量禁用了JWT&#xff0c;命令如下&#xff1a; docker run -d \--name onlyoffice-no-jwt \--restartalways \-p 8069:80 \-e JWT_ENABLEDfalse \onlyoffic…

rk3588 驅動開發(一)字符設備開發

3.字符設備驅動開發 3.1 什么是字符設備驅動 字符設備&#xff1a;就是一個個字節&#xff0c;按照字節流進行讀寫操作的設備&#xff0c;讀寫是按照先后順序的。 舉例子&#xff1a;IIC 按鍵 LED SPI LCD 等 Linux 應用程序調用驅動程序流程&#xff1a; Linux中驅動加載成功…

設計模式 --- 外觀模式

外觀模式是一種結構型設計模式&#xff0c;為復雜子系統提供??統一的高層接口??&#xff0c;通過定義一個外觀類來??簡化客戶端與子系統的交互??&#xff0c;降低系統耦合度。這種模式隱藏了子系統的復雜性&#xff0c;將客戶端與子系統的實現細節隔離開來&#xff0c;…

我的gittee倉庫

日常代碼: 日常代碼提交https://gitee.com/xinxin-pingping/daily-code 有需要的寶子們可自行讀取。

微服務調用中的“大對象陷阱”:CPU飆高問題解析與優化

背景 對幾十萬條用戶歷史存量數據寫入&#xff0c;且存在大對象的基礎上。kafka消費進行消費寫mysql超時。導致上游服務調用時異常&#xff0c;CPU飆高異常。 大對象解釋 大對象的定義與危害 1. 什么是大對象&#xff1f; JVM 內存分配機制&#xff1a;Java 中對象優先分配…

代碼隨想錄算法訓練營day6(字符串)

華子目錄 反轉字符串思路 反轉字符串II思路 替換數字思路 反轉字符串 https://leetcode.cn/problems/reverse-string/ 思路 使用雙指針&#xff0c;初始化時&#xff0c;left指向下標0的位置&#xff0c;right指向最后一個元素的下標當while left<right時&#xff0c;交換…

Oracle 19c新特性:OCP認證考試與職業躍遷的關鍵?

在數字化轉型的浪潮中&#xff0c;Oracle 19c作為數據庫領域的旗艦版本&#xff0c;不僅承載著技術革新的使命&#xff0c;更成為IT從業者職業進階的“黃金跳板”。無論是企業級應用的高可用性需求&#xff0c;還是云原生架構的快速迭代&#xff0c;Oracle 19c的智能化與多模型…

【MySQL數據庫入門到精通】

文章目錄 一、SQL分類二、DDL-數據庫操作1.查詢2.創建數據庫3.刪除數據庫4.使用數據庫 三、DDL-表操作1.查詢 一、SQL分類 根據功能主要分為DDL DML DQL DCL DDL:Date Definition Language數據定義語言&#xff1a;定義數據庫&#xff0c;表和字段 DML:Date Manipulatin Lan…