




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
本章導(dǎo)覽NB-IoT物聯(lián)網(wǎng)應(yīng)用開發(fā)首先要終端設(shè)備能感知到物理世界的數(shù)據(jù),然后通過NB-IoT通信技術(shù)將感知的數(shù)據(jù)傳送到物聯(lián)網(wǎng)云平臺,實現(xiàn)數(shù)據(jù)的上報與命令的下達。要實現(xiàn)終端設(shè)備與云平臺的正確對接,必須要在物聯(lián)網(wǎng)云平臺上完成產(chǎn)品的定義、編解碼插件的開發(fā)、設(shè)備的綁定和調(diào)試。本章通過華為物聯(lián)網(wǎng)云平臺和智慧農(nóng)業(yè)溫濕度感知兩個項目重點講解如何在物聯(lián)網(wǎng)云平臺上定義產(chǎn)品模型、開發(fā)編解碼插件和設(shè)備的綁定與調(diào)試,通過一個溫濕度感知綜合項目帶領(lǐng)讀者體驗完整的NB-IoT物聯(lián)網(wǎng)應(yīng)用開發(fā)過程。本章知識結(jié)構(gòu)圖
學習目標通過對本章內(nèi)容的學習,學生應(yīng)該能夠做到:1.會在華為物聯(lián)網(wǎng)云平臺上進行產(chǎn)品模型的定義2.會在華為物聯(lián)網(wǎng)云平臺上開發(fā)編解碼插件3.會在華為物聯(lián)網(wǎng)云平臺上綁定終端設(shè)備并進行調(diào)試4.會通過編程實現(xiàn)感知數(shù)據(jù)上報到云平臺5.會通過編程實現(xiàn)云平臺下發(fā)給終端設(shè)備命令的執(zhí)行7.1華為物聯(lián)網(wǎng)云平臺項目7.1.1項目分析華為物聯(lián)網(wǎng)云平臺包括應(yīng)用管理、設(shè)備管理、系統(tǒng)管理等功能,實現(xiàn)統(tǒng)一安全的網(wǎng)絡(luò)接入、各種終端的靈活適配、海量數(shù)據(jù)的采集分析,從而實現(xiàn)新價值的創(chuàng)造。本節(jié)主要向讀者講解如何在華為物聯(lián)網(wǎng)云平臺上實現(xiàn)設(shè)備的接入,包括產(chǎn)品模型的定義、編解碼插件的開發(fā)和模擬設(shè)備的調(diào)試。華為物聯(lián)網(wǎng)平臺(IoT設(shè)備接入云服務(wù))提供海量設(shè)備的接入和管理能力,可以將IoT設(shè)備聯(lián)接到華為云,支撐設(shè)備數(shù)據(jù)采集上云和云端下發(fā)命令給設(shè)備進行遠程控制。使用物聯(lián)網(wǎng)云平臺構(gòu)建一個完整的物聯(lián)網(wǎng)應(yīng)用主要包括3部分:物聯(lián)網(wǎng)云平臺、業(yè)務(wù)應(yīng)用和終端設(shè)備。物聯(lián)網(wǎng)云平臺作為連接業(yè)務(wù)應(yīng)用和終端設(shè)備的中間層,屏蔽了各種復(fù)雜的設(shè)備接口,實現(xiàn)設(shè)備的快速接入;同時提供強大的開放能力,支撐行業(yè)用戶快速構(gòu)建各種物聯(lián)網(wǎng)業(yè)務(wù)應(yīng)用。終端設(shè)備可以通過固網(wǎng)、2G/3G/4G/5G、NB-IoT、Wifi等多種網(wǎng)絡(luò)接入物聯(lián)網(wǎng)云平臺,并使用LWM2M/CoAP或MQTT協(xié)議將業(yè)務(wù)數(shù)據(jù)上報到平臺,平臺也可以將控制命令下發(fā)給終端設(shè)備。業(yè)務(wù)應(yīng)用通過調(diào)用物聯(lián)網(wǎng)云平臺提供的API,實現(xiàn)終端設(shè)備數(shù)據(jù)采集、命令下發(fā)、設(shè)備管理等業(yè)務(wù)場景。物聯(lián)網(wǎng)云平臺支持終端設(shè)備直接接入,也可以通過工業(yè)網(wǎng)關(guān)或者家庭網(wǎng)關(guān)接入。7.1.1項目分析使用物聯(lián)網(wǎng)云平臺的第一步就是在云平臺上創(chuàng)建產(chǎn)品。產(chǎn)品是設(shè)備的集合,是指某一類具有相同能力或特征的設(shè)備的合集被稱為一款產(chǎn)品。產(chǎn)品創(chuàng)建完成之后,就可以進行產(chǎn)品模型的開發(fā)。產(chǎn)品模型是用于描述設(shè)備具備的能力和特性。通過定義產(chǎn)品模型,在物聯(lián)網(wǎng)云平臺構(gòu)建一款設(shè)備的抽象模型,使平臺理解該款設(shè)備支持的服務(wù)、屬性、命令等信息。產(chǎn)品模型包括描述一款設(shè)備基本信息的產(chǎn)品信息和描述設(shè)備具備的業(yè)務(wù)能力的服務(wù)信息兩部分。產(chǎn)品模型定義完成之后,要實現(xiàn)設(shè)備與業(yè)務(wù)應(yīng)用能夠正確的進行通信,需要進行編解碼插件開發(fā)。因為NB-IoT設(shè)備和物聯(lián)網(wǎng)平臺之間采用CoAP協(xié)議通訊,CoAP消息的payload為應(yīng)用層數(shù)據(jù),應(yīng)用層數(shù)據(jù)的格式由設(shè)備自行定義。由于NB-IoT設(shè)備一般對省電要求較高,所以應(yīng)用層數(shù)據(jù)一般不采用流行的JSON格式,而是采用二進制格式。但是,物聯(lián)網(wǎng)平臺與應(yīng)用側(cè)使用JSON格式進行通信。因此,需要開發(fā)編碼插件,供物聯(lián)網(wǎng)平臺調(diào)用,以完成二進制格式和JSON格式的轉(zhuǎn)換。7.1.1項目分析當產(chǎn)品模型和編解碼插件開發(fā)完成后,應(yīng)用服務(wù)器就可以通過物聯(lián)網(wǎng)平臺接收設(shè)備上報的數(shù)據(jù)以及向設(shè)備下發(fā)命令。設(shè)備接入控制臺提供了產(chǎn)品在線調(diào)測的功能,可以根據(jù)自己的業(yè)務(wù)場景,在開發(fā)真實應(yīng)用和真實設(shè)備之前,使用應(yīng)用模擬器和設(shè)備模擬器對數(shù)據(jù)上報和命令下發(fā)等場景進行調(diào)測;也可以在真實設(shè)備開發(fā)完成后使用應(yīng)用模擬器驗證業(yè)務(wù)流。當設(shè)備側(cè)開發(fā)和應(yīng)用側(cè)開發(fā)均未完成時,開發(fā)者可以創(chuàng)建模擬設(shè)備,使用應(yīng)用模擬器和設(shè)備模擬器對產(chǎn)品模型、插件等進行調(diào)測。當設(shè)備側(cè)開發(fā)已經(jīng)完成,但應(yīng)用側(cè)開發(fā)還未完成時,開發(fā)者可以創(chuàng)建真實設(shè)備,使用應(yīng)用模擬器對設(shè)備、產(chǎn)品模型、插件等進行調(diào)測。本節(jié)通過一個智慧農(nóng)業(yè)環(huán)境感知項目,介紹如何利用華為物聯(lián)網(wǎng)云平臺進行產(chǎn)品的創(chuàng)建、產(chǎn)品模型的定義、編解碼插件開發(fā)及虛擬設(shè)備的在線調(diào)試,并通過模擬設(shè)備數(shù)據(jù)上報和命令下達,幫助讀者熟悉物聯(lián)網(wǎng)云平臺的業(yè)務(wù)操作流程。7.1.2方案設(shè)計本項目是一個簡易的NB-IoT智慧農(nóng)業(yè)環(huán)境感知產(chǎn)品,該產(chǎn)品可以采集環(huán)境溫度、濕度、光照數(shù)據(jù)并將這些數(shù)據(jù)上報到物聯(lián)網(wǎng)云平臺。同時,可以通過云平臺向感知終端設(shè)備下達指令,遠程控制燈光和風扇的開關(guān)。本項目的實現(xiàn)流程主要由“產(chǎn)品創(chuàng)建”、“產(chǎn)品模型定義”、“編解碼插件開發(fā)”和“設(shè)備在線調(diào)試”四個部分,如圖所示。7.1.2方案設(shè)計字段名稱字段值字段約束自定義規(guī)則產(chǎn)品名稱可自定義必填項長度不超過64,只允許中文、字母、數(shù)字、以及_?’#().,&%@!-等字符組合協(xié)議類型LwM2M/CoAP必填項無數(shù)據(jù)格式二進制碼流必填項無廠商名稱可自定義必填項長度不超過32,只允許中文、字母、數(shù)字、以及_?’#().,&%@!-等字符組合所屬行業(yè)智慧農(nóng)業(yè)選填項無設(shè)備類型可自定義必填項長度不超過32,只允許中文、字母、數(shù)字、以及_?’#().,&%@!-等字符組合產(chǎn)品創(chuàng)建時,產(chǎn)品的基本信息如下表所示7.1.2方案設(shè)計服務(wù)ID服務(wù)類型服務(wù)描述環(huán)境數(shù)據(jù)感知服務(wù)環(huán)境數(shù)據(jù)感知服務(wù)感知溫度、濕度和光照數(shù)據(jù),并可遠程控制燈光和風扇的開關(guān)屬性名稱數(shù)據(jù)類型訪問權(quán)限取值范圍步長單位Temperatureint(整數(shù))可讀可寫0~1001攝氏度(oC)Humidityint(整數(shù))可讀可寫0~1001百分比(%)Luminanceint(整數(shù))可讀可寫0~1001勒克斯(Lux)根據(jù)智慧農(nóng)業(yè)環(huán)境感知產(chǎn)品的功能,產(chǎn)品具有的服務(wù)列表信息如下表所示。產(chǎn)品的“環(huán)境數(shù)據(jù)感知服務(wù)”中的屬性列表信息如下表所示。7.1.2方案設(shè)計產(chǎn)品的“環(huán)境數(shù)據(jù)感知服務(wù)”中的屬性列表信息如下表所示。屬性名稱數(shù)據(jù)類型訪問權(quán)限取值范圍步長單位Temperatureint(整數(shù))可讀可寫0~1001攝氏度(oC)Humidityint(整數(shù))可讀可寫0~1001百分比(%)Luminanceint(整數(shù))可讀可寫0~1001勒克斯(Lux)產(chǎn)品的“環(huán)境數(shù)據(jù)感知服務(wù)”中的命令列表信息如下表所示。命令名稱參數(shù)類型參數(shù)名稱數(shù)據(jù)類型數(shù)據(jù)范圍/長度枚舉值Control_Light下發(fā)參數(shù)Lightstring(字符串)3ON,OFF響應(yīng)參數(shù)Light_Stateint(整數(shù))0~1--Control_Fan下發(fā)參數(shù)Fanstring(字符串)3ON,OFF響應(yīng)參數(shù)Fan_Stateint(整數(shù))0~1--7.1.2方案設(shè)計在進行編解碼插件開發(fā)時,根據(jù)產(chǎn)品所上報的數(shù)據(jù)和下達的命令,消息列表信息如下表所示。Agriculture數(shù)據(jù)上報消息結(jié)構(gòu)如下表所示。碼流偏移值01234字段名稱messageIdTemperatureHumidityLuminance數(shù)據(jù)類型int8uint8uint8uInt16u長度111216進制默認值00193C0064序號消息名消息類型地址域(messageId)1Agriculture數(shù)據(jù)上報002Agriculture_Control_Light命令下發(fā)01響應(yīng)字段023Agriculture_Control_Fan命令下發(fā)03響應(yīng)字段047.1.2方案設(shè)計Agriculture_Control_Light命令下發(fā)消息結(jié)構(gòu)如下表所示碼流偏移值012345字段名稱messageIdmidLight數(shù)據(jù)類型int8uint16ustring長度12316進制默認值0100014F4E--4F4646響應(yīng)字段名稱messageIdmiderrcodeLight_State--數(shù)據(jù)類型int8uint16uint8uint8u--長度1211--16進制默認值02000100/0100/01--7.1.2方案設(shè)計Agriculture_Control_Fan命令下發(fā)消息結(jié)構(gòu)如下表所示。碼流偏移值012345字段名稱messageIdmidFan數(shù)據(jù)類型int8uint16ustring長度12316進制默認值0300014F4E--4F4646響應(yīng)字段名稱messageIdmiderrcodeFan_State--數(shù)據(jù)類型int8uint16uint8uint8u--長度1211--16進制默認值04000100/0100/01--7.1.3項目實施首先注冊個人的華為云賬號,并進行實名認證。之后進入到設(shè)備接入云平臺,按照“產(chǎn)品創(chuàng)建”、“產(chǎn)品模型定義”、“編解碼插件開發(fā)”和“設(shè)備在線調(diào)試”的順序完成各部分開發(fā)內(nèi)容。具體操作步驟如下:1.創(chuàng)建華為云賬號,并進行實名認證(1)打開華為云官方網(wǎng)站/,點擊右上角的“注冊”按鈕進行華為云賬號的注冊,如果已有賬號,可直接點擊“登錄”按鈕,如圖7-2所示。7.1.3項目實施(2)填寫相關(guān)注冊信息,如圖所示。7.1.3項目實施(3)注冊完成之后,登錄賬號。然后將鼠標放置在賬號名稱上,在下列菜單里面點擊“賬號信息”鏈接,如圖所示。進入后點擊左側(cè)“實名認證”,選擇“個人賬號”,根據(jù)提示進行實名認證。7.1.3項目實施2.創(chuàng)建產(chǎn)品(1)實名認證完成之后,點擊“控制臺”菜單,如圖所示。7.1.3項目實施(2)在服務(wù)列表里面搜索“物聯(lián)網(wǎng)”,選擇IoT物聯(lián)網(wǎng)分類下面的“設(shè)備接入IoTDA”,如圖所示。7.1.3項目實施(3)進入后,點擊左側(cè)的“產(chǎn)品”,之后點擊右上角的“創(chuàng)建產(chǎn)品”,如圖所示。7.1.3項目實施(4)在彈出的產(chǎn)品創(chuàng)建界面按照如下信息填寫,如圖所示。所屬資源空間:DefaultApp產(chǎn)品名稱:NB-IoT智慧農(nóng)業(yè)環(huán)境感知協(xié)議類型:LwM2M/CoAP數(shù)據(jù)格式:二進制碼流廠商名稱:測試廠商所屬行業(yè):智慧農(nóng)業(yè)所示子行業(yè):農(nóng)業(yè)機械設(shè)備類型:農(nóng)業(yè)機械7.1.3項目實施(5)產(chǎn)品信息錄入完成之后,點擊“確定”按鈕,完成產(chǎn)品的創(chuàng)建。產(chǎn)品創(chuàng)建成功之后,會生成一個產(chǎn)品ID,如圖所示。7.1.3項目實施3.定義產(chǎn)品模型(1)點擊產(chǎn)品列表中對應(yīng)的產(chǎn)品名稱,進入到產(chǎn)品詳細信息界面。點擊下發(fā)的“自定義模型”,如圖所示。7.1.3項目實施(2)在彈出的添加服務(wù)界面,按照表7-2所示的信息填寫,如圖所示。7.1.3項目實施(3)填寫完成后點擊“確定”按鈕,在服務(wù)列表里面會顯示剛剛添加完成的服務(wù)。如圖所示。一個產(chǎn)品中可以添加多個服務(wù)。7.1.3項目實施(4)按照7.1.2節(jié)的方案設(shè)計,本產(chǎn)品的“環(huán)境數(shù)據(jù)感知服務(wù)”中共有Temperature(溫度)、Humidity(濕度)、Luminance(光照強度)三個屬性和Control_Light(燈光控制)、Control_Fan(風扇控制)兩個命令。(5)點擊“添加屬性”按鈕,按照表7-3中的屬性信息,分別完成Temperature(溫度)、Humidity(濕度)、Luminance(光照強度)三個屬性的添加。如圖所示。7.1.3項目實施(6)點擊“添加命令”按鈕,完成命的令添加,如圖所示。7.1.3項目實施(7)點擊新增命令界面中“下發(fā)參數(shù)”旁邊的“新增輸入?yún)?shù)”按鈕,新增下發(fā)參數(shù),如圖所示。7.1.3項目實施(8)點擊新增命令界面中“響應(yīng)參數(shù)”旁邊的“新增響應(yīng)參數(shù)”按鈕,新增響應(yīng)參數(shù),如圖所示。(9)參數(shù)都添加完成之后,點擊“確定”按鈕。接著按照同樣方式,完成Control_Fan的命令信息添加。7.1.3項目實施4.開發(fā)編解碼插件(1)產(chǎn)品模型定義完成之后,點擊“插件開發(fā)”標簽頁,然后點擊下方的“圖形化開發(fā)”按鈕,進入到編解碼插件開發(fā)界面,如下圖所示。7.1.3項目實施7.1.3項目實施7.1.3項目實施(2)點擊“新增消息”,完成Agriculture數(shù)據(jù)上報類型消息的新增,如圖所示。7.1.3項目實施(3)在“新增消息”界面,點擊“添加字段”,分別添加messageId、Temperature、Humidity和Luminance字段,如下圖所示。7.1.3項目實施7.1.3項目實施(4)點擊“新增消息”,完成Agriculture_Control_Light命令下發(fā)類型消息的新增,如圖所示。7.1.3項目實施(5)在“新增消息”界面,點擊“添加字段”,分別添加messageId、mid和Light字段,如圖所示。7.1.3項目實施7.1.3項目實施(6)在“新增消息”界面,勾選“添加響應(yīng)字段”復(fù)選框,然后點擊“添加響應(yīng)字段”按鈕進行響應(yīng)字段的添加,如圖所示。7.1.3項目實施(7)分別添加messageId、mid、errcode和Light_State字段,如圖所示。7.1.3項目實施7.1.3項目實施(8)點擊“新增消息”,參照表7-5完成Agriculture_Control_Fan命令下發(fā)類型消息的新增,如圖所示。7.1.3項目實施(9)在“新增消息”界面,點擊“添加字段”,分別添加messageId、mid和Fan字段,如下圖所示。7.1.3項目實施7.1.3項目實施(10)在“新增消息”界面,勾選“添加響應(yīng)字段”復(fù)選框,然后點擊“添加響應(yīng)字段”按鈕進行響應(yīng)字段的添加,如圖所示。7.1.3項目實施(11)參照表7-8分別添加messageId、mid、errcode和Fan_State字段,如圖所示。7.1.3項目實施7.1.3項目實施(12)所有消息定義完成之后,在編解碼插件圖形化開發(fā)界面中,將右側(cè)產(chǎn)品模型的屬性拖拽到Agriculture消息的數(shù)據(jù)上報字段上,將兩者建立關(guān)聯(lián),如圖所示。7.1.3項目實施(13)同樣的方式,將產(chǎn)品模型中命令Control_Light的命令下發(fā)字段Light和命令下發(fā)消息Agriculture_Control_Light中的命令下發(fā)字段Light建立關(guān)聯(lián)。類似的,將產(chǎn)品模型中命令Control_Light的命令響應(yīng)字段Light_State和命令下發(fā)消息Agriculture_Control_Light中的命令響應(yīng)字段Light_State建立關(guān)聯(lián),如下圖所示。7.1.3項目實施7.1.3項目實施(14)將產(chǎn)品模型中命令Control_Fan的命令下發(fā)字段Fan和命令下發(fā)消息Agriculture_Control_Fan中的命令下發(fā)字段Fan建立關(guān)聯(lián)。類似的,將產(chǎn)品模型中命令Control_Fan的命令響應(yīng)字段Fan_State和命令下發(fā)消息Agriculture_Control_Fan中的命令響應(yīng)字段Fan_State建立關(guān)聯(lián),如圖所示。7.1.3項目實施7.1.3項目實施(15)點擊右上角的“保存”按鈕。保存成功后,再點擊“部署”按鈕,完成編解碼插件的部署,如圖所示。7.1.3項目實施5.完成在線調(diào)試(1)編解碼插件部署完成之后,點擊“在線調(diào)試”標簽頁,然后點擊下方的“新增測試設(shè)備”按鈕來添加測試設(shè)備,如圖所示。7.1.3項目實施(2)在彈出的“新增測試設(shè)備”界面中,選擇“虛擬設(shè)備”,然后點擊“確定”,如圖所示。7.1.3項目實施(3)點擊測試設(shè)備后面的“調(diào)試”,如圖所示。7.1.3項目實施(4)在設(shè)備調(diào)試界面可以模擬終端設(shè)備上報感知數(shù)據(jù)和上層應(yīng)用向設(shè)備發(fā)送指令,如圖所示。7.1.3項目實施(5)在“設(shè)備模擬器”中按照Agriculture數(shù)據(jù)上報的消息格式,輸入二進制碼流0020160060,來模擬終端設(shè)備上報數(shù)據(jù)給用戶應(yīng)用的過程。二進制碼流經(jīng)過編解碼插件的解析,可以看到在應(yīng)用模擬器里得到溫度、濕度和光照強度的數(shù)據(jù),如圖所示。7.1.3項目實施(6)在“應(yīng)用模擬器”中,我們下發(fā)兩個Control_Light命令,參數(shù)分別時ON和OFF,來模擬用戶應(yīng)用向設(shè)備下達控制命令??梢钥吹接脩舳说腏SON格式命令數(shù)據(jù)經(jīng)過編解碼插件解析后得到了一串二進制碼流,該二進制碼流和我們在編解碼插件開發(fā)時定義的Agriculture_Control_Light消息結(jié)構(gòu)時一致??梢钥吹皆趹?yīng)用模擬器里得到溫度、濕度和光照強度的數(shù)據(jù),如圖所示。7.1.4項目小結(jié)物聯(lián)網(wǎng)云平臺為用戶提供創(chuàng)建內(nèi)聚物聯(lián)網(wǎng)系統(tǒng)所需的基礎(chǔ)設(shè)施,是物聯(lián)網(wǎng)應(yīng)用開發(fā)的一個關(guān)鍵環(huán)節(jié)。華為云的物聯(lián)網(wǎng)平臺,提供海量設(shè)備連接上云、設(shè)備和云端雙向消息通信、批量設(shè)備管理、遠程控制和監(jiān)控、OTA升級、設(shè)備聯(lián)動規(guī)則等能力,并可將設(shè)備數(shù)據(jù)靈活流轉(zhuǎn)到華為云其他服務(wù),幫助物聯(lián)網(wǎng)行業(yè)用戶快速完成設(shè)備聯(lián)網(wǎng)及行業(yè)應(yīng)用集成,具有協(xié)議靈活、快速接入、性能穩(wěn)定等特點。本項目通過一個智慧農(nóng)業(yè)環(huán)境感知項目,介紹了華為物聯(lián)網(wǎng)云平臺關(guān)于產(chǎn)品的創(chuàng)建、產(chǎn)品模型的定義、編解碼插件開發(fā)及虛擬設(shè)備的在線調(diào)試內(nèi)容,并通過模擬設(shè)備驗證了數(shù)據(jù)上報和命令下達過程,幫助讀者熟悉物聯(lián)網(wǎng)云平臺的業(yè)務(wù)操作流程,為后續(xù)綜合應(yīng)用案例的開發(fā)打下基礎(chǔ)。7.1.5知識及技能拓展華為物聯(lián)網(wǎng)云平臺提供了自定義模型、上傳模型文件、Excel導(dǎo)入和導(dǎo)入庫模型多種定義產(chǎn)品模型的方法。自定義模型(在線開發(fā)):從零自定義構(gòu)建產(chǎn)品模型。上傳模型文件(離線開發(fā)):將本地寫好的產(chǎn)品模型上傳到平臺。Excel導(dǎo)入:通過導(dǎo)入文件的方式快速定義產(chǎn)品功能。對于開發(fā)者來說,降低產(chǎn)品模型開發(fā)門檻,只需根據(jù)表格填寫參數(shù);對于高階開發(fā)者和集成商來說,提升行業(yè)復(fù)雜模型開發(fā)效率。導(dǎo)入庫模型(平臺預(yù)置產(chǎn)品模型):可以使用平臺預(yù)置的產(chǎn)品模型,快速完成產(chǎn)品開發(fā)。當前平臺提供了標準模型和廠商模型。標準模型遵循行業(yè)標準的產(chǎn)品模型,適用行業(yè)內(nèi)絕大部分廠商設(shè)備,而廠商模型針對設(shè)備類型發(fā)布的產(chǎn)品模型,適用于用行業(yè)內(nèi)少量廠家設(shè)備。可以根據(jù)實際需求選擇相應(yīng)的產(chǎn)品模型。7.1.5知識及技能拓展產(chǎn)品模型本質(zhì)上就是一個devicetype-capability.json文件和若干個serviceType-capability.json文件,離線開發(fā)產(chǎn)品模型就是按照產(chǎn)品模型編寫規(guī)則和JSON格式規(guī)范在devicetype-capability.json中定義設(shè)備能力,在servicetype-capability.json中定義服務(wù)能力。編解碼插件開發(fā)完成二進制格式和JSON格式的轉(zhuǎn)換。編解碼插件的開發(fā)手段有圖形化開發(fā)、離線開發(fā)和腳本化開發(fā)三種。圖形化開發(fā)是指在設(shè)備接入控制臺,通過可視化的方式快速開發(fā)一款產(chǎn)品的編解碼插件。離線開發(fā)是指使用編解碼插件的Java代碼Demo進行二次開發(fā),實現(xiàn)編解碼功能、完成插件打包和質(zhì)檢等。腳本化開發(fā)是指使用JavaScript腳本實現(xiàn)編解碼的功能。7.2 智慧農(nóng)業(yè)溫濕度感知項目7.2.1項目分析在物聯(lián)網(wǎng)應(yīng)用中,智慧農(nóng)業(yè)是基于精準的農(nóng)業(yè)傳感器進行實時監(jiān)測,利用云計算、數(shù)據(jù)挖掘等技術(shù)進行多層次分析,提高農(nóng)業(yè)生產(chǎn)對自然環(huán)境風險的應(yīng)對能力,使弱勢的傳統(tǒng)農(nóng)業(yè)成為具有高效率的現(xiàn)代產(chǎn)業(yè)。農(nóng)業(yè)環(huán)境因素如溫度、濕度、光照、二氧化碳等影響植物生長發(fā)育,可以通過各種傳感器進行監(jiān)測,將傳感器節(jié)點部署在不同的位置感知環(huán)境的這些參數(shù),通過無線網(wǎng)絡(luò)傳輸監(jiān)測數(shù)據(jù)到云平臺進行監(jiān)控。本項目利用溫濕度傳感器對農(nóng)作物生長的溫度和濕度參數(shù)進行感知,并通過NB-IoT技術(shù)傳輸?shù)轿锫?lián)網(wǎng)云平臺。7.2.1項目分析前面章節(jié)已經(jīng)完成了嵌入式基礎(chǔ)開發(fā)、傳感器數(shù)據(jù)感知、NB-IoT網(wǎng)絡(luò)和物聯(lián)網(wǎng)云平臺相關(guān)實驗內(nèi)容,本節(jié)在前面學習的基礎(chǔ)上,完成一個智慧農(nóng)業(yè)溫濕度感知應(yīng)用項目的開發(fā)。該項目主要由終端層、網(wǎng)絡(luò)層和平臺層部分組成,通過對影響農(nóng)作物生長的溫度和濕度環(huán)境參數(shù)感知,同時根據(jù)感知的濕度數(shù)據(jù)在云平臺設(shè)置設(shè)備聯(lián)動規(guī)則實現(xiàn)風扇的協(xié)同控制,來營造有利于農(nóng)作物生長的環(huán)境。智慧農(nóng)業(yè)溫濕度感知項目整體架構(gòu)如圖所示。7.2.1項目分析終端層:終端設(shè)備上安裝有溫濕度傳感器和風扇模塊,通過集成在NB-IoT標準模塊和NB-IoT基站連接,來實現(xiàn)通信能力。智能終端通過NB-IoT基站將感知的溫濕度數(shù)據(jù)上報給物聯(lián)網(wǎng)云平臺,并接收通過物聯(lián)網(wǎng)云平臺下發(fā)的開關(guān)風扇指令。網(wǎng)絡(luò)層:網(wǎng)絡(luò)層借助中國電信窄帶物聯(lián)網(wǎng)進行業(yè)務(wù)數(shù)據(jù)傳輸。中國電信提供的800MHz頻段的網(wǎng)絡(luò)接入在信號穿透力和覆蓋度上擁有較大的優(yōu)勢,能充分保障智慧農(nóng)業(yè)業(yè)務(wù)在室外復(fù)雜環(huán)境下進行數(shù)據(jù)傳輸?shù)姆€(wěn)定性和可靠性。平臺層:溫濕度感知數(shù)據(jù)經(jīng)電信運營商的NB-IoT網(wǎng)絡(luò)發(fā)送到華為云物聯(lián)網(wǎng)平臺,華為云物聯(lián)網(wǎng)平臺處理后,發(fā)往上層行業(yè)應(yīng)用平臺完成業(yè)務(wù)處理。針對本項目特定的場景,利用華為云物聯(lián)網(wǎng)平臺開發(fā)定制化的產(chǎn)品模型和編解碼插件。華為云物聯(lián)網(wǎng)平臺負責設(shè)備數(shù)據(jù)模型的轉(zhuǎn)換,實現(xiàn)南向服務(wù)對接,同時提供即時或離線命令下發(fā)管理,上游應(yīng)用無須關(guān)心終端設(shè)備的實際物理連接和數(shù)據(jù)傳輸,實現(xiàn)終端對象化管理,降低應(yīng)用開發(fā)難度。7.2.1項目分析本節(jié)的智慧農(nóng)業(yè)溫濕度感知項目核心功能如下:(1)周期性地采集溫濕度數(shù)據(jù)并上報到物聯(lián)網(wǎng)云平臺(2)物聯(lián)網(wǎng)云平臺根據(jù)濕度數(shù)據(jù)遠程控制風扇的開關(guān)因此,本項目需要(1)根據(jù)項目業(yè)務(wù)需求在物聯(lián)網(wǎng)云平臺上進行產(chǎn)品的創(chuàng)建、模型的定義、編解碼插件的開發(fā)、真實物聯(lián)網(wǎng)設(shè)備終端的綁定、設(shè)備聯(lián)動規(guī)則的創(chuàng)建;(2)在終端開發(fā)板上利用利用溫濕度傳感器感知數(shù)據(jù),并將感知到的數(shù)據(jù)同NB-IoT模塊發(fā)送給物聯(lián)網(wǎng)云平臺。同時,還能接收物聯(lián)網(wǎng)云平臺下發(fā)的風扇控制命令,并根據(jù)控制命令設(shè)置風扇的開和關(guān)。由于本項目涉及設(shè)備聯(lián)動,因此需要用到兩個終端設(shè)備,一個終端設(shè)備安裝有溫濕度傳感器模塊,另一個安裝風扇模塊,具體如下圖所示。7.2.1項目分析7.2.2方案設(shè)計根據(jù)上一小節(jié)的項目分析可知,本項目的開發(fā)涉及物聯(lián)網(wǎng)云平臺開發(fā)和終端設(shè)備開發(fā)兩個部分。1.物聯(lián)網(wǎng)云平臺開發(fā)物聯(lián)網(wǎng)云平臺上需要進行產(chǎn)品的創(chuàng)建、模型的定義、編解碼插件的開發(fā)、真實物聯(lián)網(wǎng)設(shè)備終端的綁定、設(shè)備聯(lián)動規(guī)則的創(chuàng)建。具體各部分的信息如下產(chǎn)品創(chuàng)建時,產(chǎn)品的基本信息如下表所示。字段名稱字段值產(chǎn)品名稱智慧農(nóng)業(yè)溫濕度感知協(xié)議類型LwM2M/CoAP數(shù)據(jù)格式二進制碼流廠商名稱測試廠商所屬行業(yè)智慧農(nóng)業(yè)7.2.2方案設(shè)計根據(jù)智慧農(nóng)業(yè)溫濕度感知產(chǎn)品的功能,產(chǎn)品具有的服務(wù)列表信息如下表所示。服務(wù)ID服務(wù)類型服務(wù)描述溫濕度感知服務(wù)溫濕度感知服務(wù)感知溫濕度數(shù)據(jù),并可遠程控制風扇的開關(guān)產(chǎn)品的“溫濕度感知服務(wù)”中的屬性列表信息如下所示。屬性名稱數(shù)據(jù)類型訪問權(quán)限取值范圍步長單位Temperatureint(整數(shù))可讀可寫0~1001攝氏度(oC)Humidityint(整數(shù))可讀可寫0~1001百分比(%)7.2.2方案設(shè)計產(chǎn)品的“環(huán)境數(shù)據(jù)感知服務(wù)”中的命令列表信息如下表所示。命令名稱參數(shù)類型參數(shù)名稱數(shù)據(jù)類型取值范圍步長Control_Fan下發(fā)參數(shù)Fanint(整型)0~11在進行編解碼插件開發(fā)時,根據(jù)產(chǎn)品所上報的數(shù)據(jù)和下達的命令,消息列表信息如下表所示。序號消息名消息類型地址域(messageId)1Agriculture_Report_TH數(shù)據(jù)上報002Agriculture_Control_Fan命令下發(fā)017.2.2方案設(shè)計Agriculture數(shù)據(jù)上報消息結(jié)構(gòu)如下表所示。碼流偏移值012字段名稱messageIdTemperatureHumidity數(shù)據(jù)類型int8uint8uint8u長度11116進制默認值00193CAgriculture_Control_Fan命令下發(fā)消息結(jié)構(gòu)如下表所示。碼流偏移值01字段名稱messageIdFan_State數(shù)據(jù)類型int8uint8u長度1116進制默認值0100/017.2.2方案設(shè)計項目中用到的真實設(shè)備信息如表7-16所示,這里的設(shè)備標識碼為NB-IoT模塊的IMEI號,可以在NB-IoT模塊產(chǎn)品的上看到,或者通過向NB-IoT模塊發(fā)送“AT+CGSN=1”AT指令來查詢。設(shè)備類型設(shè)備名稱設(shè)備標識碼設(shè)備注冊方式真實設(shè)備溫濕度感知設(shè)備869768040299234不加密真實設(shè)備風扇設(shè)備869768040500425不加密7.2.2方案設(shè)計2.終端設(shè)備開發(fā)終端設(shè)備上綜合第6章的風扇控制項目、溫濕度感知項目和MCU與NB-IoT模塊通信項目來實現(xiàn)具體的功能。具體實現(xiàn)流程如下:1)在主函數(shù)首先完成GPIO、定時器2、串口1和串口2的初始化2)在主函數(shù)的while循環(huán)中,根據(jù)設(shè)置的5秒時間間隔來讀取GPIOPB8引腳的數(shù)據(jù),并按照DHT11的數(shù)據(jù)格式進行解析,獲得感知的溫濕度數(shù)據(jù)。并將感知到的溫濕度數(shù)據(jù),按照物聯(lián)網(wǎng)云平臺上編解碼插件里的數(shù)據(jù)上報消息格式構(gòu)造數(shù)據(jù)發(fā)送的AT指令,通過串口1發(fā)送給PC端的串口調(diào)試助手,同時通過串口2發(fā)送給NB-IoT模塊,完成數(shù)據(jù)向物聯(lián)網(wǎng)云平臺的上報3)在串口接收的中斷處理函數(shù)里面,對串口1接收到數(shù)據(jù)轉(zhuǎn)發(fā)給串口2;對串口2接收到數(shù)據(jù)轉(zhuǎn)發(fā)給串口1,同時還要判斷收到的數(shù)據(jù)是否為云平臺的下發(fā)指令,如果是云平臺下的指令,還需要進一步完成指令的解析,并根據(jù)解析結(jié)果控制風扇的開和關(guān)。4)在定時器的中斷處理函數(shù)里面,主要完成5秒中的時長控制。其中的初始化部分都可以通過STM32CubeMx軟件以圖形化的方式進行配置,大大減輕編程工作量。7.2.3項目實施本項目的開發(fā)包括華為物聯(lián)網(wǎng)云平臺的產(chǎn)品開發(fā)和南向終端設(shè)備的開發(fā)兩個部分。具體操作步驟如下:1.華為物聯(lián)網(wǎng)云平臺的產(chǎn)品開發(fā)(1)使用之前注冊的華為云平臺賬號登錄,進入到控制臺中的“設(shè)備接入IoTDA”服務(wù)(2)按照產(chǎn)品基本信息創(chuàng)建產(chǎn)品,如圖所示。7.2.3項目實施(3)點擊“自定義模型”進行產(chǎn)品模型的定義,按照表7-10中的產(chǎn)品服務(wù)列表信息創(chuàng)建服務(wù),如圖所示。7.2.3項目實施(4)點擊“添加屬性”按鈕,完成Temperature(溫度)和Humidity(濕度)兩個屬性的添加。如圖所示。7.2.3項目實施(5)點擊“添加命令”按鈕,完成Control_Light命令信息的添加,如圖所示。7.2.3項目實施(6)點擊“新增輸入?yún)?shù)”按鈕,按照Control_Light命令的信息,新增下發(fā)參數(shù),如圖所示。7.2.3項目實施(7)產(chǎn)品模型定義完成之后,切換到“插件開發(fā)”標簽頁,然后點擊下方的“圖形化開發(fā)”按鈕,進入到編解碼插件開發(fā)界面。點擊“新增消息”按鈕,完成Agriculture_Report_TH數(shù)據(jù)上報類型消息的新增,如圖所示。7.2.3項目實施(8)在“新增消息”界面,點擊“添加字段”,根據(jù)Agriculture_Report_TH數(shù)據(jù)上報消息結(jié)構(gòu),分別添加messageId、Temperature和Humidity字段,如下圖所示。7.2.3項目實施7.2.3項目實施(9)點擊“新增消息”按鈕,完成Agriculture_Control_Fan命令下發(fā)類型消息的新增,如圖所示。7.2.3項目實施(10)在“新增消息”界面,點擊“添加字段”,根據(jù)Agriculture_Control_Fan命令下發(fā)消息結(jié)構(gòu),分別添加messageId和Fan_State字段,如下圖所示。7.2.3項目實施7.2.3項目實施(11)所有消息定義完成之后,在編解碼插件圖形化開發(fā)界面中,將右側(cè)產(chǎn)品模型的Temperature和Humidity屬性拖拽到Agriculture_Report_TH消息的數(shù)據(jù)上報字段上;將右側(cè)產(chǎn)品模型的命令下發(fā)字段Fan拖拽到Agriculture_Control_Fan命令下發(fā)消息中的Fan_State字段上,分別將兩者建立關(guān)聯(lián),如圖所示。7.2.3項目實施(12)關(guān)聯(lián)完成之后,點擊右上角的“保存”按鈕。保存成功后,再點擊“部署”按鈕,完成編解碼插件的部署,如圖所示。7.2.3項目實施(13)編解碼插件部署完成之后,切換至“在線調(diào)試”標簽頁,然后點擊下方的“新增測試設(shè)備”按鈕,按照表7-16中的設(shè)備信息來添加真實的測試設(shè)備,如圖所示。7.2.3項目實施(14)點擊“規(guī)則”下面的“設(shè)備聯(lián)動”,進行設(shè)備聯(lián)動規(guī)則的創(chuàng)建,如圖所示。7.2.3項目實施(15)點擊“創(chuàng)建規(guī)則”按鈕,創(chuàng)建“風扇打開規(guī)則”,填寫規(guī)則的基本信息,如圖所示。7.2.3項目實施(16)在觸發(fā)條件部分,點擊“添加條件”,選擇“指定設(shè)備觸發(fā)”。然后“在選擇設(shè)備”時,選擇之前添加的“溫濕度感知設(shè)備”。服務(wù)選擇“溫濕度感知服務(wù)”,屬性選擇“Humidity”,條件設(shè)置為>=40,如圖所示。7.2.3項目實施7.2.3項目實施(17)在執(zhí)行動作部分,點擊“添加動作”,選擇“下發(fā)命令”。執(zhí)行下發(fā)設(shè)備時選擇“風扇設(shè)備”;服務(wù)選擇“溫濕度感知服務(wù)”;命令選擇“Control_Fan”,參數(shù)配置為1,如圖所示。7.2.3項目實施7.2.3項目實施(18)按照同樣的方式,再創(chuàng)建一個創(chuàng)建“風扇關(guān)閉規(guī)則”,觸發(fā)條件和執(zhí)行動作如圖所示。7.2.3項目實施2.南向終端設(shè)備的開發(fā)(1)打開STM32CubeMX軟件,點擊NewProject,如圖所示。7.2.3項目實施(2)根據(jù)STM32數(shù)據(jù)手冊里面MCU的型號、封裝等信息,選擇MCU,如圖所示。7.2.3項目實施(3)工程建立完成后,會出現(xiàn)下圖所示的界面7.2.3項目實施(4)在工程界面右側(cè)的引腳配置列表中找到RCC、TIM2、USART1和USART2,設(shè)置如圖所示。7.2.3項目實施(5)配置GPIO口PB0和PB7為GPIO_Input,如圖所示。7.2.3項目實施(6)切換面板至ClockConfiguration,按圖所示配置時鐘。7.2.3項目實施(7)切換面板至Configuration,如圖所示,分別點擊USART1和USART2按鈕來進行串口的配置。7.2.3項目實施(8)在彈出的串口配置對話框中,在ParameterSettings標簽頁,設(shè)置串口USART1的波特率(BaudRate)為115200Bits/s,設(shè)置串口USART2的波特率(BaudRate)為9600Bits/s。在NVICSettings標簽頁,勾選USART1和USART2的中斷,如下圖所示。7.2.3項目實施7.2.3項目實施(9)點擊TIM2按鈕,在彈出的定時器配置對話框中進行定時器的配置。在ParameterSettings標簽頁,設(shè)置Prescaler(PSC–16bitsvalue)為4800-1,設(shè)置CounterPeriod(AutoReloadRegister–32bitsvalue)為10000-1;在NVICSettings標簽頁,勾選TIM2的中斷,如圖所示。7.2.3項目實施(10)點擊GPIO按鈕,在彈出的GPIO配置對話框中進行PB0和PB7的配置。將PB0和PB7的GPIOoutputlevel均設(shè)置為High,如圖所示。7.2.3項目實施(11)點擊工具欄上按鈕,來自動生成MDK-Keil5工程代碼。在彈出的對話框中需要進行工程名稱、保存位置等信息的填寫,之后點擊OK按鈕完成代碼的自動生成。(12)工程生成完成后,在彈出的對話框中點擊OpenProject按鈕,此時會打開Keil5編輯器,如圖所示。7.2.3項目實施(13)源代碼工程打開后,點擊編譯按鈕,完成工程編譯。(14)新建頭文件dht11.h,代碼如下:#ifndef__DHT11_H__#define__DHT11_H__#include"main.h"externuint8_tucharT_data_H,ucharT_data_L;externuint8_tucharRH_data_H,ucharRH_data_L;externuint8_tucharcheckdata;externvoidHAL_Delay_1us(uint8_tDelay);voidDHT11_TEST(void);//溫濕度感知啟動函數(shù)#endif7.2.3項目實施(15)新建源文件dht11.c,代碼如下#include"tim.h"#include"gpio.h"#include"dht11.h"http://溫濕度定義uint8_tucharT_data_H=0,ucharT_data_L=0;uint8_tucharRH_data_H=0,ucharRH_data_L=0;uint8_tucharcheckdata=0;voidHAL_Delay_1us(uint8_tDelay){uint8_ti,j;for(i=0;i<Delay;i++){for(j=0;j<7;j++){}}}7.2.3項目實施voidD2_OUT_GPIO_Init(void){GPIO_InitTypeDefGPIO_InitStruct;GPIO_InitStruct.Pin=GPIO_PIN_8;GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull=GPIO_NOPULL;GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOB,&GPIO_InitStruct);}voidD2_IN_GPIO_Init(void){GPIO_InitTypeDefGPIO_InitStruct;GPIO_InitStruct.Pin=GPIO_PIN_8;GPIO_InitStruct.Mode=GPIO_MODE_INPUT;GPIO_InitStruct.Pull=GPIO_PULLUP;GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOB,&GPIO_InitStruct);}7.2.3項目實施voidDHT11_TEST(void)//溫濕度感知啟動{uint8_tucharT_data_H_temp,ucharT_data_L_temp;uint8_tucharRH_data_H_humidity,ucharRH_data_L_humidity;uint8_tucharcheckdata_temp;volatileuint8_tucharFLAG=0,uchartemp=0;volatileuint8_tucharcomdata;uint8_ti;D2_OUT_GPIO_Init();7.2.3項目實施HAL_Delay_1us(30);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);HAL_Delay(30);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);HAL_Delay_1us(30);D2_IN_GPIO_Init();HAL_Delay_1us(20);7.2.3項目實施if(!HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_8)){ucharFLAG=2;while((!HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_8))&&ucharFLAG++);ucharFLAG=2;while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_8)&&ucharFLAG++);7.2.3項目實施for(i=0;i<8;i++){ucharFLAG=2;while((!HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_8))&&ucharFLAG++);HAL_Delay_1us(35);uchartemp=0;if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_8))uchartemp=1;ucharFLAG=2;while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_8)&&ucharFLAG++);if(ucharFLAG==1)break; ucharcomdata<<=1;ucharcomdata|=uchartemp;}7.2.3項目實施ucharT_data_L_temp=ucharcomdata;for(i=0;i<8;i++){ucharFLAG=2;while((!HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_8))&&ucharFLAG++);HAL_Delay_1us(30);uchartemp=0;if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_8))uchartemp=1; ucharFLAG=2;while((HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_8))&&ucharFLAG++);if(ucharFLAG==1)break; ucharcomdata<<=1;ucharcomdata|=uchartemp;}7.2.3項目實施ucharcheckdata_temp=ucharcomdata;uchartemp=(ucharT_data_H_temp+ucharT_data_L_temp+ucharRH_data_H_humidity +ucharRH_data_L_humidity);if(uchartemp==ucharcheckdata_temp){ucharT_data_H=ucharT_data_H_temp;ucharT_data_L=ucharT_data_L_temp;ucharRH_data_H=ucharRH_data_H_humidity;ucharRH_data_L=ucharRH_data_L_humidity;ucharcheckdata=ucharcheckdata_temp;}}7.2.3項目實施else//沒有成功讀取,返回0{ ucharT_data_H=0;ucharT_data_L=0;ucharRH_data_H=0;ucharRH_data_L=0;}7.2.3項目實施(16)添加DH11驅(qū)動頭文件,將dht11.h文件拷貝到工程目錄的Inc文件夾下,如下圖所示。(17)添加DH11驅(qū)動源文件,將dht11.c文件拷貝到工程目錄的Src文件夾下,如下圖所示。7.2.3項目實施(18)在Keil的Project面板中,鼠標右鍵單擊Application/User,在彈出的菜單中,選擇AddExistingFilestoGroup‘Application/User’...子菜單,如圖所示。7.2.3項目實施(19)在彈出的文件選擇對話框中,找到之前拷貝到Src文件夾下的DHT11.c文件,點擊Add按鈕即可,如圖所示。7.2.3項目實施(20)在main.c文件中,找到/*USERCODEBEGINIncludes*/,在/*USERCODEBEGINIncludes*/下方添加如下代碼來引入溫濕度傳感器的頭文件。/*USERCODEBEGINIncludes*/#include"dht11.h"#include"string.h"#include"stdio.h"/*USERCODEENDIncludes*/7.2.3項目實施(21)在main.c文件中,找到/*USERCODEBEGINPV*/,在/*USERCODEBEGINPV*/下方添加如下代碼/*USERCODEBEGINPV*/#defineSENSOR_PERIOD_TIME5#defineMAX_RECV_LEN1024uint8_ttimeCounter=0;uint8_tisTimeoutFlag=0;uint8_tuart1RecvBuffer[MAX_RECV_LEN]={0};uint8_t*pUart1Buf=uart1RecvBuffer; uint8_tuart1RecvLength=0; staticintisUart1RecvOverflag=0; uint8_tuart2RecvBuffer[MAX_RECV_LEN]={0};uint8_t*pUart2Buf=uart1RecvBuffer; uint8_tuart2RecvLength=0; staticintisUart2RecvOverflag=0; staticintisStart=0;/*USERCODEENDPV*/7.2.3項目實施(22)在main.c文件中,找到/*USERCODEBEGIN4*/,在/*USERCODEBEGIN4*/下方添加如下代碼/*USERCODEBEGIN4*/voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim){ timeCounter++; if(htim==&htim2) { if(timeCounter>=SENSOR_PERIOD_TIME) { timeCounter=0; isTimeoutFlag=1; } }}7.2.3項目實施intfputc(intch,FILE*f){ HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,0xFFFF); returnch;}7.2.3項目實施voidprocessRecvStr(char*recvStr){ chardata[]={0}; intlength=strlen(recvStr); if(length>6)//+NNMI: { //+NNMI:2,0101 if(recvStr[0]=='+'&&recvStr[1]=='N'&&recvStr[2]=='N'&&recvStr[3]=='M'&&recvStr[4]=='I'&&recvStr[5]==‘:’) { if(recvStr[11]=='1') { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_RESET); } else{ HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_SET); } } }}7.2.3項目實施voidHAL_UART_RxCpltCallback(UART_HandleTypeDef*huart){ uint8_tret=HAL_OK; if(&huart1==huart) { pUart1Buf++; uart1RecvLength++; if(pUart1Buf==uart1RecvBuffer+MAX_RECV_LEN) { pUart1Buf=uart1RecvBuffer; }
do { ret=HAL_UART_Receive_IT(&huart1,(uint8_t*)pUart1Buf,1); }while(ret!=HAL_OK); if(*(pUart1Buf-1)=='\n') { isUart1RecvOverflag=1; } }7.2.3項目實施
elseif(&huart2==huart) { pUart2Buf++; uart2RecvLength++; if(pUart2Buf==uart2RecvBuffer+MAX_RECV_LEN) { pUart2Buf=uart2RecvBuffer; } do { ret=HAL_UART_Receive_IT(&huart2,(uint8_t*)pUart2Buf,1); }while(ret!=HAL_OK);
7.2.3項目實施 if(*(pUart2Buf-1)=='\n') { isUart2RecvOverflag=1; charbuf[100]={0}; sprintf(buf,"%s",uart2RecvBuffer); printf("%s",buf); if(isStart==0) { if(NULL!=strstr(buf,"AT+MLWEVTIND=3")) { isStart=1; HAL_TIM_Base_Start_IT(&htim2); } }7.2.3項目實施
if(isStart==1) { char*ret=strstr(buf,"+NNMI:"); processRecvStr(ret); } memset(uart2RecvBuffer,0,sizeof(uart2RecvBuffer)); pUart2Buf=uart2RecvBuffer; (&huart2)->pRxBuffPtr=pUart2Buf; isUart2RecvOverflag=0; uart2RecvLength=0; } }/*USERCODEEND4*/7.2.3項目實施(23)在main.c文件的**main**函數(shù)中,找到/*USERCODEBEGIN2*/,在/*USERCODEBEGIN2*/下方添加如下代碼/*USERCODEBEGIN2*/HAL_UART_Receive_I
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學生管理與教育工作者的職責與角色定位解析
- 二零二五年度自媒體賬號粉絲經(jīng)濟合作合同
- 2025年度游戲角色設(shè)計著作權(quán)許可及轉(zhuǎn)讓合同
- 二零二五年度房屋買賣合同公證保障協(xié)議
- 2025年度跨境車輛事故賠償處理合同
- 二零二五年度風電場工程分包合同
- 二零二五年度叉車緊急搶修及日常維護合同
- 二零二五年度幼兒園教師工作內(nèi)容調(diào)整與聘用協(xié)議
- 二零二五年度房地產(chǎn)項目收購合同示范文本
- 2025年度資產(chǎn)保全擔保合同解除協(xié)議書
- 降低陰式分娩產(chǎn)后出血發(fā)生率-PDCA
- 云南省地圖含市縣地圖矢量分層地圖行政區(qū)劃市縣概況ppt模板
- 光伏發(fā)電工程達標投產(chǎn)創(chuàng)優(yōu)工程檢查記錄
- 領(lǐng)導(dǎo)干部要樹立正確的價值觀、權(quán)力觀、事業(yè)觀課件
- 體育社會學(第一章)盧元鎮(zhèn)第四版課件
- 數(shù)電課件康華光電子技術(shù)基礎(chǔ)-數(shù)字部分第五版完全
- DB21-T 2041-2022寒區(qū)溫拌瀝青路面工程技術(shù)規(guī)程
- 語文主題學習整本書閱讀指導(dǎo)課件
- 職業(yè)教育課堂教學設(shè)計(全)課件
- 工程項目造價控制措施
- 心電監(jiān)護操作評分標準
評論
0/150
提交評論