梁榮龍+黃同成
摘 要:設(shè)計(jì)一個(gè)基于ZigBee無(wú)線(xiàn)通信技術(shù)的家電微信控制系統(tǒng)。該系統(tǒng)組網(wǎng)方便,將嵌有無(wú)線(xiàn)傳感器的家居、家電同互聯(lián)網(wǎng)相連,可實(shí)現(xiàn)遠(yuǎn)程控制,提供舒適、方便和人性化的智能家居環(huán)境。闡述了系統(tǒng)的設(shè)計(jì)原則、模型分析和關(guān)鍵技術(shù)實(shí)現(xiàn)。
關(guān)鍵詞:ZigBee技術(shù);嵌入式開(kāi)發(fā);微信公眾平臺(tái);智能家居
DOIDOI:10.11907/rjdk.171345
中圖分類(lèi)號(hào):TP319
文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào)文章編號(hào):1672-7800(2017)008-0069-04
0 引言
智能家居行業(yè)近幾年來(lái)獲得了迅速發(fā)展,中投顧問(wèn)發(fā)布的《2016-2020年中國(guó)智能家居市場(chǎng)投資分析及前景預(yù)測(cè)報(bào)告》顯示,智能家居產(chǎn)值2010年為50億元,2014年上升至1 600億元,2015年達(dá)到約2 300億元,到2020年整個(gè)智能家居產(chǎn)值將突破萬(wàn)億元。但是目前大多數(shù)家居控制系統(tǒng)只能通過(guò)相應(yīng)的APP使用,并且只能在局域網(wǎng)中對(duì)家居進(jìn)行控制,無(wú)法滿(mǎn)足人們希望隨時(shí)隨地方便快捷地控制家電的需求[1]。而微信是人們使用最多的一款A(yù)PP,如果把微信公眾平臺(tái)引入到智能家居控制中,用戶(hù)無(wú)論使用哪種操作系統(tǒng)的手持設(shè)備,只要使用微信客戶(hù)端關(guān)注并綁定一臺(tái)智能設(shè)備,即可通過(guò)微信完成對(duì)設(shè)備的控制。本文提出一種基于ZigBee協(xié)議[2]、通過(guò)微信客戶(hù)端進(jìn)行控制的智能家居控制系統(tǒng)設(shè)計(jì)方案。
1 系統(tǒng)功能設(shè)計(jì)
基于ZigBee技術(shù)以及微信控制的智能家電系統(tǒng)主要借助微信公眾平臺(tái)提供的數(shù)據(jù)傳輸、消息推送等服務(wù),搭建云服務(wù)器,對(duì)接微信提供的數(shù)據(jù)接口,同時(shí)在Web網(wǎng)頁(yè)內(nèi)擴(kuò)展操作方式。
系統(tǒng)控制流程如圖1所示。在微信公眾平臺(tái)上注冊(cè)公眾賬號(hào),基于該公眾號(hào)信息開(kāi)發(fā)云服務(wù)器,并通過(guò)微信公眾平臺(tái)API與微信公眾平臺(tái)進(jìn)行數(shù)據(jù)交互,即可處理手機(jī)端向微信公眾號(hào)發(fā)送的控制指令并作相應(yīng)處理。另外,云服務(wù)器創(chuàng)建了一個(gè)Socket服務(wù)端,讓部署在家庭中的WiFi模塊可以通過(guò)Socket連接到云服務(wù)器上,獲取控制指令消息,再通過(guò)串口轉(zhuǎn)發(fā)到ZiGBee協(xié)調(diào)器;ZiGBee協(xié)調(diào)器通過(guò)ZiGBee網(wǎng)絡(luò)與各ZiGBee節(jié)點(diǎn)進(jìn)行廣播通信,節(jié)點(diǎn)通過(guò)點(diǎn)播將結(jié)果返回給協(xié)調(diào)器;協(xié)調(diào)器再通過(guò)串口發(fā)送到WiFi模塊,WiFi模塊通過(guò)Socket發(fā)送到云服務(wù)器;云服務(wù)器通過(guò)微信公眾平臺(tái)消息接口把結(jié)果返回并展示給手機(jī)端用戶(hù)。
用戶(hù)發(fā)送文本消息通過(guò)驗(yàn)證綁定設(shè)備后,即可在微信公眾號(hào)內(nèi)部通過(guò)點(diǎn)擊自定義菜單來(lái)控制設(shè)備。在此之前,需要在微信公眾號(hào)注冊(cè)以獲得賬號(hào)信息及填寫(xiě)接口配置信息,如圖2所示。在通過(guò)認(rèn)證后,才能接受微信推送。開(kāi)發(fā)者提交驗(yàn)證申請(qǐng)時(shí),微信服務(wù)器發(fā)送GET請(qǐng)求到填寫(xiě)的URL上(見(jiàn)圖2示例中的doPost接口)。該請(qǐng)求攜帶的參數(shù)為:signature、timestamp、nonce、echostr,開(kāi)發(fā)者通過(guò)對(duì)簽名(即signature,該參數(shù)結(jié)合了開(kāi)發(fā)者填寫(xiě)的token,見(jiàn)圖2示例中的“weixinValidation”參數(shù)和請(qǐng)求中的timestamp參數(shù)、nonce參數(shù))的校驗(yàn),判斷該請(qǐng)求是否來(lái)自微信服務(wù)器。應(yīng)用服務(wù)器驗(yàn)證通過(guò)后,需要將echostr參數(shù)反饋給微信服務(wù)器,從而接入生效,成為開(kāi)發(fā)者。
有了以上信息后,即可開(kāi)發(fā)微信服務(wù)器響應(yīng)程序,并將響應(yīng)程序部署到tomcat下運(yùn)行。本系統(tǒng)使用微信推送的消息主要包括[3]:①自定義菜單事件。微信公眾平臺(tái)提供自定義菜單服務(wù),開(kāi)發(fā)者根據(jù)系統(tǒng)需求上傳一個(gè)JSON格式數(shù)據(jù)到微信提供的“自定義菜單創(chuàng)建接口”。本系統(tǒng)創(chuàng)建了一種菜單類(lèi)型——click菜單類(lèi)型,用戶(hù)點(diǎn)擊click類(lèi)型按鈕后,微信服務(wù)器會(huì)通過(guò)消息接口推送消息類(lèi)型為event的結(jié)構(gòu)給開(kāi)發(fā)者[4];②普通文本消息。該接口主要用于用戶(hù)驗(yàn)證并綁定設(shè)備時(shí),微信用戶(hù)給公眾號(hào)發(fā)送消息,微信服務(wù)器將消息內(nèi)容以XML格式發(fā)送到開(kāi)發(fā)者填寫(xiě)的URL上[5]。如用戶(hù)發(fā)送“注冊(cè):lisi2017”,應(yīng)用服務(wù)器則根據(jù)消息格式驗(yàn)證并綁定相應(yīng)設(shè)備。
2 關(guān)鍵技術(shù)及系統(tǒng)實(shí)現(xiàn)
2.1 關(guān)鍵技術(shù)
2.1.1 ZigBee技術(shù)
ZigBee無(wú)線(xiàn)通信技術(shù)是一種廣泛應(yīng)用于遠(yuǎn)程控制和工業(yè)控制的技術(shù)。其中,ZigBee的2.4G赫茲、915M赫茲和868M赫茲是目前為止應(yīng)用最多的。它們的傳遞速度分別為:250Kbits、40Kpbs和20Kpbs,且有效范圍為10~100m。為了更好地保護(hù)數(shù)據(jù)安全,ZigBee設(shè)置了3個(gè)不同的安全等級(jí),用戶(hù)可以根據(jù)自身的使用情況進(jìn)行選擇。另外,ZigBee的嵌入式技術(shù)是其它無(wú)線(xiàn)設(shè)備很少具備的,還集成了其它無(wú)線(xiàn)設(shè)備成本低、功耗低的優(yōu)點(diǎn),因此其更加受到工業(yè)領(lǐng)域的青睞[6]。
與其它無(wú)線(xiàn)通信技術(shù)相比,ZigBee技術(shù)有以下優(yōu)勢(shì):
(1)廉價(jià)性。ZigBee使用的芯片價(jià)格僅在兩美元左右,而且技術(shù)免協(xié)議專(zhuān)利費(fèi)。
(2)功率消耗低。因?yàn)槠洫?dú)特的待機(jī)模式,使兩節(jié)五號(hào)電池可在一個(gè)節(jié)點(diǎn)下使用兩年之久。
(3)速率低。ZigBee在較低速率環(huán)境下工作,且其在不同頻帶間可以提供不同的數(shù)據(jù)吞吐率,用于滿(mǎn)足不同速率傳送數(shù)據(jù)的需要。
(4)高效性。為了節(jié)省功耗,不同的無(wú)線(xiàn)設(shè)備均設(shè)置了不同的休眠模式。其中WiFi休眠至工作模式需要3s,藍(lán)牙需消耗3~10s,而ZigBee僅需15ms,其從節(jié)點(diǎn)連接到網(wǎng)絡(luò)也僅需要30ms。
(5)數(shù)據(jù)傳輸量大。ZigBee可使用樹(shù)狀、星狀和網(wǎng)狀網(wǎng)絡(luò)構(gòu)造,通過(guò)一個(gè)主要節(jié)點(diǎn)對(duì)其它節(jié)點(diǎn)進(jìn)行集中管理。一個(gè)主節(jié)點(diǎn)最多可管理254個(gè)子節(jié)點(diǎn),同時(shí)主節(jié)點(diǎn)還可由上一層網(wǎng)絡(luò)節(jié)點(diǎn)進(jìn)行管理,最多可組成65 000個(gè)節(jié)點(diǎn)的大型網(wǎng)絡(luò)。
(6)安全性高。ZigBee為適應(yīng)不同安全要求,設(shè)計(jì)了三級(jí)安全模式,其中無(wú)安全設(shè)定、使用訪(fǎng)問(wèn)控制列表為防止非法獲取數(shù)據(jù)的基礎(chǔ)模式,而對(duì)稱(chēng)密碼為釆用高級(jí)加密標(biāo)準(zhǔn)的高級(jí)安全設(shè)置。endprint
2.1.2 微信公眾平臺(tái)
微信公眾平臺(tái)是目前移動(dòng)互聯(lián)網(wǎng)上最受關(guān)注的平臺(tái)之一,企業(yè)也可以通過(guò)公眾號(hào)進(jìn)行有效的品牌營(yíng)銷(xiāo)。通過(guò)公眾平臺(tái)可將生活服務(wù)、商戶(hù)、大眾媒體等全部整合起來(lái)。2013年11月,由海爾、騰訊聯(lián)合推出的應(yīng)用微信技術(shù)的家電——天樽空調(diào),開(kāi)創(chuàng)了家電領(lǐng)域運(yùn)用微信控制電器的先例。2013年12月23日,互聯(lián)網(wǎng)電視運(yùn)營(yíng)商未來(lái)電視、電子消費(fèi)生產(chǎn)商創(chuàng)維與騰訊聯(lián)合打造的“微信電視”在北京發(fā)布。本文實(shí)現(xiàn)了一種新的智能空調(diào)使用方式,借助微信公眾平臺(tái)的消息推送功能、微信公眾號(hào)具有的Web網(wǎng)頁(yè)擴(kuò)展功能和開(kāi)源的sip協(xié)議(會(huì)話(huà)發(fā)起協(xié)議),實(shí)現(xiàn)了一款在微信公眾號(hào)內(nèi)部和嵌入的Web網(wǎng)頁(yè)里完成智能空調(diào)控制的系統(tǒng)[7-8]。用戶(hù)無(wú)需下載APP,即可以實(shí)現(xiàn)與設(shè)備在微信內(nèi)聊天式的雙向互動(dòng)。用戶(hù)只需要在智能終端上安裝一個(gè)微信客戶(hù)端,然后關(guān)注該智能控制公眾號(hào)后,即可實(shí)現(xiàn)對(duì)空調(diào)的控制。
2.2 系統(tǒng)框架及開(kāi)發(fā)環(huán)境搭建
2.2.1 應(yīng)用服務(wù)器開(kāi)發(fā)環(huán)境
本系統(tǒng)采用Java開(kāi)發(fā)應(yīng)用服務(wù)器,使用Eclipse作為開(kāi)發(fā)工具,可以很方便地通過(guò)搭建servlet來(lái)實(shí)現(xiàn)http服務(wù),開(kāi)發(fā)Java項(xiàng)目[9-13]。
為了運(yùn)行Java程序,需要安裝JDK,Java通過(guò)JVM實(shí)現(xiàn)跨平臺(tái)運(yùn)行,JVM包含在JDK中。安裝好JDK后即可運(yùn)行Eclipse,新建一個(gè)Maven project,選擇maven-archetype-webapp原型,填寫(xiě)Group Id以及Artifact Id,按照提示完成新建。
2.2.2 應(yīng)用服務(wù)器Tomcat
項(xiàng)目完成后要通過(guò)應(yīng)用服務(wù)器進(jìn)行發(fā)布,本文采用Apache Tomcat服務(wù)器[14]。Tomcat是一款由Apache、Sun等公司開(kāi)發(fā)的開(kāi)源軟件。Tomcat中部署的應(yīng)用程序是一個(gè)WAR(Web Archive)文件。Tomcat的目錄結(jié)構(gòu)如圖3所示。
將項(xiàng)目war包復(fù)制到webapps文件夾下,然后啟動(dòng)Tomcat即可。需要注意的是,微信公眾平臺(tái)要求應(yīng)用服務(wù)器必須在80端口接收數(shù)據(jù),所以需要將Tomcat默認(rèn)的服務(wù)端口8080修改為80端口。修改conf文件夾下的server.xml文件,將其中Connector的port修改為80,如圖4所示。
現(xiàn)在即可通過(guò)Tomcat發(fā)布已經(jīng)寫(xiě)好的項(xiàng)目了。更新war包,先刪除Tomcat目錄下的work/Catalina文件夾。因?yàn)檫@個(gè)文件夾中保留有項(xiàng)目的緩存,若不清理該文件夾,有可能出現(xiàn)代碼不更新的情況。
2.2.3 Spring框架分析
Spring框架為POJO(Plain Old Java Object,簡(jiǎn)單Java對(duì)象)提供的各種服務(wù)共同組成了Spring的生命之樹(shù)[15],如圖5所示。組成整個(gè)Spring框架的各種服務(wù)實(shí)現(xiàn)被劃分到多個(gè)相互獨(dú)立卻又相互依賴(lài)的模塊當(dāng)中。整個(gè)Spring框架構(gòu)建在Core核心模塊之上,它是整個(gè)框架的基礎(chǔ)。本文中的應(yīng)用服務(wù)器采用Spring作為系統(tǒng)基礎(chǔ)架構(gòu),將各個(gè)事務(wù)處理線(xiàn)程連接起來(lái)。
2.3 系統(tǒng)實(shí)現(xiàn)
系統(tǒng)程序使用Spring MVC 框架搭建Maven項(xiàng)目。使用Spring框架有許多優(yōu)點(diǎn),Spring的IoC容器降低了業(yè)務(wù)對(duì)象替換的復(fù)雜性,提高了組件之間的解耦;Spring的AOP支持將一些通用任務(wù),如安全、事務(wù)、日志等進(jìn)行集中式管理,從而提供了更好的復(fù)用;Spring的ORM和DAO提供了與第三方持久層框架的良好整合,并簡(jiǎn)化了底層的數(shù)據(jù)庫(kù)訪(fǎng)問(wèn);Spring的高度開(kāi)放性并不強(qiáng)制開(kāi)發(fā)者完全依賴(lài)于Spring,而是可自由選用Spring框架的部分或全部。該系統(tǒng)程序主要接收微信公眾平臺(tái)轉(zhuǎn)發(fā)的微信用戶(hù)消息,微信用戶(hù)向公眾號(hào)發(fā)送消息時(shí),公眾平臺(tái)將消息轉(zhuǎn)發(fā)到一個(gè)URL上,該URL由開(kāi)發(fā)人員配置。系統(tǒng)程序響應(yīng)該URL請(qǐng)求,接收HTTP請(qǐng)求發(fā)送的數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行協(xié)議解析,然后通過(guò)Socket連接發(fā)送控制指令到嵌入傳感器及WiFi模塊的智能硬件上,智能硬件接收到控制指令便執(zhí)行相應(yīng)操作。Zigbee基于802.15.4物理層協(xié)議、支持自組網(wǎng)、多點(diǎn)中繼,可實(shí)現(xiàn)網(wǎng)狀拓?fù)鋸?fù)雜的組網(wǎng)協(xié)議,加上其低功耗的特點(diǎn),使得網(wǎng)絡(luò)間的設(shè)備必須各司其職,有效地協(xié)同工作。因此,基于ZigBee技術(shù)的組網(wǎng)方式可以高效地實(shí)現(xiàn)多臺(tái)家電集成控制。
2.4 系統(tǒng)測(cè)試
(1) 關(guān)注公眾號(hào),公眾號(hào)將為用戶(hù)推送“謝謝您的關(guān)注!”消息內(nèi)容。用戶(hù)點(diǎn)擊自定義開(kāi)關(guān)按鈕“智能開(kāi)關(guān)”時(shí),若未通過(guò)驗(yàn)證則需先進(jìn)行驗(yàn)證。
(2)驗(yàn)證注冊(cè),綁定設(shè)備。用戶(hù)向公眾號(hào)發(fā)送注冊(cè)信息,如注冊(cè):lisi。若智能設(shè)備的單片機(jī)未通過(guò)網(wǎng)絡(luò)連接到服務(wù)器,則公眾號(hào)向用戶(hù)推送“單片機(jī)未連接!”消息提示。此時(shí)用戶(hù)需將設(shè)備打開(kāi)并連接網(wǎng)絡(luò)(本文使用WiFi透?jìng)髯鳛橥ㄐ沛溌?,打開(kāi)設(shè)備即自動(dòng)連接WiFi以接入服務(wù)器),設(shè)備連接后用戶(hù)發(fā)送注冊(cè)信息(注冊(cè)信息的驗(yàn)證名,如lisi,需與設(shè)備提供的驗(yàn)證名相同),公眾號(hào)提示驗(yàn)證成功,如圖6所示。
(3) 控制智能設(shè)備打開(kāi)或關(guān)閉。驗(yàn)證成功后,用戶(hù)點(diǎn)擊自定義菜單“智能開(kāi)關(guān)”,智能設(shè)備打開(kāi)或關(guān)閉,公眾號(hào)向用戶(hù)推送“開(kāi)關(guān)打開(kāi)”或“開(kāi)關(guān)關(guān)閉”消息,如圖7所示。
經(jīng)測(cè)試,用戶(hù)可通過(guò)網(wǎng)絡(luò)隨時(shí)隨地向公眾號(hào)發(fā)送控制指令控制智能設(shè)備,智能設(shè)備處于可以連接網(wǎng)絡(luò)的環(huán)境中。若部署在家中,可設(shè)置WiFi讓智能設(shè)備連接網(wǎng)絡(luò),以方便控制。為了更全面地實(shí)現(xiàn)智能家居的功能,在家庭中部署一個(gè)ZigBee協(xié)調(diào)器,用來(lái)收集各ZigBee節(jié)點(diǎn)數(shù)據(jù),以及轉(zhuǎn)發(fā)用戶(hù)發(fā)送的對(duì)各智能設(shè)備的控制指令,可以使用戶(hù)控制更多設(shè)備。
3 結(jié)語(yǔ)
本文闡述了基于ZigBee網(wǎng)絡(luò)的通過(guò)WiFi透?jìng)鞯奈⑿偶译娍刂葡到y(tǒng)的研發(fā)與實(shí)現(xiàn)。結(jié)合物聯(lián)網(wǎng)智能家居發(fā)展情況,分析了智能家電控制需求,提出借助于微信公眾平臺(tái)提供的功能實(shí)現(xiàn)智能家電控制。探討系統(tǒng)開(kāi)發(fā)流程及開(kāi)發(fā)過(guò)程中可能遇到的問(wèn)題,如開(kāi)發(fā)環(huán)境的搭建、開(kāi)發(fā)工具的使用、編程過(guò)程中關(guān)鍵技術(shù)的分析等,以及項(xiàng)目的需求分析、功能分析和系統(tǒng)架構(gòu)設(shè)計(jì),編程實(shí)現(xiàn)了本控制系統(tǒng),并對(duì)其進(jìn)行了功能測(cè)試,結(jié)果可滿(mǎn)足功能需求和設(shè)計(jì)要求。endprint
參考文獻(xiàn):
[1] 王志軍.基于物聯(lián)網(wǎng)技術(shù)的智能家居系統(tǒng)的實(shí)現(xiàn)研究[D].淮南:安徽理工大學(xué),2012.
[2] 宋國(guó)鵬,周云峰,朱夢(mèng)宇.基于Zigbee的智能家居系統(tǒng)[J].電子世界,2012(9): 94-96.
[3] 微信公眾平臺(tái)開(kāi)發(fā)者文檔:自定義菜單事件推送[EB/OL].https://mp.weixin.qq.com/wiki.
[4] 微信公眾平臺(tái)開(kāi)發(fā)者文檔:接收普通消息[EB/OL].https://mp.weixin.qq.com/wiki.
[5] 微信公眾平臺(tái)開(kāi)發(fā)者文檔:接收事件推送[EB/OL].https://mp.weixin.qq.com/wiki.
[6] 劉盛德,瞿雷.Zigbee技術(shù)及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2007.
[7] 劉西杰,柳林.HTML、CSS、JavaScript網(wǎng)頁(yè)制作從入門(mén)到精通[M].北京:人民郵電出版社,2012.
[8] [美]JONATHAN CHAFFER,KARL SWEDBERG.jQuery基礎(chǔ)教程[M].第4版.李松峰,譯.北京:人民郵電出版社,2013.
[9] [美]BRUCE ECKEL.Java編程思想[M].第4版.陳昊鵬,譯.北京:機(jī)械工業(yè)出版社,2007.
[10] [美]DAVID GOURLEY,BRIAN TOTTY,MARJPROE SAYER,et al.HTTP權(quán)威指南[M].陳涓,趙振平,譯.北京:人民郵電出版社,2012.
[11] 林博辭.Ajax框架及JSON技術(shù)在J2EE架構(gòu)中的研究與應(yīng)用[D].大連:大連海事大學(xué),2012.
[12] [加]BUDI KURNIAWAN.Servlet和JSP學(xué)習(xí)指南[M].崔毅,俞哲皆,俞黎敏,譯.北京:機(jī)械工業(yè)出版社,2013.
[13] [美]BRIAN GOETZ,TIM PEIERLS,JOSHUA BLOCH,et al.Java并發(fā)編程實(shí)戰(zhàn)[M].童云蘭,等,譯.北京:機(jī)械工業(yè)出版社,2012.
[14] JASON BRITTAIN.Tomcat:the definitive guide[M].Createspace,2007.
[15] Spring基礎(chǔ)知識(shí)匯總[EB/OL].http://www.runoob.com/w3cnote/basic-knowledge-summary-of-spring.html.endprint