Linux人工智能開發(fā)實例 課件 第5-7章 智能家居網(wǎng)關Linux開發(fā)案例-AI人臉智能識別Linux開發(fā)案例_第1頁
Linux人工智能開發(fā)實例 課件 第5-7章 智能家居網(wǎng)關Linux開發(fā)案例-AI人臉智能識別Linux開發(fā)案例_第2頁
Linux人工智能開發(fā)實例 課件 第5-7章 智能家居網(wǎng)關Linux開發(fā)案例-AI人臉智能識別Linux開發(fā)案例_第3頁
Linux人工智能開發(fā)實例 課件 第5-7章 智能家居網(wǎng)關Linux開發(fā)案例-AI人臉智能識別Linux開發(fā)案例_第4頁
Linux人工智能開發(fā)實例 課件 第5-7章 智能家居網(wǎng)關Linux開發(fā)案例-AI人臉智能識別Linux開發(fā)案例_第5頁
已閱讀5頁,還剩166頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第5章智能家居網(wǎng)關Linux開發(fā)案例

5.1Linux網(wǎng)關服務框架智能家居網(wǎng)關Linux開發(fā)案例網(wǎng)關(Gateway)又稱網(wǎng)間連接器、協(xié)議轉換器。網(wǎng)關在傳輸層上以實現(xiàn)網(wǎng)絡互連,是最復雜的網(wǎng)絡互連設備,僅用于兩個高層協(xié)議不同的網(wǎng)絡互連。網(wǎng)關的結構也和路由器類似,不同的是互連層。網(wǎng)關既可以用于廣域網(wǎng)互連,也可以用于局域網(wǎng)互連。物聯(lián)網(wǎng)網(wǎng)關,成為連接感知網(wǎng)絡與傳統(tǒng)通信網(wǎng)絡的紐帶。作為網(wǎng)關設備,物聯(lián)網(wǎng)網(wǎng)關可以實現(xiàn)感知網(wǎng)絡與通信網(wǎng)絡,以及不同類型感知網(wǎng)絡之間的協(xié)議轉換.既可以實現(xiàn)廣域互聯(lián).也可以實現(xiàn)局域互聯(lián)。此外物聯(lián)網(wǎng)網(wǎng)關還需要具備設備管理功能,運營商通過物聯(lián)網(wǎng)網(wǎng)關設備可以管理底層的各感知節(jié)點,了解各節(jié)點的相關信息,并實現(xiàn)遠程控制。相關功能如下1)廣泛的接入能力短距離通信的技術標準很多,包括ZigBee、6LowPAN、BLE、Wi-Fi等。各類技術主要針對某一應用展開,之間缺乏兼容性和體系規(guī)劃。國內、外已經(jīng)在展開針對物聯(lián)網(wǎng)網(wǎng)關進行標準化工作,如3GPP、傳感器工作組,實現(xiàn)各種通信技術標準的互聯(lián)互通。5.1.1物聯(lián)網(wǎng)網(wǎng)關智能家居網(wǎng)關Linux開發(fā)案例2)可管理能力首先要對網(wǎng)關進行管理,如注冊管理、權限管理、狀態(tài)監(jiān)管等。網(wǎng)關實現(xiàn)子網(wǎng)內的節(jié)點的管理,如獲取節(jié)點的標識、狀態(tài)、屬性、能量等,以及遠程實現(xiàn)喚醒、控制、診斷、升級和維護等。由于子網(wǎng)的技術標準不同,協(xié)議的復雜性不同,所以網(wǎng)關具有的管理性能力不同。提出基于模塊化物聯(lián)網(wǎng)網(wǎng)關方式來管理不同的感知網(wǎng)絡、不同的應用,保證能夠使用統(tǒng)一的管理接口技術對末梢網(wǎng)絡節(jié)點進行統(tǒng)一管理。5.1.1物聯(lián)網(wǎng)網(wǎng)關物聯(lián)網(wǎng)網(wǎng)關服務架構智能家居網(wǎng)關Linux開發(fā)案例3)協(xié)議轉換能力從不同的感知網(wǎng)絡到接入網(wǎng)絡的協(xié)議轉換、將下層的標準格式的數(shù)據(jù)統(tǒng)一封裝、保證不同的感知網(wǎng)絡的協(xié)議能夠變成統(tǒng)一的數(shù)據(jù)和信令;將上層下發(fā)的數(shù)據(jù)包解析成感知層協(xié)議可以識別的信令和控制指令。物聯(lián)網(wǎng)智能網(wǎng)關是一個中央數(shù)據(jù)轉換單元,基于傳統(tǒng)嵌入式技術,運行復雜的嵌入式操作系統(tǒng),實現(xiàn)傳感無線網(wǎng)數(shù)據(jù)與電信網(wǎng)/互聯(lián)網(wǎng)之間的數(shù)據(jù)交互。智能網(wǎng)關采用嵌入式高性能ARM處理器,運行Linux操作系統(tǒng),實現(xiàn)網(wǎng)絡的數(shù)據(jù)M2M交互。5.1.1物聯(lián)網(wǎng)網(wǎng)關物聯(lián)網(wǎng)網(wǎng)關服務架構智能家居網(wǎng)關Linux開發(fā)案例一個基本的智云物聯(lián)項目系統(tǒng)模型如圖所示。(1)各種智能設備通過ZigBee(BLE、Wi-Fi、NB-IoT、LoRa和LTE)等無線傳感網(wǎng)絡聯(lián)系在一起,其中協(xié)調器/匯集器節(jié)點作為整個網(wǎng)絡的匯集中心;(2)協(xié)調器/匯集器與Linux網(wǎng)關進行交互,通過Linux網(wǎng)關上運行的服務程序,將傳感網(wǎng)與電信網(wǎng)和移動網(wǎng)進行連接,同時將數(shù)據(jù)推送給智云中心,也支持數(shù)據(jù)推送到本地局域網(wǎng)。(3)云平臺提供數(shù)據(jù)的存儲服務、數(shù)據(jù)推送服務、自動控制服務等深度的項目接口,本地服務僅支持數(shù)據(jù)的推送服務。(4)物聯(lián)網(wǎng)應用項目通過智云API進行具體應用的開發(fā),能夠實現(xiàn)對傳感網(wǎng)內節(jié)點進行采集、控制、決策等。5.1.2智云物聯(lián)平臺智能家居網(wǎng)關Linux開發(fā)案例為了方便物聯(lián)網(wǎng)項目的學習和開發(fā),本書根據(jù)物聯(lián)網(wǎng)網(wǎng)絡特性開發(fā)了一款專門用于數(shù)據(jù)收發(fā)調試的輔助開發(fā)和調試工具,工具可以通過無線節(jié)點的調試串口獲取節(jié)點當前配置的網(wǎng)絡信息。當協(xié)調器連接到xLabTools工具上時可以查看網(wǎng)絡信息和該協(xié)調器所組建的網(wǎng)絡下的節(jié)點反饋的信息,并能夠通過調試窗口向網(wǎng)絡內各節(jié)點發(fā)送數(shù)據(jù);將終端節(jié)點或路由節(jié)點連接到xLabTools工具上時可以實現(xiàn)對終端節(jié)點數(shù)據(jù)的監(jiān)測,并能夠通過工具向協(xié)調器發(fā)送指令。5.1.3平臺開發(fā)調試工具xLabTools調試工具智能家居網(wǎng)關Linux開發(fā)案例ZCloudTools是一款無線傳感網(wǎng)綜合分析測試工具,提供網(wǎng)絡拓撲圖、數(shù)據(jù)包分析、傳感器信息采集和控制、傳感器歷史數(shù)據(jù)查詢等功能。ZCloudTools調試工具界面如左圖所示。除了Android端調試工具外,同時還開發(fā)了PC端調試工具,PC端調試工具為ZCloudWebTools,該工具可直接在PC的瀏覽器上運行,功能于ZCloudTools工具類似。ZCloudWebTools工具界面如右圖所示。5.1.3平臺開發(fā)調試工具ZCloudTools協(xié)議工具智能家居網(wǎng)關Linux開發(fā)案例5.1.4開發(fā)實踐:智能網(wǎng)關組網(wǎng)與測試ZigBee網(wǎng)絡1.ZigBee網(wǎng)絡參數(shù)ZigBee作為一種可中繼,覆蓋范圍廣泛,接入節(jié)點眾多的無線網(wǎng)絡技術,其所構建的網(wǎng)絡勢必會有眾多的節(jié)點,這些節(jié)點的識別與定位都是ZigBee網(wǎng)絡所要關注的技術重點。ZigBee采用的網(wǎng)絡區(qū)分與識別方法是設置ZigBee的網(wǎng)絡CHANNEL(網(wǎng)絡信道號),在相同CHANNEL下通過PANID(網(wǎng)絡ID)來區(qū)別網(wǎng)絡。當一個ZigBee節(jié)點將CHANNEL和PANID信息與已有的ZigBee網(wǎng)絡信息設置相同時,這個ZigBee節(jié)點可以接入到已有的ZigBee網(wǎng)絡。在ZigBee網(wǎng)絡內部Coordinator(協(xié)調器)和Router(路由)通過分配的ShortAddr(短地址)實現(xiàn)對節(jié)點的定位與識別。在ZigBee網(wǎng)絡外部,開發(fā)者可以通過每個ZigBee芯片所攜帶的全球唯一的MAC地址對Zigbee節(jié)點進行識別。下面對這四個參數(shù)進行說明:PANIDPANID是Zigbee的局域網(wǎng)ID,用于區(qū)分通信道下的其他網(wǎng)絡,節(jié)點通過PANID判斷自身所屬的網(wǎng)絡標識。PANID的參數(shù)可配置,其配置參數(shù)范圍從0x0000~0xFFFF。可互相通信的節(jié)點之間PANID必須相同,且必須保證同一工作區(qū)域內的相鄰網(wǎng)絡PANID不同。MACMAC地址是一種是64位IEEE地址,這個64位的IEEE地址是一個全球唯一的地址,一經(jīng)分配就將跟隨設備一生。它通常由制造商或者被安裝時設置。這些地址由IEEE組織來維護和分配。智能家居網(wǎng)關Linux開發(fā)案例5.1.4開發(fā)實踐:智能網(wǎng)關組網(wǎng)與測試ZigBee網(wǎng)絡ShortAddrShortAddr是一種16位的ZigBee網(wǎng)絡內部的網(wǎng)絡地址,這個16位網(wǎng)絡地址是當設備加入網(wǎng)絡后分配的,它在ZigBee局域網(wǎng)中是唯一的,用來在網(wǎng)絡中鑒別設備和發(fā)送數(shù)據(jù)。ZigBee節(jié)點在RFD模式下時直接使用內網(wǎng)點地址即可。CHANNELCHANNEL是ZigBee通信頻率設置的信道號,2.4G的ZigBee協(xié)議棧含有16個通信信道,中國地區(qū)分配的信道為:信道11(0x0b)~信道26(0x1a)。對于信道的設置通過一個4字節(jié)的32bit數(shù)據(jù)來標示,如果需要使能某個信道,就將信道對應bit的數(shù)據(jù)置為1即可。比如某個設備使用信道11,將其信道數(shù)據(jù)值設置為0x00000800,使用信道26則設置為0x04000000。同時ZigBee網(wǎng)絡允許設備使能多個信道。如果需要使能所有信道,設置CHANNEL為0x7fff800即可。ZigBee網(wǎng)絡只有在保證在相同的信道下才能考慮通信的可能性,如果信道不同則無法組網(wǎng)。信道號分配如圖所示。智能家居網(wǎng)關Linux開發(fā)案例5.1.4開發(fā)實踐:智能網(wǎng)關組網(wǎng)與測試ZigBee網(wǎng)絡2.ZigBee網(wǎng)絡節(jié)點類型ZigBee網(wǎng)絡的基礎主要包括設備類型,拓撲結構和路由方式三個方面的內容,ZigBee標準規(guī)定所有的ZigBee網(wǎng)絡節(jié)點分為Coordinator(協(xié)調器)、Router(路由)、EndDevice(終端)三種類型,節(jié)點類型只是網(wǎng)絡層的概念,反映了網(wǎng)絡的拓撲形式,而ZigBee網(wǎng)絡采用任何一種拓撲形式只是為了實現(xiàn)網(wǎng)絡中信息高效穩(wěn)定的傳輸,在實際的應用中不必關心ZigBee網(wǎng)絡的組織形式的,節(jié)點類型的定義和節(jié)點在應用中所起到的功能并不相關。三種網(wǎng)絡節(jié)點類型分析如下:Coordinator(協(xié)調器)不論ZigBee網(wǎng)絡采用何種拓撲方式,網(wǎng)絡中有一個并且只能有一個Coordinator節(jié)點,它在網(wǎng)絡層的任務是:選擇網(wǎng)絡所使用的頻率通道、建立網(wǎng)絡并將其它節(jié)點加入網(wǎng)絡、提供信息路由、安全管理和其它的服務。Coordinator在系統(tǒng)初始化時起重要作用,某些應用中網(wǎng)絡初始化完成后,即使關閉了Coordinator節(jié)點,網(wǎng)絡仍然可正常工作,但若Coordinator在應用層提供一些服務,就必須持續(xù)的處于工作狀態(tài)。智能家居網(wǎng)關Linux開發(fā)案例5.1.4開發(fā)實踐:智能網(wǎng)關組網(wǎng)與測試ZigBee網(wǎng)絡Router(路由)如果ZigBee網(wǎng)絡采用了樹形和星形拓撲結構就需要用到Router這種類型的節(jié)點,負責數(shù)據(jù)的路由,路由建立由ZigBee協(xié)議的算法決定,它入網(wǎng)后可以加入其它Router節(jié)點,也可以加入?yún)f(xié)調器,是網(wǎng)絡遠距離延伸的必要部件。此類節(jié)點的主要功能是:發(fā)送和接收節(jié)點自身信息;在節(jié)點之間轉發(fā)信息;容許子節(jié)點通過他加入網(wǎng)絡。EndDevice(終端)EndDevice節(jié)點的主要任務就是發(fā)送和接收信息,不能夠轉發(fā)信息也不能夠讓其他人加入網(wǎng)絡。通常一個EndDevice節(jié)點不處在數(shù)據(jù)收發(fā)狀態(tài)的時候可進入休眠狀態(tài)以節(jié)省耗電。智能家居網(wǎng)關Linux開發(fā)案例5.1.4開發(fā)實踐:智能網(wǎng)關組網(wǎng)與測試ZigBee網(wǎng)絡ZigBee網(wǎng)絡架構ZigBee作為一種短距離、低功耗、低數(shù)據(jù)傳輸速率的無線網(wǎng)絡技術,它是介于無線標記技術和藍牙之間的技術方案,在傳感器網(wǎng)絡等領域應用非常廣泛,這得益于它強大的組網(wǎng)能力,可以形成星型、樹型和網(wǎng)狀網(wǎng)三種ZigBee網(wǎng)絡,可以根據(jù)實際項目需要來選擇合適的ZigBee網(wǎng)絡結構,三種ZigBee網(wǎng)絡結構各有優(yōu)勢。星形拓撲星形拓撲是最簡單的拓撲形式如圖所示,包含一個Coordinator節(jié)點和一系列的EndDevice節(jié)點。每一個EndDevice節(jié)點只能和Coordinator節(jié)點進行通訊,在兩個EndDevice節(jié)點之間進行通訊必須通過Coordinator節(jié)點進行轉發(fā)。這種拓撲形式的缺點是節(jié)點之間的數(shù)據(jù)路由只有唯一的一個路徑。Coordinator(協(xié)調者)有可能成為整個網(wǎng)絡的瓶頸。實現(xiàn)星形網(wǎng)絡拓撲不需要使用ZigBee的網(wǎng)絡層協(xié)議,因為本身IEEE802.15.4的協(xié)議層就已經(jīng)實現(xiàn)了星形拓撲形式,但是這需要開發(fā)者在應用層作更多的工作,包括自己處理信息的轉發(fā)。智能家居網(wǎng)關Linux開發(fā)案例5.1.4開發(fā)實踐:智能網(wǎng)關組網(wǎng)與測試ZigBee網(wǎng)絡樹形拓撲樹形拓撲結構如圖所示,Coordinator可以連接Router和EndDevice,其子節(jié)點的Router也可以連接Router和EndDevice,多個層級的樹形拓撲中,信息具有唯一路由通道,直接通信只可以在父節(jié)點與子節(jié)點之間進行,非父子關系的節(jié)點需間接通信。智能家居網(wǎng)關Linux開發(fā)案例5.1.4開發(fā)實踐:智能網(wǎng)關組網(wǎng)與測試ZigBee網(wǎng)絡網(wǎng)狀拓撲網(wǎng)狀拓撲如圖所示,具有靈活路由選擇方式,當某個路由路徑出現(xiàn)問題,信息可自動沿其它路由路徑進行傳輸。任兩個節(jié)點可相互傳輸數(shù)據(jù),數(shù)據(jù)可直接傳送或在傳輸過程中經(jīng)多級路由轉發(fā),網(wǎng)絡層提供路由探索功能,使得網(wǎng)絡層可以找到信息傳輸?shù)淖顑?yōu)化路徑,應用層不需要任何參與,網(wǎng)絡會自動按照ZigBee協(xié)議算法選擇較好的路由路徑作為數(shù)據(jù)傳輸通道,以使得網(wǎng)絡更穩(wěn)定,通訊更有效率。智能家居網(wǎng)關Linux開發(fā)案例5.1.4開發(fā)實踐:智能網(wǎng)關組網(wǎng)與測試

