野牛NBIOT 环境监测项目---基于QT 5.9 接入华为OceanConnect云平台(六)
NBIOT-北向開發之PC桌面
基于QT 5.9 北向接入華為OceanConnect云平臺
該軟件與上一章節提供的的平臺profile是對應的,如果profile的關鍵參數不一致,需要同步修改軟件代碼!
切記!!!
1、軟件介紹
通過前面的學習,數據可以上報到華為云平臺了,但是我們是通過登陸華為OceanConnect云后臺,才看到數據,這樣其實是不太友好的,我們更加希望自己編寫代碼來查閱數據,結合華為發布的API文檔,這里我們帶領同學們采用QT平臺來開發一個簡單的PC軟件。
這里夸下QT, 一直很喜歡QT的文檔說明,例子、函數等說的很清楚,夸平臺不用說。如果正在打算學習一款PC開發的平臺,QT也是不錯的選項
本次用QT實現與華為OceanConnect云平臺(以下簡稱華為云)的對接,主要包括
????1、用戶根據appid password登陸
????2、自動查詢當前應用下,所有設備
????3、定時向華為云查詢數據最新
????4、用戶可以根據時間段,查詢云端的歷史數據
2、效果預覽
????2.1、用戶需要登錄時輸入其appId/password(其值為野牛NBIOT 環境監測項目—華為OceanConnect云平臺配置(四))中郵件中的“應用對接信息"按鈕。
????2.2、登錄之后,點擊“查詢設備”,如果有設備,在下拉框中選擇,需要查閱的設備,注意這里顯示的為設備名。
????2.3、設置更新周期,該周期指的是,軟件定時向云端獲取數據的周期。默認是5秒請求一次
????2.4、可以根據時間段,查詢數據
3、預備的關鍵知識
????3.1、需要了解網絡編程中客戶端通過http協議向服務器請求數據,比如如何向服務器端獲取數據,有哪幾種方法(POST、GET)、請求頭、請求數據域、響應報文等,這里用后面需要用到的《華為IoT平臺北向API參考.pdf》中的鑒權給大家舉個實際例子:
客戶端(也就是我們的電腦/手機/ipad等設備)向服務器發送POST請求,其中server為服務器的IP地址,port為端口號(其具體的值,在實驗室申請時,返回的郵件的應用對接信息中),請求的內容如下:
服務器接收到上述請求,正常情況下會做出回應,那么請求的返回數據中有token值,這個在文檔中有說明,拿到這個token才能做后續的事情,相對于一個認證,而且這個認證是有有效時間的,返回的內容如下:
Status Code: 200 OK Content-Type: application/json {"scope":"default","tokenType":"bearer","expiresIn":"*******","accessToken":"*******","refreshToken":"*******" }具體這塊東西,同學們還是需要在日常中多學習下,日后的網絡交互是必不可少的
????3.2、QT中http/https的配置
因為是基于QT的平臺做開發做完成https,必定要了解https的初始化流程,這里不再過多介紹,后面章節有直接的源碼
????3.3、QT的槽函數、信號機制
對于玩過QT的同學,應該問題不大,要是之前沒有相關基礎,可能需要問下度娘QT槽函數與信號,可以理解為一個事件,當每個信號觸發時,調用相應的函數,這個是QT的核心。
4、代碼介紹
這個Demo軟件,界面上分為兩個,一個是登陸、一個是實際用戶操作的界面
????4.1、登陸界面主要完成,通過用戶輸入的IP地址、port、appid、password,連接服務器并進行鑒權認證,拿到token,這里主要有個證書雙向認證的流程,導入證書、私鑰、信用庫,其中導入證書的代碼如下:
????4.2、通過QT API訪問華為云
QT里面使用QNetworkAccessManager對華為云進行訪問,QNetworkRequest設置其請求頭
????4.3、API接收完成
在上一章節中的網絡操作,發送與接收是異步的,當https接收完成或者異常等事件,會調用注冊的對應槽函數來處理,具體的連接函數如下,finished信號與用戶的onFinished()槽函數連接在一起
所以當HTTPS正常收發完成后,會在onFinished()函數里面進行出處理,這里就可以對接收的數據進行解析,獲取到我們想要的數據信息。比如下面客戶端發起獲取設備信息的請求時,對接收的數據做如下處理(主要還是json數據流的解析):
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接口獲取到數據,我們要將其顯示出來,所以在onFinished()函數的最后發送一個自定義的信號到主界面線程中,代碼如下
4.5、主界面根據信號對數據進行圖形化
例如:
有問題可以加入QQ群或者淘寶店鋪旺旺聯系:
野牛物聯網
QQ交流群:897268542
淘寶店鋪(點擊跳轉鏈接)
總結
以上是生活随笔為你收集整理的野牛NBIOT 环境监测项目---基于QT 5.9 接入华为OceanConnect云平台(六)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 智能指针用法及其代码详解
- 下一篇: s3c2440移植MQTT