本文將介紹基于米爾電子MYD-LD25X開(kāi)發(fā)板(米爾基于STM35MP257開(kāi)發(fā)板)的環(huán)境監(jiān)測(cè)系統(tǒng)方案測(cè)試。摘自優(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)在好象只有一個(gè)在線安裝包了。網(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ù)
#include
【注】在官方發(fā)布的固件中,是沒(méi)有QTMqtt的連接文件的,當(dāng)運(yùn)行帶的QtMqtt的程序會(huì)報(bào)錯(cuò):
errorwhileloadingsharedlibraries:libQt5Mqtt.so.5:cannotopensharedobjectfile:Nosuchfileordirectory
需要從SDK中復(fù)制到開(kāi)發(fā)板目錄中。
6、檢測(cè)連接狀態(tài)
同時(shí)為了實(shí)現(xiàn)檢測(cè)與MQTT服務(wù)器的連接狀態(tài),需要引入一個(gè)線程,用于檢測(cè)是否連接到服務(wù)器:
void run() override{ while (true) { if (m_client) { QString statusText = m_client->state() == QMqttClient::Connected ? "連接服務(wù)器:成功" : "連接服務(wù)器:失敗"; emit updateStatus(statusText); } msleep(1000); // 每秒檢測(cè)一次 }}
7、在main中編寫(xiě)代碼如下:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), m_client(new QMqttClient(this)) // 初始化MQTT客戶端實(shí)例{ ui->setupUi(this);
// 設(shè)置MQTT客戶端參數(shù) m_client->setHostname("hostname"); m_client->setPort(1883); // 默認(rèn)MQTT端口 m_client->setClientId("client_id"); m_client->setUsername("usrename"); m_client->setPassword("pwd");
// 連接信號(hào)槽,處理連接成功事件 connect(m_client, &QMqttClient::connected, this, [this]() { // 連接成功,修改label的文本 ui->mqtt_client_state->setText("連接服務(wù)器:成功");
// 訂閱主題 m_client->subscribe(QMqttTopicFilter("devacademy/publish/topic")); });
// 連接信號(hào)槽,處理消息接收事件 connect(m_client, &QMqttClient::messageReceived, this, &MainWindow::onMessageReceived);
// 啟動(dòng)MQTT連接 m_client->connectToHost();
// 創(chuàng)建并啟動(dòng)連接狀態(tài)檢測(cè)線程 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、編譯訂閱回調(diào)如下:
void MainWindow::onMessageReceived(const QByteArray &message, const QMqttTopicName &topic){ Q_UNUSED(topic);
// 解析JSON數(shù)據(jù) 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();
//將這些數(shù)據(jù)更新到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));
// 在這里可以將解析后的數(shù)據(jù)更新到UI或其他處理邏輯 } else { qDebug() << "Invalid JSON message received"; }}
五、實(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)方面大有作為!
-
STM32
+關(guān)注
關(guān)注
2287文章
10988瀏覽量
361592 -
監(jiān)測(cè)系統(tǒng)
+關(guān)注
關(guān)注
8文章
2829瀏覽量
82195 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
5432瀏覽量
101236 -
米爾電子
+關(guān)注
關(guān)注
0文章
131瀏覽量
692
發(fā)布評(píng)論請(qǐng)先 登錄
【米爾-STM32MP257開(kāi)發(fā)板試用】——開(kāi)箱評(píng)測(cè)
全新STM32MP257開(kāi)發(fā)板震撼發(fā)布!異核架構(gòu)x接口豐富x邊緣AI,助力ARM嵌入式工業(yè)4.0應(yīng)用!
如何在米爾-STM32MP257開(kāi)發(fā)板上部署環(huán)境監(jiān)測(cè)系統(tǒng)
【新品體驗(yàn)】正點(diǎn)原子STM32MP257開(kāi)發(fā)板免費(fèi)試用
【米爾-STM32MP257開(kāi)發(fā)板試用體驗(yàn)】初次體驗(yàn)米爾-STM32MP257開(kāi)發(fā)板
【米爾-STM32MP257開(kāi)發(fā)板試用體驗(yàn)】米爾-STM32MP257開(kāi)發(fā)板下載yocto源碼和編譯及燒錄
【米爾-STM32MP257開(kāi)發(fā)板試用體驗(yàn)】測(cè)試米爾-STM32MP257開(kāi)發(fā)板試連接wifi功能
【米爾-STM32MP135開(kāi)發(fā)板-入門(mén)級(jí)MPU試用】米爾-STM32MP135開(kāi)發(fā)板開(kāi)發(fā)環(huán)境搭建
【米爾-STM32MP135開(kāi)發(fā)板-入門(mén)級(jí)MPU試用】說(shuō)說(shuō)米爾-STM32MP135開(kāi)發(fā)板板卡做工及配件
ST×米爾STM32MP25x線下培訓(xùn)會(huì)

ST×米爾STM32MP25x線下培訓(xùn)會(huì)倒計(jì)時(shí)12天

STM32MP25x開(kāi)發(fā)板Bring Up培訓(xùn)課程(中)

STM32MP25x開(kāi)發(fā)板Bring Up培訓(xùn)課程(下)

免費(fèi)丨米爾 STM32MP257開(kāi)發(fā)板有獎(jiǎng)試用

【新品體驗(yàn)】正點(diǎn)原子STM32MP257開(kāi)發(fā)板免費(fèi)試用

評(píng)論