智能網(wǎng)關技術架構分析在整個物聯(lián)網(wǎng)技術架構中,智能網(wǎng)關屬于網(wǎng)絡層與平臺層交互的紐帶。感知層的無線節(jié)點采集數(shù)據(jù)通過物聯(lián)網(wǎng)無線通信方式(ZigBee、藍牙、Wi-Fi、LoRa、NB-IoT、LTE)把數(shù)據(jù)傳送到智能網(wǎng)關,網(wǎng)關匯集數(shù)據(jù)后上傳到云服務器,云服務器對數(shù)據(jù)進行存儲加工,最后用戶終端通過云端接口去訪問數(shù)據(jù),如圖所示。智能家居網(wǎng)關Linux開發(fā)案例5.1.4開發(fā)實踐:智能網(wǎng)關組網(wǎng)與測試

智云物聯(lián)項目組網(wǎng)與測試ZigBee網(wǎng)絡構建過程:1)準備一個智能網(wǎng)關,若干ZigBee節(jié)點和傳感器。2)智能網(wǎng)關先上電啟動系統(tǒng),此時ZigBee協(xié)調器根據(jù)程序設定的網(wǎng)絡參數(shù)建立ZigBee網(wǎng)絡。3)ZigBee節(jié)點上電啟動,根據(jù)程序設定的網(wǎng)絡參數(shù)開始搜尋網(wǎng)絡并入網(wǎng)。4)配置智能網(wǎng)關的網(wǎng)關服務程序,設置ZigBee傳感網(wǎng)接入到物聯(lián)網(wǎng)云平臺。5)通過應用軟件連接到設置的ZigBee項目,與ZigBee設備進行通信。智能家居網(wǎng)關Linux開發(fā)案例5.1.4開發(fā)實踐:智能網(wǎng)關組網(wǎng)與測試

