野牛NBIOT 环境监测项目---基于QT 5.9 接入华为OceanConnect云平台(六)
NBIOT-北向開發(fā)之PC桌面
基于QT 5.9 北向接入華為OceanConnect云平臺(tái)
該軟件與上一章節(jié)提供的的平臺(tái)profile是對(duì)應(yīng)的,如果profile的關(guān)鍵參數(shù)不一致,需要同步修改軟件代碼!
切記!!!
1、軟件介紹
通過前面的學(xué)習(xí),數(shù)據(jù)可以上報(bào)到華為云平臺(tái)了,但是我們是通過登陸華為OceanConnect云后臺(tái),才看到數(shù)據(jù),這樣其實(shí)是不太友好的,我們更加希望自己編寫代碼來查閱數(shù)據(jù),結(jié)合華為發(fā)布的API文檔,這里我們帶領(lǐng)同學(xué)們采用QT平臺(tái)來開發(fā)一個(gè)簡(jiǎn)單的PC軟件。
這里夸下QT, 一直很喜歡QT的文檔說明,例子、函數(shù)等說的很清楚,夸平臺(tái)不用說。如果正在打算學(xué)習(xí)一款PC開發(fā)的平臺(tái),QT也是不錯(cuò)的選項(xiàng)
本次用QT實(shí)現(xiàn)與華為OceanConnect云平臺(tái)(以下簡(jiǎn)稱華為云)的對(duì)接,主要包括
????1、用戶根據(jù)appid password登陸
????2、自動(dòng)查詢當(dāng)前應(yīng)用下,所有設(shè)備
????3、定時(shí)向華為云查詢數(shù)據(jù)最新
????4、用戶可以根據(jù)時(shí)間段,查詢?cè)贫说臍v史數(shù)據(jù)
2、效果預(yù)覽
????2.1、用戶需要登錄時(shí)輸入其appId/password(其值為野牛NBIOT 環(huán)境監(jiān)測(cè)項(xiàng)目—華為OceanConnect云平臺(tái)配置(四))中郵件中的“應(yīng)用對(duì)接信息"按鈕。
????2.2、登錄之后,點(diǎn)擊“查詢?cè)O(shè)備”,如果有設(shè)備,在下拉框中選擇,需要查閱的設(shè)備,注意這里顯示的為設(shè)備名。
????2.3、設(shè)置更新周期,該周期指的是,軟件定時(shí)向云端獲取數(shù)據(jù)的周期。默認(rèn)是5秒請(qǐng)求一次
????2.4、可以根據(jù)時(shí)間段,查詢數(shù)據(jù)
3、預(yù)備的關(guān)鍵知識(shí)
????3.1、需要了解網(wǎng)絡(luò)編程中客戶端通過http協(xié)議向服務(wù)器請(qǐng)求數(shù)據(jù),比如如何向服務(wù)器端獲取數(shù)據(jù),有哪幾種方法(POST、GET)、請(qǐng)求頭、請(qǐng)求數(shù)據(jù)域、響應(yīng)報(bào)文等,這里用后面需要用到的《華為IoT平臺(tái)北向API參考.pdf》中的鑒權(quán)給大家舉個(gè)實(shí)際例子:
客戶端(也就是我們的電腦/手機(jī)/ipad等設(shè)備)向服務(wù)器發(fā)送POST請(qǐng)求,其中server為服務(wù)器的IP地址,port為端口號(hào)(其具體的值,在實(shí)驗(yàn)室申請(qǐng)時(shí),返回的郵件的應(yīng)用對(duì)接信息中),請(qǐng)求的內(nèi)容如下:
服務(wù)器接收到上述請(qǐng)求,正常情況下會(huì)做出回應(yīng),那么請(qǐng)求的返回?cái)?shù)據(jù)中有token值,這個(gè)在文檔中有說明,拿到這個(gè)token才能做后續(xù)的事情,相對(duì)于一個(gè)認(rèn)證,而且這個(gè)認(rèn)證是有有效時(shí)間的,返回的內(nèi)容如下:
Status Code: 200 OK Content-Type: application/json {"scope":"default","tokenType":"bearer","expiresIn":"*******","accessToken":"*******","refreshToken":"*******" }具體這塊東西,同學(xué)們還是需要在日常中多學(xué)習(xí)下,日后的網(wǎng)絡(luò)交互是必不可少的
????3.2、QT中http/https的配置
因?yàn)槭腔赒T的平臺(tái)做開發(fā)做完成https,必定要了解https的初始化流程,這里不再過多介紹,后面章節(jié)有直接的源碼
????3.3、QT的槽函數(shù)、信號(hào)機(jī)制
對(duì)于玩過QT的同學(xué),應(yīng)該問題不大,要是之前沒有相關(guān)基礎(chǔ),可能需要問下度娘QT槽函數(shù)與信號(hào),可以理解為一個(gè)事件,當(dāng)每個(gè)信號(hào)觸發(fā)時(shí),調(diào)用相應(yīng)的函數(shù),這個(gè)是QT的核心。
4、代碼介紹
這個(gè)Demo軟件,界面上分為兩個(gè),一個(gè)是登陸、一個(gè)是實(shí)際用戶操作的界面
????4.1、登陸界面主要完成,通過用戶輸入的IP地址、port、appid、password,連接服務(wù)器并進(jìn)行鑒權(quán)認(rèn)證,拿到token,這里主要有個(gè)證書雙向認(rèn)證的流程,導(dǎo)入證書、私鑰、信用庫(kù),其中導(dǎo)入證書的代碼如下:
????4.2、通過QT API訪問華為云
QT里面使用QNetworkAccessManager對(duì)華為云進(jìn)行訪問,QNetworkRequest設(shè)置其請(qǐng)求頭
????4.3、API接收完成
在上一章節(jié)中的網(wǎng)絡(luò)操作,發(fā)送與接收是異步的,當(dāng)https接收完成或者異常等事件,會(huì)調(diào)用注冊(cè)的對(duì)應(yīng)槽函數(shù)來處理,具體的連接函數(shù)如下,finished信號(hào)與用戶的onFinished()槽函數(shù)連接在一起
所以當(dāng)HTTPS正常收發(fā)完成后,會(huì)在onFinished()函數(shù)里面進(jìn)行出處理,這里就可以對(duì)接收的數(shù)據(jù)進(jìn)行解析,獲取到我們想要的數(shù)據(jù)信息。比如下面客戶端發(fā)起獲取設(shè)備信息的請(qǐng)求時(shí),對(duì)接收的數(shù)據(jù)做如下處理(主要還是json數(shù)據(jù)流的解析):
else if(DC_signType == SIGN_TYPE_GETDEVLIST) {QNetworkReply *pReplay = qobject_cast<QNetworkReply*>(sender());QByteArray replyContent = pReplay->readAll();QJsonObject devRootObj;QJsonParseError json_error;QJsonDocument jsonDoc(QJsonDocument::fromJson(replyContent, &json_error));if(json_error.error != QJsonParseError::NoError){qDebug() << "SIGN_TYPE_GETDEVLIST json data is error!";return;}devRootObj = jsonDoc.object();if(devRootObj.contains("devices") && devRootObj.value("devices").isArray()){DC_devRootArray = devRootObj.value("devices").toArray();emit signMsgToMain(SIGN_CODE_GETDEVLIST_SUCCESS);} }????4.4、通知主界面處理
通過QNetworkAccessManager API接口獲取到數(shù)據(jù),我們要將其顯示出來,所以在onFinished()函數(shù)的最后發(fā)送一個(gè)自定義的信號(hào)到主界面線程中,代碼如下
4.5、主界面根據(jù)信號(hào)對(duì)數(shù)據(jù)進(jìn)行圖形化
例如:
有問題可以加入QQ群或者淘寶店鋪旺旺聯(lián)系:
野牛物聯(lián)網(wǎng)
QQ交流群:897268542
淘寶店鋪(點(diǎn)擊跳轉(zhuǎn)鏈接)
總結(jié)
以上是生活随笔為你收集整理的野牛NBIOT 环境监测项目---基于QT 5.9 接入华为OceanConnect云平台(六)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 智能指针用法及其代码详解
- 下一篇: MCU的CAN TX RX无数据问题 M