楊 榮, 王明偉, 張春梅
(西安交通大學 實踐教學中心,西安 710049)
智能家居網(wǎng)絡[1]中,網(wǎng)關是其核心,系統(tǒng)通過智能網(wǎng)關實現(xiàn)信息的采集、智能終端的集中控制、局域網(wǎng)與因特網(wǎng)的連接、遠程控制、協(xié)同工作等功能??傮w上,網(wǎng)關在智能家居網(wǎng)絡中的兩大功能為控制樞紐和無線路由:一方面負責無線智能終端信息的采集和控制;另一方面具備無線路由的功能,實現(xiàn)了高速率數(shù)據(jù)接入。
目前智能家居普遍使用的無線網(wǎng)絡標準是無線寬帶[2](Wireless Fidelity,Wi-Fi)、紫蜂協(xié)議[3](ZigBee)、藍牙[4]和1 GHz頻段以下的433 MHz[5]無線透傳,但上述各方式都存在一定的問題。WiFi傳輸速率高但能耗較大,同時也并不適合自組織網(wǎng)絡組網(wǎng);ZigBee適用于自組織網(wǎng)絡,但其傳輸速率又不如WiFi;在穿透能力方面,藍牙和ZigBee的傳輸穿透能力則弱于433 MHz的傳輸。傳統(tǒng)的智能家居網(wǎng)關采用其中一種網(wǎng)絡協(xié)議作為其組網(wǎng)協(xié)議,如目前的家庭無線局域網(wǎng)是使用WiFi無線路由器作為網(wǎng)關。而智能家居網(wǎng)關所要控制的無線智能終端多種多樣,并遵循多種通信協(xié)議類型。如果仍使用單一的協(xié)議來組建智能家居網(wǎng)絡則很難發(fā)揮網(wǎng)絡的最大效益,也不利于智能家居網(wǎng)絡的拓展。有鑒于此,本文開發(fā)了一種具有多模式傳輸協(xié)議的智能家居網(wǎng)關,支持多種傳輸協(xié)議,并實現(xiàn)了局域網(wǎng)和因特網(wǎng)的無縫連接,具有很好的適應性和拓展性。
該智能網(wǎng)關的設計以樹莓派板卡為核心,通過其豐富的通用輸入/輸出(General Purpose Input Output,GPIO)接口和通用串行總線(Universal Serial Bus,USB)接口,搭載WiFi網(wǎng)卡、ZigBee傳輸模塊、433 MHz傳輸模塊,并通過RJ45接口與因特網(wǎng)進行連接,從而實現(xiàn)智能家居網(wǎng)絡的組建和與因特網(wǎng)的連接。網(wǎng)絡結構和智能網(wǎng)關硬件設計如圖1、2所示。
圖1 智能家居網(wǎng)絡結構圖
圖2 多模傳輸?shù)闹悄芫W(wǎng)關硬件設計圖
該智能網(wǎng)關功能如下:
(1)利用ZigBee協(xié)議與支持ZigBee協(xié)議的智能終端形成自組織網(wǎng)絡,進行數(shù)據(jù)采集和反饋控制。
(2)利用433 MHz低頻傳輸模塊實現(xiàn)較遠距離或不同房間內智能終端的組網(wǎng)。
(3)利用Wi-Fi協(xié)議實現(xiàn)無線訪問接入點(Access Point,AP)功能,與手機、無線機頂盒、無線IP攝像頭等設備進行通訊,實現(xiàn)高速率數(shù)據(jù)傳輸。
(4)實現(xiàn)室內自組織網(wǎng)絡與因特網(wǎng)的連接,便于遠程監(jiān)控。
(1) 處理器。采用基于ARM11內核的樹莓派板卡[6]。該板卡是一款基于Linux操作系統(tǒng)[7]的卡片電腦,具有體積小巧(信用卡大小)、集成度高、低功耗、開源、接口豐富等特點,為多功能智能設備和一般類型應用開發(fā)提供了低價格、低功耗、高性能小型微控制器的解決方案。
(2) WiFi通信模塊。采用RTL8188CUS芯片的無線網(wǎng)卡,該網(wǎng)卡通過USB與樹莓派進行連接,并通過系統(tǒng)配置,實現(xiàn)無線熱點功能。
(3) ZigBee通信模塊。ZigBee技術作為一種結構簡單、低功耗、低數(shù)據(jù)速率、低成本和高可靠性的雙向無線網(wǎng)絡通信技術,使用的頻段為2.4 GHz、868 MHz(歐洲)及915 MHz(美國), 均為免執(zhí)照頻段,便于實現(xiàn)低功耗的自組織網(wǎng)絡[8]。它可以嵌入各種設備中,同時支持地理定位功能。本方案采用基于CC2520芯片的ZigBee模塊[9-10],利用樹莓派的串口進行連接,實現(xiàn)數(shù)據(jù)傳輸。
(4) 433 MHz通信模塊。采用HC11無線傳輸模塊。它主要由一個單片機和一個射頻收發(fā)芯片構成,其中射頻收發(fā)芯片為TI公司的CC1101。該模塊利用51單片機實現(xiàn)協(xié)議棧的控制程序,并通過GPIO接口與樹莓派進行通信。
(5) DHMI接口顯示模塊。為了便于人機交互,以對智能網(wǎng)關進行個性化設置,該智能網(wǎng)關搭載DHMI接口,并連接76.2 mm(3 in)觸摸顯示屏,方便對智能網(wǎng)關進行設置。
采用嵌入式Linux操作系統(tǒng)進行開發(fā) ,主要包括以下3個部分。
設計利用樹莓派搭載的Raspbian系統(tǒng)進行開發(fā),該系統(tǒng)基于Linux內核并開源,便于進行系統(tǒng)開發(fā)。由于Raspbian系統(tǒng)針對樹莓派編譯了相應的bootloader,因此開發(fā)人員無需對bootloader進行配置。具體配置時,從官網(wǎng)下載最新的鏡像文件,將內存卡選擇TF32格式格式化,并用Win32DiskImager將鏡像文件燒錄到SD卡或TF卡中。將內存卡插入樹莓派內存卡槽中,即可以運行操作系統(tǒng)。
(1)基于傳輸控制協(xié)議(Transmission Control Protocol,TCP)的WiFi傳輸線程設計。流程如圖3所示,智能網(wǎng)關端線程開始時首先設置服務器的地址信息,尤其是設置提供TCP[11]連接的端口號,隨后創(chuàng)建TCP連接要用到的套接字(Socket),再將Socket與端口綁定。綁定端口號后調用listen()函數(shù)監(jiān)聽端口,此時線程阻塞直到有TCP客戶端發(fā)出建立連接請求。當收到建立連接請求時線程繼續(xù)執(zhí)行,調用accept()函數(shù)接收連接請求建立連接,同時創(chuàng)建一個新的Socket和一個新的線程用以當前連接,原Socket和原線程回到listen()函數(shù)等待下一個連接請求。TCP連接的3次握手就在listen()函數(shù)和accept()函數(shù)之間完成。TCP連接建立后,網(wǎng)關端的線程負責接收保存并處理數(shù)據(jù),同時當用戶通過指令觸發(fā)網(wǎng)關端向終端發(fā)送停止命令后,網(wǎng)關端線程退出[12]。
圖3 基于TCP協(xié)議的WiFi傳輸線程設計
(2)ZigBee協(xié)議傳輸線程設計。Zigbee傳輸模式的實現(xiàn)基于CC2520射頻收發(fā)器,但為了能更好地根據(jù)需求使用CC2520,通過直接在樹莓派編程驅動CC2520,實現(xiàn)數(shù)據(jù)收發(fā)功能,并在此基礎上實現(xiàn)載波偵聽多路訪問(Carrier Sense Multiple Access,CSMA)。網(wǎng)關端初始時與終端一樣,需要設置CC2520的一系列參數(shù),隨后進入接收模式,等待接收終端發(fā)來的數(shù)據(jù),同時等待用戶請求發(fā)送命令。當收到終端發(fā)來的數(shù)據(jù)幀,并通過循環(huán)冗余校驗(Cyclic Redundancy Check,CRC)后,網(wǎng)關端給終端回復確認字符(Acknowledgement,ACK)。同時回到接收數(shù)據(jù)等待發(fā)送命令模式。若用戶請求停止,網(wǎng)關端發(fā)送停止命令,并等待終端回復ACK,沒有收到ACK則重新發(fā)送,在多次發(fā)送都沒有收到ACK的情況下網(wǎng)關端提示用戶發(fā)送停止命令沒有響應,同時退出線程。具體如圖4所示。
圖4 基于ZigBee協(xié)議傳輸線程設計
(3)基于HC11模塊傳輸線程設計。如圖5所示,網(wǎng)關端線程運行后首先需要打開并設置UART口的波特率,默認值為9 600。隨后通過樹莓派的GPIO[13]將HC11的設置引腳拉低,進入設置模式。進入設置模式后可通過AT指令來設置HC11的信道、工作模式、波特率等。工作流程如圖5所示。
圖5 基于HC11模塊傳輸線程設計
(4)基于Linux下多線程編程。本文中多傳輸模式智能網(wǎng)關的軟件底層開發(fā)為一個多傳輸模式進程。該進程中主要包含3個線程:TPC、ZigBee、433 MHz。這3個線程可以共享資源,例如它們可以發(fā)送同一個緩存區(qū)中的數(shù)據(jù),或者通過一個命令同時觸發(fā)多種傳輸模式發(fā)送同一數(shù)據(jù),或者通過一個命令觸發(fā)多種傳輸模式發(fā)送多個數(shù)據(jù)等。因為線程的共享特性,使得同一個進程中的多個線程可共享各種資源,這些線程通過競爭方式獲得這些資源。為了防止多個線程訪問資源的不一致性,多線程編程的一個重要任務就是控制好線程的同步。例如多種傳輸模式正在使用同一接收緩存區(qū)接收數(shù)據(jù),有數(shù)據(jù)同時到來時多個線程會同時將數(shù)據(jù)寫入同一內存,最終將導致數(shù)據(jù)錯誤和丟失。這時就需要對線程進行同步,以確保它們在訪問該變量時,可以唯一地修改該變量并使它生效。線程同步有3種常用機制:互斥鎖[14](mutex)、讀寫鎖[15](rwlock)和條件變量(cond)。在多模智能網(wǎng)關的軟件實現(xiàn)中,主要用到互斥鎖進行線程同步,具體如圖6所示。
圖6 基于Linux下多線程編程
圖7所示為多模智能網(wǎng)關的原理模型機,圖中主板為樹莓派板卡。紅色線圈標注的為WiFi通信模塊,藍色線圈標注的為ZigBee模塊,采用CC2520射頻芯片。圖中,綠色線圈標注的為433 MHz通信模塊。各個模塊利用GPIO或串口與樹莓派板卡進行連接和通信。
如圖8所示,程序啟動運行后智能網(wǎng)關(Sink端節(jié)點)的各個線程啟動并掛起等待接收數(shù)據(jù),同時等待用戶請求發(fā)送停止命令。智能終端(Sensor端節(jié)點)各個線程啟動并掛起等待數(shù)據(jù)產生,同時等待接收從Sink端發(fā)送來的命令。其中CC2520代表ZigBee模塊。
圖7 多模智能網(wǎng)關的原理模型機
圖8 智能網(wǎng)關程序執(zhí)行后等待數(shù)據(jù)產生
圖9(a)~(c)分別為ZigBee傳輸模式、433M傳輸模式和WiFi傳輸模式的運行效果圖。每張圖的中間為Sink節(jié)點的終端界面,兩邊分別為Sensor節(jié)點的終端界面。在程序啟動后,Sensor節(jié)點程序檢測到數(shù)據(jù)產生則發(fā)送數(shù)據(jù)包,Sink節(jié)點接收到數(shù)據(jù)后立即在終端界面上將所接收到的數(shù)據(jù)包打印出來。
(a) ZigBee傳輸模式效果圖
(b) 433M傳輸模式效果圖
(c) WiFi傳輸模式效果圖
本文通過比較當前智能家居網(wǎng)絡中常用的傳輸協(xié)議的優(yōu)缺點,提出一種以樹莓派板卡為核心,開發(fā)多模傳輸協(xié)議的智能家居網(wǎng)關來組建智能家居網(wǎng)絡的方案,并開發(fā)出了樣機。該網(wǎng)關功能完備,連接簡單,遵循多種無線傳輸協(xié)議,適用性強,具有廣泛的應用價值。