智云物聯(lián)項目組網(wǎng)與測試Linux網(wǎng)關配置:1)系統(tǒng)開機后Linux網(wǎng)關程序會自動啟動,點擊遠程服務/本地服務的啟動按鈕打開服務,成功后會顯示已連接,如左圖所示。2)若需要修改邊緣計算網(wǎng)關內置的ZigBee協(xié)調器節(jié)點的網(wǎng)絡參數(shù),選擇“ZigBee”標簽頁,對PANID/CHANNEL進行修改,修改完成后重新勾選啟動選項,如右圖所示。智能家居網(wǎng)關Linux開發(fā)案例5.1.4開發(fā)實踐:智能網(wǎng)關組網(wǎng)與測試

智云物聯(lián)項目組網(wǎng)與測試連接設備并組建ZigBee網(wǎng)絡:準備LiteB節(jié)點、傳感器,接上天線,再將連接有傳感器的LiteB節(jié)點上電(網(wǎng)絡紅燈閃爍后常亮表示加入網(wǎng)絡成功),如左圖所示。注意觀察每個節(jié)點上的節(jié)點網(wǎng)絡燈是否常亮,節(jié)點數(shù)據(jù)燈是藍色,有數(shù)據(jù)傳送時會閃爍,如右圖所示。智能家居網(wǎng)關Linux開發(fā)案例5.1.4開發(fā)實踐:智能網(wǎng)關組網(wǎng)與測試

智云物聯(lián)項目組網(wǎng)與測試智能網(wǎng)關數(shù)據(jù)測試:當ZigBee設備組網(wǎng)成功,并且正確設置智能網(wǎng)關將數(shù)據(jù)連接到云端,此時可以通過ZCloudTools工具抓取和調試應用層數(shù)據(jù)。打開應用后,點擊右下角的功能菜單,通過掃描智能網(wǎng)關上云服務ID/KEY的二維碼輸入相同的帳號信息,連接到服務器,如左圖所示。ZCloudTools可查看網(wǎng)絡拓撲圖,了解設備組網(wǎng)狀態(tài)如右圖所示。智能家居網(wǎng)關Linux開發(fā)案例5.1.4開發(fā)實踐:智能網(wǎng)關組網(wǎng)與測試

智云物聯(lián)項目組網(wǎng)與測試點擊界面上標注Sensor-B藍色的節(jié)點,可啟動Sensor-B的控制界面,操作不同的按鈕可對節(jié)點進行控制,如左圖所示。ZCloudTools可查看網(wǎng)絡數(shù)據(jù)包,并支持下行發(fā)送控制命令,如右圖所示。智能家居網(wǎng)關Linux開發(fā)案例5.1.4開發(fā)實踐:智能網(wǎng)關組網(wǎng)與測試

智云物聯(lián)項目組網(wǎng)與測試xLabDemo智能家居測試通過Android設備掃描下述兩維碼,打開應用后選擇安裝里面的xLabDemo工具,如左圖所示。在ID/KEY設置界面,通過掃描智能網(wǎng)關ZXBeeGW軟件上分享的二維碼,連接到服務器,如右圖所示。智能家居網(wǎng)關Linux開發(fā)案例5.1.4開發(fā)實踐:智能網(wǎng)關組網(wǎng)與測試

智云物聯(lián)項目組網(wǎng)與測試如果應用已經(jīng)連接到服務器,可以看到無線節(jié)點的MAC地址信息,如左圖所示。在“模式設置”界面可以切換自動與手動模式,在“自動”模式下用戶通過設置閾值,關聯(lián)的傳感器會根據(jù)閾值自動開關?!笆謩印蹦J綍r,用戶可以在“運營主頁”手動控制設備,如右圖所示。網(wǎng)絡視頻監(jiān)控Linux開發(fā)案例5.1.5小結了解了智能網(wǎng)關的概念、智云物聯(lián)平臺的框架,說明了物聯(lián)網(wǎng)數(shù)據(jù)通信協(xié)議,平臺開發(fā)調試工具的使用。通過智云物聯(lián)網(wǎng)項目組網(wǎng)與測試學習,理解智能網(wǎng)關在整個物聯(lián)網(wǎng)項目中的功能作用,了解智云協(xié)議通信測試步驟。掌握智能網(wǎng)關功能需求設計,為后面的具體功能開發(fā)提供明確的設計目標。網(wǎng)絡視頻監(jiān)控Linux開發(fā)案例

5.1.6思考與拓展1、什么是物聯(lián)網(wǎng)網(wǎng)關,網(wǎng)關的功能與作用是什么?2、ZigBee網(wǎng)絡組網(wǎng)參數(shù)有哪些?第5章

智能家居網(wǎng)關Linux開發(fā)案例

5.2Linux智能網(wǎng)關設計智能家居網(wǎng)關Linux開發(fā)案例1)接入能力設計智能網(wǎng)關支持以下常見無線通信協(xié)議,如ZigBee、BLE、Wi-Fi、LoRa和LTE。2)管理能力設計網(wǎng)關實現(xiàn)子網(wǎng)內的節(jié)點的管理,如獲取節(jié)點的標識、狀態(tài)、屬性、類型等,以及遠程實現(xiàn)節(jié)點的采集、控制、診斷、升級和維護等,如圖所示。5.2.1Linux智能網(wǎng)關系統(tǒng)分析智能家居網(wǎng)關Linux開發(fā)案例3)協(xié)議轉換能力設計從不同的感知網(wǎng)絡到接入網(wǎng)絡的協(xié)議轉換、將下層的標準格式的數(shù)據(jù)統(tǒng)一封裝、保證不同的感知網(wǎng)絡的協(xié)議能夠變成統(tǒng)一的數(shù)據(jù)和信令;將上層下發(fā)的數(shù)據(jù)包解析成感知層協(xié)議可以識別的信令和控制指令。無線ZigBee、BLE、Wi-Fi、LoRa、LTE等節(jié)點的底層通信協(xié)議、數(shù)據(jù)包各不相同,在智能網(wǎng)關中最后都通過上層ZXBee數(shù)據(jù)通信協(xié)議進行處理。物聯(lián)網(wǎng)網(wǎng)關ZigBee通信原理如右圖所示。5.2.1Linux智能網(wǎng)關系統(tǒng)分析智能家居網(wǎng)關Linux開發(fā)案例1)串口通信程序設計串口的通信就是協(xié)調器與網(wǎng)關的通信過程,物聯(lián)網(wǎng)智能網(wǎng)關集成ZigBee協(xié)調器,通過串口進行通信,雙方約定的串口參數(shù)設置(波特率:38400,數(shù)據(jù)位:8bit,奇偶校驗:無,停止位:1),如圖所示。5.2.2本地服務設計智能家居網(wǎng)關Linux開發(fā)案例2)串口數(shù)據(jù)解析程序設計網(wǎng)關協(xié)議解析程序就是對串口收到的數(shù)據(jù)提取,提取出對于用戶而言必要的信息(短地址和傳感器數(shù)據(jù)),如圖所示。5.2.2本地服務設計智能家居網(wǎng)關Linux開發(fā)案例3)地址轉換程序設計ZigBee是通過動態(tài)短地址通信,每次重建網(wǎng)絡地址會變,一般可以通過設備唯一的長地址進行轉換通信,如圖所示。地址緩存就是將收到的數(shù)據(jù)提取出短地址,然后查詢出對應的長地址,然后將長短地址的對應關系緩存起來。5.2.2本地服務設計智能家居網(wǎng)關Linux開發(fā)案例4)ZigBee綜合應用程序設計ZigBee綜合測試程序基于Linux串口可以完成對傳感器數(shù)據(jù)的采集和控制,如圖5.29所示。5.2.2本地服務設計智能家居網(wǎng)關Linux開發(fā)案例串口的通信就是協(xié)調器與網(wǎng)關的通信過程,物聯(lián)網(wǎng)智能網(wǎng)關集成ZigBee協(xié)調器,通過串口進行通信,雙方約定的串口參數(shù)設置(波特率:38400,數(shù)據(jù)位:8bit,奇偶校驗:無,停止位:1),如圖所示。5.2.3協(xié)議解析服務設計

