日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

野牛NBIOT 环境监测项目---基于QT 5.9 接入华为OceanConnect云平台(六)

發布時間:2024/3/26 c/c++ 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 野牛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為端口號(其具體的值,在實驗室申請時,返回的郵件的應用對接信息中),請求的內容如下:

https://server:port/iocm/app/sec/v1.1.0/login Content-Type:application/x-www-form-urlencoded appId={appId}&secret={secret}

服務器接收到上述請求,正常情況下會做出回應,那么請求的返回數據中有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,這里主要有個證書雙向認證的流程,導入證書、私鑰、信用庫,其中導入證書的代碼如下:

QFile file; QString path = "./certificate/"; file.setFileName( path + "cert.pem"); file.open(QIODevice::ReadOnly); QSslCertificate local( &file , QSsl::Pem ); m_sslConfig.setLocalCertificate( local ); file.close();

????4.2、通過QT API訪問華為云
QT里面使用QNetworkAccessManager對華為云進行訪問,QNetworkRequest設置其請求頭

QString url = ""; QString form = ""; QByteArray bytePost;url = QString("https://%1:%2/iocm/app/sec/v1.1.0/login").arg(DC_ucfg.ip).arg(DC_ucfg.port); DC_request.setUrl(QUrl(url)); DC_request.setRawHeader("content-type","application/x-www-form-urlencoded"); form = QString("appId=%1&secret=%2").arg(DC_ucfg.appid).arg(DC_ucfg.password); bytePost.append(form); DC_signType = SIGN_TYPE_AUTH; pReply = DC_pManager->post(DC_request, bytePost);

????4.3、API接收完成
在上一章節中的網絡操作,發送與接收是異步的,當https接收完成或者異常等事件,會調用注冊的對應槽函數來處理,具體的連接函數如下,finished信號與用戶的onFinished()槽函數連接在一起

connect(DC_pReply , SIGNAL(finished()) , this, SLOT(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()函數的最后發送一個自定義的信號到主界面線程中,代碼如下

emit signMsgToMain(SIGN_CODE_GETDEVLIST_SUCCESS);

4.5、主界面根據信號對數據進行圖形化
例如:

for(int i = 0; i < g_DC.DC_devRootArray.size();i++) {QJsonObject devObj = g_DC.DC_devRootArray.at(i).toObject();QJsonObject devinfoObj = devObj.value("deviceInfo").toObject();QString devName = devinfoObj.value("name").toString();ui->comboBox_Dev->addItem(devName); }

有問題可以加入QQ群或者淘寶店鋪旺旺聯系:
野牛物聯網
QQ交流群:897268542
淘寶店鋪(點擊跳轉鏈接)

總結

以上是生活随笔為你收集整理的野牛NBIOT 环境监测项目---基于QT 5.9 接入华为OceanConnect云平台(六)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。