串口通信服務設計分析智能家居網(wǎng)關Linux開發(fā)案例5.2.3協(xié)議解析服務設計

串口通信服務設計分析串口數(shù)據(jù)測試程序流程圖串口讀寫智能家居網(wǎng)關Linux開發(fā)案例5.2.3協(xié)議解析服務設計

串口通信服務設計分析程序文件與函數(shù)功能列表如表所示。智能家居網(wǎng)關Linux開發(fā)案例5.2.3協(xié)議解析服務設計

串口通信服務設計分析程序文件與函數(shù)功能列表如表所示。智能家居網(wǎng)關Linux開發(fā)案例5.2.3協(xié)議解析服務設計

串口通信服務程序分析

協(xié)調器與網(wǎng)關通信協(xié)議(詳細串口通信源碼請查看文檔)協(xié)調器作為網(wǎng)關與ZigBee節(jié)點通信的中介,所以必須深刻理解協(xié)調器與網(wǎng)關的通信協(xié)議ZigBee設備組網(wǎng)后,通過協(xié)調器匯集數(shù)據(jù),協(xié)調器通過串口與上位機通信。Zstack協(xié)議棧定義了協(xié)調器與上位機(網(wǎng)關)的數(shù)據(jù)通信協(xié)議。1)串口設置波特率(38400bps),數(shù)據(jù)位(8bit),奇偶校驗(無),停止位(1)2)通信數(shù)據(jù)包格式通信數(shù)據(jù)包格式如表所示。標示幀頭長度命令數(shù)據(jù)校驗SOPLENCMDDATAFCS長度(B)112N1智能家居網(wǎng)關Linux開發(fā)案例5.2.3協(xié)議解析服務設計

串口通信服務程序分析

協(xié)調器與網(wǎng)關通信協(xié)議(詳細串口通信源碼請查看文檔)3)幀格式說明#數(shù)據(jù)幀說明:SOP:固定為0xFELEN:DATA的長度CMD:2900//上位機發(fā)送數(shù)據(jù)到協(xié)調器6900//協(xié)調器接收到正確指令后的響應幀6980//協(xié)調器發(fā)送數(shù)據(jù)到上位機4)協(xié)調器與網(wǎng)關的數(shù)據(jù)交互分析實例:

上位機向協(xié)調器發(fā)送查詢數(shù)據(jù)的指令:智能家居網(wǎng)關Linux開發(fā)案例5.2.3協(xié)議解析服務設計

協(xié)議解析服務設計分析

網(wǎng)關協(xié)議解析程序就是對串口收到的數(shù)據(jù)提取,提取出對于用戶而言必要的信息(短地址和傳感器數(shù)據(jù)),如圖所示。智能家居網(wǎng)關Linux開發(fā)案例5.2.3協(xié)議解析服務設計

協(xié)議解析服務設計分析本項目程序文件和函數(shù)說明如表所示。智能家居網(wǎng)關Linux開發(fā)案例5.2.3協(xié)議解析服務設計

協(xié)議解析服務設計分析智能家居網(wǎng)關Linux開發(fā)案例5.2.3協(xié)議解析服務設計

協(xié)議解析服務程序分析網(wǎng)關協(xié)議解析程序就是對串口收到的數(shù)據(jù)提取,提取出對于用戶而言必要的信息(短地址和傳感器數(shù)據(jù))。通信數(shù)據(jù)實例(詳細協(xié)議分析源碼請查看文檔)智能家居網(wǎng)關Linux開發(fā)案例5.2.4地址緩存服務設計

長短地址轉換概述1)長地址與短地址的概念長地址(MAC地址)MAC地址是一種是64位IEEE地址,這個64位的IEEE地址是一個全球唯一的地址,一經(jīng)分配就將跟隨設備一生。它通常由制造商或者被安裝時設置。這些地址由IEEE組織來維護和分配。短地址(ShortAddr)ShortAddr是一種16位的ZigBee網(wǎng)絡內部的網(wǎng)絡地址,這個16位網(wǎng)絡地址是當設備加入網(wǎng)絡后分配的,它在ZigBee局域網(wǎng)中是唯一的,用來在網(wǎng)絡中鑒別設備和發(fā)送數(shù)據(jù)。ZigBee節(jié)點在RFD模式下時直接使用內網(wǎng)點地址即可。2)長短地址轉換原因局域網(wǎng)內,協(xié)調器與終端和路由節(jié)點交互數(shù)據(jù)采用隨機分配的短地址,網(wǎng)關將各種節(jié)點的數(shù)據(jù)上傳到服務器時必須使用長地址,以保證地址的唯一性。服務器里只有長地址的信息,服務器控制或者查詢節(jié)點,網(wǎng)關必須將服務器發(fā)送的長地址轉換為短地址,然后去控制節(jié)點。其中長地址轉化為短地址是靠發(fā)送短地址查詢命令來完成,短地址轉換為長地址亦是如此。智能家居網(wǎng)關Linux開發(fā)案例5.2.4地址緩存服務設計

長短地址轉換概述3)長短地址查詢指令特殊數(shù)據(jù)幀說明:1)協(xié)調器給定的MAC地址,查詢網(wǎng)絡地址上位機向協(xié)調器發(fā)送查詢指令。DATA數(shù)據(jù)格式:02+NA(協(xié)調器網(wǎng)絡地址0000)+APP_CMD(0101)+APP_DATA(要查詢節(jié)點的MAC地址,8個字節(jié))協(xié)調器返回數(shù)據(jù),DATA數(shù)據(jù)格式:NA(協(xié)調器網(wǎng)絡地址0000)+APP_CMD(0101)+APP_DATA(要查詢節(jié)點的MAC地址,8個字節(jié))+NA1(返回查詢到的節(jié)點網(wǎng)絡地址,2個字節(jié))2)協(xié)調器根據(jù)給定的網(wǎng)絡地址,查詢MAC地址上位機向協(xié)調器發(fā)送查詢指令,DATA數(shù)據(jù)格式:02+NA(協(xié)調器網(wǎng)絡地址0000)+APP_CMD(0102)+APP_DATA(要查詢節(jié)點的網(wǎng)絡地址,2個字節(jié))協(xié)調器返回數(shù)據(jù),DATA數(shù)據(jù)格式:NA(協(xié)調器網(wǎng)絡地址0000)+APP_CMD(0102)+APP_DATA(要查詢節(jié)點的網(wǎng)絡地址,2個字節(jié))+NA1(返回查詢到的節(jié)點MAC地址,8個字節(jié))智能家居網(wǎng)關Linux開發(fā)案例5.2.4地址緩存服務設計

長短地址轉換概述4)地址查詢指令舉例:上位機向協(xié)調器發(fā)送查詢網(wǎng)絡地址的指令上位機收到協(xié)調器發(fā)送過來網(wǎng)絡地址的數(shù)據(jù)(更多指令舉例請查看文檔)智能家居網(wǎng)關Linux開發(fā)案例5.2.4地址緩存服務設計

地址緩存服務設計分析ZigBee是通過動態(tài)短地址通信,每次重建網(wǎng)絡地址會變,一般可以通過設備唯一的長地址進行轉換通信。局域網(wǎng)內,協(xié)調器與終端和路由節(jié)點交互數(shù)據(jù)采用隨機分配的短地址,網(wǎng)關將各種節(jié)點的數(shù)據(jù)上傳到服務器時必須使用長地址,以保證地址的唯一性。服務器里只有長地址的信息,服務器控制或者查詢節(jié)點,網(wǎng)關必須將服務器發(fā)送的長地址轉換為短地址,然后去控制節(jié)點。其中長地址轉化為短地址是靠發(fā)送短地址查詢命令來完成,短地址轉換為長地址亦是如此。地址緩存就是將收到的數(shù)據(jù)提取出短地址,然后查詢出對應的長地址,然后將長短地址的對應關系緩存起來,網(wǎng)關直接從緩存里找到長地址對應的短地址,也不需要通過串口查詢就可以找到短地址了,大大提高效率。智能家居網(wǎng)關Linux開發(fā)案例5.2.4地址緩存服務設計

地址緩存服務設計分析本項目文件和函數(shù)接口說明如表所示。智能家居網(wǎng)關Linux開發(fā)案例5.2.4地址緩存服務設計

地址緩存服務設計分析智能家居網(wǎng)關Linux開發(fā)案例5.2.4地址緩存服務設計

地址緩存服務設計分析智能家居網(wǎng)關Linux開發(fā)案例5.2.4地址緩存服務設計

長短地址轉換程序設計(詳細分析源碼請查看文檔)

地址緩存服務程序設計1)地址緩存服務地址緩存就是將收到的數(shù)據(jù)提取出短地址,然后查詢出對應的長地址,然后將長短地址的對應關系緩存起來,這樣以后收到包含短地址的數(shù)據(jù)后,就可以不通過串口查詢來轉換為長地址,進而將長地址和對應的傳感器數(shù)據(jù)傳輸?shù)椒掌魃?,這是數(shù)據(jù)的上行過程。同樣當服務器發(fā)送一個長地址和命令給網(wǎng)關,網(wǎng)關直接從緩存里找到長地址對應的短地址,也不需要通過串口查詢就可以找到短地址了,這樣就可以提高效率了。2)地址緩存關系程序設計定義地址結構體typedefstruct_a{struct_a*next;unsignedshortnet_addr;charmac[8];}addr_t;

addr_t*pAddress=NULL;//結構體變量初始化智能家居網(wǎng)關Linux開發(fā)案例ZigBee綜合測試程序基于Linux串口可以完成對傳感器數(shù)據(jù)的采集和控制,設計如圖所示。程序框架總共分為兩部分:一部分是數(shù)據(jù)的封包(打包),一部分是數(shù)據(jù)的解包。其中封包就是輸入MAC地址和對應的命令,然后通過串口發(fā)送完整的命令給節(jié)點。解包就是將串口收到的傳感器信息以MAC地址和數(shù)據(jù)的形式解析出來。5.2.5數(shù)據(jù)處理服務設計

數(shù)據(jù)處理服務設計分析智能家居網(wǎng)關Linux開發(fā)案例本項目函數(shù)接口和說明如表所示。5.2.5數(shù)據(jù)處理服務設計

數(shù)據(jù)處理服務設計分析智能家居網(wǎng)關Linux開發(fā)案例5.2.5數(shù)據(jù)處理服務設計

數(shù)據(jù)處理服務設計分析智能家居網(wǎng)關Linux開發(fā)案例5.2.5數(shù)據(jù)處理服務設計

數(shù)據(jù)處理服務設計分析智能家居網(wǎng)關Linux開發(fā)案例5.2.5數(shù)據(jù)處理服務設計

數(shù)據(jù)處理服務程序設計

數(shù)據(jù)處理服務設計分析(僅展示部分代碼,詳細分析源碼請查看文檔)封包程序設計:理解解包程序設計主要是理解以下幾個關鍵函數(shù)voidproc_user(intfd){staticintoffset=0;staticcharbuf[BUFSIZE];inti,ret;

ret=read(fd,&buf[offset],BUFSIZE-offset);if(ret<0){perror("readuart");exit(1);}offset+=ret;if(buf[offset-1]=='\n'){buf[offset-1]='\0';if(strcmp(buf,"quit")==0){gQuit=1;//退出程序return;}else{

char*pdat=strstr(buf,",");if(pdat==NULL){printf("格式錯誤\n");offset=0;return;}*pdat++='\0';intlen=strlen(buf);if(len!=23){offset=0;printf("地址格式錯誤\n");return;}if(strlen(pdat)==0){offset=0;printf("發(fā)送數(shù)據(jù)長度不能為0\n");return;}printf("%s<<<%s\n",buf,pdat);zigbee_send_data(buf,pdat,strlen(pdat));}offset=0;}}智能家居網(wǎng)關Linux開發(fā)案例5.2.6開發(fā)實踐:Linux網(wǎng)關本地服務設計

串口通信服務設計1)把實驗目錄下面的uart-test文件夾通過MobaXterm軟件拷貝到開發(fā)板的/home/zonesion目錄下。2)輸入如下命令進入本節(jié)實驗目錄,ls命令查看當前文件夾內容test@rk3399:~$cduart-test/test@rk3399:~/uart-test$lsMakefileuart.cuart.huart-testuart-test.cutil.cutil.h3)輸入make,進行編譯,查看uart-test文件是否生成test@rk3399:~/uart-test$makegcc-static-pthreaduart.cutil.cuart-test.c-ouart-testtest@rk3399:~/uart-test$lsMakefileuart.cuart.huart-testuart-test.cutil.cutil.h4)輸入命令“./uart-test”,運行該程序test@rk3399:~/uart-test$./uart-test智能家居網(wǎng)關Linux開發(fā)案例5.2.6開發(fā)實踐:Linux網(wǎng)關本地服務設計

串口通信服務設計5)會出現(xiàn)如下信息,說明連接串口通信成功。test@rk3399:~/uart-test$./uart-testzigbeeuarttestprogramv0.1uart>>>FE0A698032FE00007B44313D307D516)數(shù)據(jù)分析:1)FE:幀頭(SOP)2)OA:數(shù)據(jù)長度(LEN)3)6980:協(xié)調器發(fā)送給上位機4)32FE:短地址(網(wǎng)絡地址)5)0000:正常數(shù)據(jù)命令6)7B44313D307D:傳感器數(shù)據(jù)7)51:校驗和智能家居網(wǎng)關Linux開發(fā)案例5.2.6開發(fā)實踐:Linux網(wǎng)關本地服務設計

協(xié)議解析服務設計1)將實驗目錄下的protol-test文件通過MobaXterm軟件拷貝到開發(fā)板的/home/zonesion目錄下面。2)然后輸入如下命令進入該目錄test@rk3399:~$cdprotol-test/test@rk3399:~/protol-test$lsMakefileprotol.hprotol-test.cuart.hutil.hprotol.cprotol-testuart.cutil.c3)輸入make指令,進行編譯test@rk3399:~/protol-test$makegcc-static-pthreaduart.cutil.cprotol.cprotol-test.c-oprotol-testprotol.c:Infunction‘mk_net_data’:protol.c:70:15:warning:implicitdeclarationoffunction‘calc_fcs’[-Wimplicit-function-declaration]pkg[9+len]=calc_fcs(&pkg[1],pkg_len-2);^智能家居網(wǎng)關Linux開發(fā)案例5.2.6開發(fā)實踐:Linux網(wǎng)關本地服務設計

協(xié)議解析服務設計4)查看是否生成protol-test文件test@rk3399:~/protol-test$lsMakefileprotol.cprotol.hprotol-testprotol-test.cuart.cuart.hutil.cutil.h5)輸入如下命令,運行程序test@rk3399:~/protol-test$./protol-test6)等待20秒左右,會出現(xiàn)如圖所示信息。智能家居網(wǎng)關Linux開發(fā)案例5.2.6開發(fā)實踐:Linux網(wǎng)關本地服務設計

協(xié)議解析服務設計7)本節(jié)測試還提供了交互功能,即不單單能夠解析出數(shù)據(jù),還可以通過串口發(fā)送數(shù)據(jù)給節(jié)點,來查詢節(jié)點上對應傳感器的狀態(tài)。在開發(fā)板終端界面按下回車鍵,輸入如下信息,“9027,0000,7B4F44313D36347D”,其中“9027”要根據(jù)自己節(jié)點的短地址來填寫,然后繼續(xù)回車,會出現(xiàn)如圖所示信息:功能協(xié)議指令指令Hex數(shù)據(jù)打開繼電器{OD1=64}7B4F44313D36347D關閉繼電器{CD1=64}7B4344313D36347D繼電器通信協(xié)議表智能家居網(wǎng)關Linux開發(fā)案例5.2.6開發(fā)實踐:Linux網(wǎng)關本地服務設計

地址緩存服務設計1)將實驗目錄下面的cache-test文件通過MobaXterm軟件或者U盤拷貝到開發(fā)板的/home/zonesion目錄下面,進入本節(jié)實驗目錄。test@rk3399:~/$cdcache-test/test@rk3399:~/cache-test$lscache-addr.cMakefileprotol.huart.hutil.hzigbee.hcache-addr.hprotol.cuart.cutil.czigbee.czigbee-test.c2)輸入make指令進行編譯test@rk3399:~/cache-test$makegcc-static-pthreaduart.cutil.cprotol.czigbee.ccache-addr.czigbee-test.c-ozigbee-test3)查看是否生成cache-test文件test@rk3399:~/work/cache-test$lscache-addr.cMakefileprotol.huart.hutil.hzigbee.hzigbee-test.ccache-addr.hprotol.cuart.cutil.czigbee.czigbee-test智能家居網(wǎng)關Linux開發(fā)案例5.2.6開發(fā)實踐:Linux網(wǎng)關本地服務設計

地址緩存服務設計4)運行cache-testtest@rk3399:~/work/cache-test$./zigbee-test5)等待20秒,可以看到串口終端打印出如下信息uart>>>FE0A6980128500007B44313D307D0Aprotol>>>1258,0000,7B44313D307Dprotol<<<0000,0102,1258uart<<<FE07290002000001021285B8uart>>>FE0169000068uart>>>FE0E698000000102128500124B0015D14907A0protol>>>0000,0102,128500124B0015D14907zigbee:1285--->00:12:4B:00:15:D1:49:07智能家居網(wǎng)關Linux開發(fā)案例5.2.6開發(fā)實踐:Linux網(wǎng)關本地服務設計

地址緩存服務設計6)繼續(xù)等待20秒,等待接收下一次數(shù)據(jù),會出現(xiàn)如下信息uart>>>FE0A6980128500007B44313D307D0Aprotol>>>1285,0000,7B44313D307Dzigbee:1285--->00:12:4B:00:15:D1:49:077)接下來手動在終端輸入一個長地址,來查看對應的短地址是否被緩存。在終端輸入MAC地址,然后回車(說明:MAC地址一定要對應自己終端節(jié)點的,不要和實驗步驟的一樣。)00:12:4B:00:15:D1:49:078)可以看到串口會立即打印如下信息00:12:4B:00:15:D1:49:07correctmacaddrees:00:12:4B:00:15:D1:49:07zigbee_test:00:12:4B:00:15:D1:49:07--->1285智能家居網(wǎng)關Linux開發(fā)案例5.2.7小結學習了智能網(wǎng)關實現(xiàn)的接入能力、管理能力、協(xié)議轉換的設計,本地服務總體設計架構。通過協(xié)議解析服務分析與設計、地址緩存服務分析與設計、數(shù)據(jù)處理服務分析與設計三個部分的程序分析與實現(xiàn),學習網(wǎng)關的本地服務編程實現(xiàn)。智能家居網(wǎng)關Linux開發(fā)案例

5.2.8思考與拓展1、Linux網(wǎng)關本地服務具有哪些功能?2、描述協(xié)調器與網(wǎng)關通信協(xié)議數(shù)據(jù)包格式?第5章智能家居網(wǎng)關Linux開發(fā)案例5.3Linux網(wǎng)關遠程服務設計智能家居網(wǎng)關Linux開發(fā)案例Linux網(wǎng)關的遠程服務設計,通過TCP網(wǎng)絡服務設計、MQTT數(shù)據(jù)服務設計、Linux網(wǎng)關協(xié)議設計3個功能步驟進行設計。1)TCP網(wǎng)絡服務設計網(wǎng)關收到串口的數(shù)據(jù)后可以通過UDP或者TCP服務將傳感器的MAC地址和傳感器數(shù)據(jù)傳輸?shù)椒掌魃厦?,實現(xiàn)Zigbee數(shù)據(jù)通信的上行。這里選擇傳輸比較穩(wěn)定的TCP服務來實現(xiàn)這種上行方式,如圖所示。5.3.1遠程服務設計分析智能家居網(wǎng)關Linux開發(fā)案例2)MQTT數(shù)據(jù)服務設計MQTT數(shù)據(jù)服務設計,通過Linuxc編程mosquitto庫的調用,實現(xiàn)一個mqtt客戶端,向服務推送消息與接收處理用戶控制指令,如圖所示。5.3.1遠程服務設計分析智能家居網(wǎng)關Linux開發(fā)案例3)Linux網(wǎng)關協(xié)議設計Linux網(wǎng)關協(xié)議設計,是在TCP網(wǎng)絡服務設計的基礎上,通過TCP網(wǎng)絡編程通信,與服務器進行通信數(shù)據(jù)交互。Linux網(wǎng)關協(xié)議設計將在網(wǎng)關上建立一個TCP客戶端,連接時需要發(fā)送網(wǎng)關認證數(shù)據(jù)包,進行認證。認證通過后,數(shù)據(jù)按照ZXBee協(xié)議進行封包與解包處理。Linux網(wǎng)關協(xié)議設計框架如圖所示。5.3.1遠程服務設計分析智能家居網(wǎng)關Linux開發(fā)案例網(wǎng)關收到串口的數(shù)據(jù)后可以通過UDP或者TCP服務將傳感器的MAC地址和傳感器數(shù)據(jù)傳輸?shù)椒掌魃厦?,實現(xiàn)Zigbee數(shù)據(jù)通信的上行。這里選擇傳輸比較穩(wěn)定的TCP服務來實現(xiàn)這種上行方式。數(shù)據(jù)轉發(fā)服務設計將在網(wǎng)關上建立一個TCP服務端,然后將傳感器數(shù)據(jù)轉發(fā)到連接的客戶端,客戶端由TCP&UDP測試工具來模擬。網(wǎng)絡數(shù)據(jù)轉發(fā)服務設計框架如圖所示。數(shù)據(jù)轉發(fā)服務設計主要由兩大部分組成,一部分是網(wǎng)關(服務器)發(fā)數(shù)據(jù)給客戶端,把這個過程叫做ZigBee上行數(shù)據(jù)通信,另外一部分是發(fā)送數(shù)據(jù)給網(wǎng)關(服務器),網(wǎng)關對數(shù)據(jù)進行處理,最后發(fā)送命令給ZigBee節(jié)點,把這個過程客戶端叫做ZigBee下行數(shù)據(jù)通信。5.3.2TCP網(wǎng)絡服務設計TCP網(wǎng)絡服務設計分析智能家居網(wǎng)關Linux開發(fā)案例5.3.2TCP網(wǎng)絡服務設計TCP網(wǎng)絡服務設計分析本項目函數(shù)接口與說明如表所示(詳細函數(shù)解析請查看文檔)智能家居網(wǎng)關Linux開發(fā)案例5.3.2TCP網(wǎng)絡服務設計TCP網(wǎng)絡服務設計分析(詳細函數(shù)解析請查看文檔)智能家居網(wǎng)關Linux開發(fā)案例5.3.2TCP網(wǎng)絡服務設計TCP網(wǎng)絡服務設計分析(詳細函數(shù)解析請查看文檔)智能家居網(wǎng)關Linux開發(fā)案例5.3.3MQTT數(shù)據(jù)服務設計MQTT協(xié)議概述MQTT(消息隊列遙測傳輸)是ISO標準(ISO/IECPRF20922)下基于發(fā)布/訂閱范式的消息協(xié)議。它工作在TCP/IP協(xié)議族上,是為硬件性能低下的遠程設備以及網(wǎng)絡狀況糟糕的情況下而設計的發(fā)布/訂閱型消息協(xié)議,為此,它需要一個消息中間件。MQTT是一個基于客戶端-服務器的消息發(fā)布/訂閱傳輸協(xié)議,是一種輕量信息傳輸協(xié)議,專門為受限設備,低帶寬,高延遲或不可靠的網(wǎng)絡而設的?MQTT的設計原理是最小化網(wǎng)絡帶寬和設備資源要求。MQTT協(xié)議的底層是基于TCP/IP,它工作在TCP和IP協(xié)議層上,屬于應用層協(xié)議,在支持TCP/IP協(xié)議的機器上運行。MQTT協(xié)議為計算能力有限,且工作在低帶寬、不可靠的網(wǎng)絡的遠程傳感器和控制設備通訊而設計的協(xié)議,具有以下主要的幾項特性:1、使用發(fā)布/訂閱消息模式,提供一對多的消息發(fā)布,解除應用程序耦合;2、對負載內容屏蔽的消息傳輸;3、使用TCP/IP提供網(wǎng)絡連接;4、小型傳輸,開銷很小,協(xié)議交換最小化,以降低網(wǎng)絡流量;5、使用LastWill和Testament特性通知有關各方客戶端異常中斷的機制。LastWill:即遺言機制,用于通知同一主題下的其他設備發(fā)送遺言的設備已經(jīng)斷開了連接。Testament:遺囑機制。智能家居網(wǎng)關Linux開發(fā)案例5.3.3MQTT數(shù)據(jù)服務設計MQTT協(xié)議概述MQTT協(xié)議中的訂閱、主題、會話訂閱(Subscription):訂閱包含主題篩選器(TopicFilter)和最大服務質量(QoS)。訂閱會與一個會話(Session)關聯(lián)。一個會話可以包含多個訂閱。每一個會話中的每個訂閱都有一個不同的主題篩選器。會話(Session):每個客戶端與服務器建立連接后就是一個會話,客戶端和服務器之間有狀態(tài)交互。會話存在于一個網(wǎng)絡之間,也可能在客戶端和服務器之間跨越多個連續(xù)的網(wǎng)絡連接。主題名(TopicName):連接到一個應用程序消息的標簽,該標簽與服務器的訂閱相匹配。服務器會將消息發(fā)送給訂閱所匹配標簽的每個客戶端。主題篩選器(TopicFilter):一個對主題名通配符篩選器,在訂閱表達式中使用,表示訂閱所匹配到的多個主題。負載(Payload):消息訂閱者所具體接收的內容。智能家居網(wǎng)關Linux開發(fā)案例5.3.3MQTT數(shù)據(jù)服務設計MQTT協(xié)議概述網(wǎng)絡傳輸與應用消息MQTT會構建底層網(wǎng)絡傳輸:它將建立客戶端到服務器的連接,提供兩者之間的一個有序的、無損的、基于字節(jié)流的雙向傳輸。當應用數(shù)據(jù)通過MQTT網(wǎng)絡發(fā)送時,MQTT會把與之相關的服務質量和主題名相關連。MQTT客戶端一個使用MQTT協(xié)議的應用程序或者設備,它總是建立到服務器的網(wǎng)絡連接??蛻舳俗饔茫海?)發(fā)布其他客戶端可能會訂閱的信息;(2)訂閱其它客戶端發(fā)布的消息;(3)退訂或刪除應用程序的消息;(4)斷開與服務器連接。MQTT服務器MQTT服務器以稱為"消息代理"(Broker),可以是一個應用程序或一臺設備。它是位于消息發(fā)布者和訂閱者之間,它作用:(1)接受來自客戶的網(wǎng)絡連接;(2)接受客戶發(fā)布的應用信息;(3)處理來自客戶端的訂閱和退訂請求;(4)向訂閱的客戶轉發(fā)應用程序消息。智能家居網(wǎng)關Linux開發(fā)案例5.3.3MQTT數(shù)據(jù)服務設計MQTT協(xié)議概述網(wǎng)絡傳輸與應用消息MQTT協(xié)議中的方法MQTT協(xié)議中定義了一些方法,來于表示對確定資源所進行操作。這個資源可以代表預先存在的數(shù)據(jù)或動態(tài)生成數(shù)據(jù),這取決于服務器的實現(xiàn)。通常來說,資源指服務器上的文件或輸出。主要方法有:(1)Connect。等待與服務器建立連接。(2)Disconnect。等待MQTT客戶端完成所做的工作,并與服務器斷開TCP/IP會話。(3)Subscribe。等待完成訂閱。(4)UnSubscribe。等待服務器取消客戶端的一個或多個topics訂閱。(5)Publish。MQTT客戶端發(fā)送消息請求,發(fā)送完成后返回應用程序線程。智能家居網(wǎng)關Linux開發(fā)案例5.3.3MQTT數(shù)據(jù)服務設計MQTT協(xié)議概述網(wǎng)絡傳輸與應用消息MQTT協(xié)議數(shù)據(jù)包結構在MQTT協(xié)議中,一個MQTT數(shù)據(jù)包由:固定頭(Fixedheader)、可變頭(Variableheader)、消息體(payload)三部分構成。MQTT數(shù)據(jù)包結構如下:(1)固定頭(Fixedheader)。存在于所有MQTT數(shù)據(jù)包中,表示數(shù)據(jù)包類型及數(shù)據(jù)包的分組類標識。(2)可變頭(Variableheader)。存在于部分MQTT數(shù)據(jù)包中,數(shù)據(jù)包類型決定了可變頭是否存在及其具體內容。(3)消息體(Payload)。存在于部分MQTT數(shù)據(jù)包中,表示客戶端收到的具體內容。(MQTT通信架構圖)智能家居網(wǎng)關Linux開發(fā)案例5.3.3MQTT數(shù)據(jù)服務設計MQTT協(xié)議概述網(wǎng)絡傳輸與應用消息MQTT協(xié)議實現(xiàn)方式實現(xiàn)MQTT協(xié)議需要客戶端和服務器端通訊完成,在通訊過程中,MQTT協(xié)議中有三種身份:發(fā)布者(Publish)、代理(Broker)(服務器)、訂閱者(Subscribe)。其中,消息的發(fā)布者和訂閱者都是客戶端,消息代理是服務器,消息發(fā)布者可以同時是訂閱者。(1)發(fā)布者將消息發(fā)布至代理服務器中,消息在代理服務器中以樹的方式存儲。(2)訂閱者通過訂閱消息接受訂閱的消息,代理服務器接收到訂閱消息后將訂閱者放置在對應末端節(jié)點的下方。(3)代理根據(jù)消息的設置決定是否發(fā)送一些以前的信息,或者當發(fā)布者發(fā)布信息時,代理將信息推送到訂閱服務器。智能家居網(wǎng)關Linux開發(fā)案例5.3.3MQTT數(shù)據(jù)服務設計Mosquitto安裝與調試Mosquitto是一個開源(BSD許可證)的消息代理,是一款實現(xiàn)了消息推送協(xié)議MQTT的開源消息代理軟件,提供輕量級的,支持可發(fā)布/可訂閱的的消息推送模式,使設備對設備之間的短消息通信變得簡單,比如現(xiàn)在應用廣泛的低功耗傳感器,手機、嵌入式計算機、微型控制器等移動設備,安裝步驟如下:1、Mosquitto安裝在下述網(wǎng)址下載MQTT/files/source/#解壓tarzxfvmosquitto-x.x.x.tar.gz#進入目錄cdmosquitto-1.4.9#編譯make#安裝sudomakeinstallMosquitto功能命令如下:mosquitto–代理器主程序mosquitto.conf–配置文件mosquitto_passwd–用戶密碼管理工具mosquitto_tls–veryroughcheatsheetforhelpingwithSSL/TLSmosquitto_pub–用于發(fā)布消息的命令行客戶端mosquitto_sub–用于訂閱消息的命令行客戶端mqtt–MQTT的后臺進程libmosquitto–客戶端編譯的庫文件智能家居網(wǎng)關Linux開發(fā)案例5.3.3MQTT數(shù)據(jù)服務設計Mosquitto安裝與調試2、Mosquitto測試Mosquitto服務器安裝完成后,通過以下3個命令對服務進行測試。這3個命令需要在3個Linux命令行終端中運行。mosquitto–代理器主程序mosquitto_pub–用于發(fā)布消息的命令行客戶端mosquitto_sub–用于訂閱消息的命令行客戶端首先,在命令行終端啟動mosquiltto服務。root@zonesion:/home/mysdk/gw3399-linux/mosquitto-1.6.8#mosquitto-v1600304111:mosquittoversion1.6.8starting1600304111:Usingdefaultconfig.1600304111:Openingipv4listensocketonport1883.1600304111:Openingipv6listensocketonport1883.智能家居網(wǎng)關Linux開發(fā)案例5.3.3MQTT數(shù)據(jù)服務設計Mosquitto安裝與調試2、Mosquitto測試發(fā)布使用mosquitto_pub命令,訂閱使用mosquitto_sub命令。常用參數(shù)介紹如表所示。新建一個命令行終端,輸入命令“mosquitto_sub-h-p1883-v-ttesttopic”訂閱主題,如右圖所示。參數(shù)描述-h服務器主機,默認localhost-t指定主題-u用戶名-P密碼-i客戶端id,唯一-m發(fā)布的消息內容智能家居網(wǎng)關Linux開發(fā)案例5.3.3MQTT數(shù)據(jù)服務設計MQTT數(shù)據(jù)服務設計分析MQTT數(shù)據(jù)服務設計,通過Linuxc編程mosquitto庫的調用,實現(xiàn)一個mqtt客戶端,向服務推送消息與接收處理用戶控制指令,如圖所示。智能家居網(wǎng)關Linux開發(fā)案例5.3.3MQTT數(shù)據(jù)服務設計MQTT數(shù)據(jù)服務設計分析本項目函數(shù)接口與說明如表所示。智能家居網(wǎng)關Linux開發(fā)案例5.3.3MQTT數(shù)據(jù)服務設計MQTT數(shù)據(jù)服務設計分析本項目函數(shù)接口與說明如表所示。智能家居網(wǎng)關Linux開發(fā)案例5.3.3MQTT數(shù)據(jù)服務設計MQTT數(shù)據(jù)服務設計分析本項目函數(shù)接口與說明如表所示。智能家居網(wǎng)關Linux開發(fā)案例1)通過MobaXterm軟件將zigbee-tcp-test文件拷貝到開發(fā)板的/home/zonesion目錄下面,輸入如下命令進入實驗目錄:5.3.5開發(fā)實踐:Linux網(wǎng)關遠程服務設計TCP網(wǎng)絡服務設計test@rk3399:~/work$cdzigbee-tcp-test/test@rk3399:~/work/zigbee-tcp-test$lscache-addr.cMakefileprotol.huart.hutil.hzigbee.hcache-addr.hprotol.cuart.cutil.czigbee.czigbee-tcp-test.c2)輸入make命令進行編譯,查看是否生成目標文件test@rk3399:~/work/zigbee-tcp-test$makegcc-static-pthreaduart.cutil.cprotol.czigbee.ccache-addr.czigbee-tcp-test.c-ozigbee-tcp-testprotol.c:Infunction‘mk_net_data’:protol.c:70:15:warning:implicitdeclarationoffunction‘calc_fcs’[-Wimplicit-function-declaration]pkg[9+len]=calc_fcs(&pkg[1],pkg_len-2);^test@rk3399:~/work/zigbee-tcp-test$lscache-addr.cprotol.cuart.hzigbee.czigbee-tcp-test.ccache-addr.hprotol.hutil.czigbee.hMakefileuart.cutil.hzigbee-tcp-test智能家居網(wǎng)關Linux開發(fā)案例5.3.5開發(fā)實踐:Linux網(wǎng)關遠程服務設計TCP網(wǎng)絡服務設計3)查看網(wǎng)關以太網(wǎng)地址test@rk3399:~/work/zigbee-tcp-test$ifconfigwlan0Linkencap:以太網(wǎng)

硬件地址6c:21:a2:ec:55:ebinet地址:1廣播:55掩碼:inet6地址:fe80::38c6:ca99:8363:32b5/64Scope:LinkUPBROADCASTRUNNINGMULTICASTMTU:1500躍點數(shù):1

接收數(shù)據(jù)包:791錯誤:0丟棄:2過載:0幀數(shù):0

發(fā)送數(shù)據(jù)包:677錯誤:0丟棄:0過載:0載波:0

碰撞:0發(fā)送隊列長度:1000

接收字節(jié):118235(118.2KB)發(fā)送字節(jié):132562(132.5KB)test@rk3399:~/work/zigbee-tcp-test$./zigbee-tcp-testzigbeezigbeetestprogramv0.1

發(fā)送數(shù)據(jù)格式MAC地址,數(shù)據(jù)

例如:00:12:4B:00:06:1B:5F:BB,{A0=?}

tcpserverlistenport600004)輸入如下命令運行測試程序,終端打印出如下信息:智能家居網(wǎng)關Linux開發(fā)案例5.3.5開發(fā)實踐:Linux網(wǎng)關遠程服務設計TCP網(wǎng)絡服務設計5)打開TCP測試工具,會出現(xiàn)如左圖所示界面6)然后在發(fā)送區(qū)輸入如下信息“00:12:4B:00:15:D1:49:7A,{OD1=64,D1=?}”,并點擊發(fā)送按鈕,注意MAC地址必須是對應自己控制類節(jié)點的。(注意,如果節(jié)點原來狀態(tài)是D1=64,需要先發(fā)送命令00:12:4B:00:15:D1:49:7A,{CD1=64,D1=?},關閉繼電器1會看到接收區(qū)立即出現(xiàn)一行新的應答信息“00:12:4B:00:15:D1:49:7A,{D1=64}”,說明數(shù)據(jù)的下行和上行都成功了。(如右圖)智能家居網(wǎng)關Linux開發(fā)案例5.3.5開發(fā)實踐:Linux網(wǎng)關遠程服務設計 Linux網(wǎng)關協(xié)議設計1)啟動mqtt服務器中的mosquitto服務2)啟動網(wǎng)關消息發(fā)布程序3)服務器端訂閱主題4)Android端mqtt服務測試測試1測試3測試2測試4智能家居網(wǎng)關Linux開發(fā)案例5.3.5開發(fā)實踐:Linux網(wǎng)關遠程服務設計Linux網(wǎng)關協(xié)議設計1)將zigbee-tcp_send文件夾通過MobaXtrem軟件拷貝到開發(fā)板的/home/zonesion/zcloud目錄下面,進入目錄zigbee-zhiyun,并查看當前目錄文件2)測試程序編譯運行3)協(xié)議測試打開調試工具ZCloudTools,選擇實時數(shù)據(jù)測試工具,輸入程序中設置的ID\KEY,點擊連接按鈕,等待30s左右會顯示接收到的節(jié)點數(shù)據(jù),協(xié)議測試如表所示。(詳細命令步驟解析請查看文檔)采集類節(jié)點數(shù)據(jù)00:12:4B:00:15:D3:57:B4{A0=26.5,A1=33.3,A2=292.5,A3=112,A4=1011.9,A5=0,A6=0.0,D1=O}控制類節(jié)點數(shù)據(jù)00:12:4B:00:15:D1:49:7A{D1=0}安防類節(jié)點數(shù)據(jù)00:12:4B:00:15:D1:35:C1{A0=0,A4=0,A5=0,D1=0}智能家居網(wǎng)關Linux開發(fā)案例5.3.5開發(fā)實踐:Linux網(wǎng)關遠程服務設計Linux網(wǎng)關協(xié)議設計實時數(shù)據(jù)測試如左圖所示。在地址信息輸入框分別輸入3個節(jié)點MAC地址,數(shù)據(jù)輸入框輸入?yún)f(xié)議命令{TYPE=?},可以查詢節(jié)點的類型,如右圖所示。(詳細命令步驟解析請查看文檔)智能家居網(wǎng)關Linux開發(fā)案例5.3.6小結學習了智能網(wǎng)關實現(xiàn)的遠程服務設計架構,MQTT協(xié)議的基本概念,Mosquitto安裝與測試。通過TCP網(wǎng)絡服務分析與設計、MQTT數(shù)據(jù)服務分析與設計、Linux網(wǎng)關協(xié)議分析與設計三個部分的程序分析與實現(xiàn),完成網(wǎng)關的遠程服務編程實現(xiàn)。智能家居網(wǎng)關Linux開發(fā)案例

5.3.7思考與拓展1、什么是MQTT協(xié)議,本協(xié)議有什么特性?2、描述MQTT協(xié)議實現(xiàn)方式?3、TCP網(wǎng)絡服務設計、MQTT數(shù)據(jù)服務設計與Linux網(wǎng)關協(xié)議設計這3個功能設計有什么區(qū)別與聯(lián)系??第6章智能車牌識別Linux開發(fā)案例智能車牌識別Linux開發(fā)案例本章分析Linux技術在智能家居網(wǎng)關中的應用,共分3個模塊:1.系統(tǒng)總體設計與OpenCV開發(fā)框架:先進行系統(tǒng)總體設計分析,簡述OpenCV技術,分析OpenCV開發(fā)環(huán)境和OpenCV常用接口,實現(xiàn)OpenCV視頻流采集。2.車牌識別功能開發(fā):學習車牌識別原理,分析卷積神經(jīng)網(wǎng)絡技術、車牌識別開源庫,進行車牌識別功能開發(fā),實現(xiàn)視頻車牌識別。3.車牌識別管理功能開發(fā):學習Flask應用框架,進行Flask安裝測試和Flask應用分析,實現(xiàn)Flask視頻車牌識別。第6章智能車牌識別Linux開發(fā)案例

6.1系統(tǒng)總體設計與OpenCV開發(fā)框架智能車牌識別Linux開發(fā)案例智能車牌識別系統(tǒng)是結合數(shù)字圖像處理技術,計算機視覺和模式識別為一體的綜合系統(tǒng),包含對車牌圖像進行預處理,車牌區(qū)域定位,字符分割以及字符識別等功能。本項目通過運用基于OpenCV計算機視覺庫,采用HyperLPR基于深度學習的高性能中文車牌庫,大大降低了系統(tǒng)實現(xiàn)復雜度,實現(xiàn)了快速準確識別中文車牌號碼。功能需求如表所示。6.1.1系統(tǒng)總體設計分析

系統(tǒng)需求分析功能功能說明視頻流采集功能基于OpenCV采集視頻流中文車牌識別功能基于HyperLPR高性能中文車牌庫對圖片、視頻中車牌進行識別WEB用戶界面功能基于Flask應用框架顯示視頻流與識別結果智能車牌識別Linux開發(fā)案例本項目的硬件主要邊緣計算網(wǎng)關與高清攝像頭構成。邊緣計算網(wǎng)關連接高清攝像頭通過OpenCV采集視頻數(shù)據(jù),實時采視頻數(shù)據(jù)再通過HyperLPR庫對視頻流中的中文車牌進行識別,PC端的WEB管理界面可實時顯示OpenCV采集的視頻流與識別結果,硬件結構框如左圖所示。中文車牌識別系統(tǒng),其軟件模塊主要由OpenCV庫,HyperLPR庫、Flask服務軟件、PC端Web管理軟件構成,項目主要開發(fā)語言為Python語言,軟件總體結構框如右圖所示。6.1.1系統(tǒng)總體設計分析

系統(tǒng)總體設計智能車牌識別Linux開發(fā)案例6.1.2OpenCV簡介OpenCV(OpenSourceComputerVisionLibrary)開源計算機視覺庫。OpenCV是一個基于BSD許可(開源)發(fā)行的跨平臺計算機視覺和機器學習軟件庫,可以運行在Linux、Windows、Android和MacOS操作系統(tǒng)上。它輕量級而且高效,同時提供了有C++,Python,Java和MATLAB等語言的接口,實現(xiàn)了圖像處理和計算機視覺方面的很多通用算法。OpenCV的結構共分為五個部分,分別是圖像處理和視覺算法(CV)、機器學習庫(ML)、圖像和視頻輸入/輸出庫(HighGUI)、基本結構和算法,XML支持,繪圖函數(shù)(CXCORE)以及CVAUx模塊,其中前4個模塊結構如圖所示。CV圖像與視覺算法ML統(tǒng)計分析器HighGUI圖像與視頻輸入輸出CXCORE基本結構和算法、XML支持、繪圖函數(shù)智能車牌識別Linux開發(fā)案例6.1.3OpenCV開發(fā)環(huán)境(環(huán)境配置詳細請查看文檔)6.1.4

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論