賈月輝,孫林娟,劉 佳
(1.天津中德應用技術大學,天津 300350;2.天津大學仁愛學院,天津 301636)
隨著經濟和社會的發展,人們的生活水平日益提高,智能家居系統逐漸走進了普通家庭。智能家居系統的出現很大程度上提升了家庭人居環境的安全性、方便性及宜居性[1-2],但傳統智能家居系統存在成本貴、控制平臺不統一、操作和監控系統復雜、不符合人們的使用習慣等問題,為了解決目前智能家居行業存在的問題,基于社交應用的智能家居控制系統應運而生。不論是國外的Facebook,Twitter,還是國內的微信、微博,都在積極地推進這方面技術的發展。
微信是當前應用最為廣泛的社交應用程序之一,基于微信的應用開發也是最近幾年互聯網新的熱點。微信利用自身在社交網絡的優勢趁機在微信公眾平臺的基礎上推出了微信硬件平臺,將微信作為智能硬件的入口,讓第三方硬件廠商的設備接入微信平臺。由于微信具有平臺技術成熟、用戶群體龐大、用戶平臺開放等優點,對于智能家居而言,微信無疑成了一個時尚便利的終端應用。
本文設計并實現了一種基于微信公眾平臺、開源硬件、開放云平臺和Internet網絡的智能家居控制系統,可實現對室內環境的采集檢測、安防報警以及遠程家電控制等功能。該設計成本低廉,同時由于系統的開源性,用戶可以對該系統進行定制設計,增加了系統應用的靈活性。
本系統以微信公眾平臺為控制入口,以路由器為連接中介,以云服務器為信息處理中心,實現了一種基于微信的智能家居控制系統。系統整體由3部分構成,如圖1所示。
數據采集及執行機構控制部分由Arduino主控、各類傳感器以及執行元件構成,主要負責獲取家居環境參數(溫度、濕度等)、火災預警、非法侵入監測、窗簾控制、家電控制等,屬于智能家居系統的感知層。
網絡數據傳輸部分是聯通感知層和應用程序的橋梁,由W5100 Ethernet擴展模塊、路由器及Internet構成,主要負責將感知層采集到的數據信息上傳到云服務器并存貯在數據庫中,以便微信公眾號用戶隨時查看;同時還要能將微信用戶的指令下傳到感知層執行,屬于智能家居系統網絡層。
應用端直接與用戶相連,由云服務器、數據庫和微信公眾平臺構成,主要負責接收來自網絡層的數據信息并存儲在相應的數據庫中,同時根據用戶發出的請求,將數據庫中的信息反饋給用戶,以及根據用戶的指令要求,發送到感知層處理器執行,屬于智能家居系統應用層。

圖1 智能家居系統方案
本系統硬件系統主要由感知設備、網絡設備和服務端設備構成。
感知設備主控為Arduino UNO R3,是目前使用最廣泛的Arduino。它基于ATmega328的單片機板,Arduino UNO R3共有14個數字I/O端口(其中6個可以做PWM輸出),6個模擬端口,一個16 MHz晶體振蕩器,一個USB接口,一個DC電源插座,一個ICSP和一個復位按鈕。溫濕度的采集采用含有已校準數字信號輸出的溫濕度復合傳感器DHT11,數據輸出端口接在Arduino串口輸入端。煙霧傳感器采用MQ-2,該傳感器對液化氣、天然氣等可燃性氣體以及煙霧靈敏度較高,其輸出接口接Arduino模擬輸入口。其他感知層設備還有熱釋電紅外探測儀、報警器、繼電器等,為簡化硬件設計,降低成本,傳感器、執行元件與主控采用有線連接,連接電路如圖2所示。窗簾控制電機采用5 V直流電機,由Arduino控制電機正反轉,由于Arduino的I/O口不足以驅動電機運行,故需要設計驅動電路,如圖3所示。

圖2 傳感器、執行元件與主控連接圖
網絡傳輸設備由Arduino Ethernet擴展板和路由器構成,Arduino Ethernet擴展板直接堆疊到Arduino主控板,再通過網線直接連到路由器即可。
Arduino Ethernet擴展板通過SPI總線連接一個Wiznet以太網控制器(本設計擴展板采用的是W5100)到Arduino主控板,SPI總線連接的Arduino引腳為數字端口10,11,12,和13。
在智能家居系統中,服務端設備一般采用租用的網絡云服務器。本系統采用的云服務器為新浪云SAE平臺。
本系統軟件設計由3部分構成:主控端程序設計(主控端程序設計涉及傳感器的數據采集、執行機構的控制、數據通信等,這里重點講解通信程序的設計)、服務器平臺的搭建以及微信公眾平臺的搭建。
Arduino與服務器的連接通過HTTP協議,作為HTTP客戶端的Arduino用get的方式訪問服務器并上傳數據表單,服務器返回用戶指令,Arduino根據獲得的用戶指令對執行機構進行控制。

圖3 直流電機驅動電路
Arduino與應用層的數據傳輸利用擴展板的W5100,在使用網絡功能時需要包含該庫頭文件Ethernet類,由于Arduino是通過SPI總線連接W5100實現網絡功能的,所以也需要包含SPI頭文件。設計步驟為:首先實例化一個對象;然后配置物理地址和板卡的IP地址;連接成功,把傳感器的數據添加在get的后邊發送。
為實現微信公眾平臺與系統服務器的消息交換,需要給微信公眾平臺服務器提供系統服務器的URL和Tocken值,并根據微信公眾平臺驗證規則證明URL和Tocken值有效。因此,需要在服務器Web應用程序中設計微信公眾平臺服務器驗證模塊。URL是系統服務器應用提供的一個網址,微信公眾平臺服務器可以訪問到這個網址,這樣微信公眾平臺服務器和系統服務器才可以通信。除了給微信公眾平臺提供了一個URL外,還需要一個標記Tocken,在認證的時候使用,URL和Tocken代表唯一的微信公眾平臺賬號。微信公眾平臺服務器與云服務器傳遞的消息被封裝成XML數據包格式,因此,在需要數據包解析模塊對XML數據包進行解析從而提取相應信息[3]。
新浪云SAE服務器需要和微信公眾平臺以及Arduino主控板進行信息交互,因此需要開發對應的服務器代碼去完成相應的功能,在開發過程中,均采用PHP語言進行編寫。
用戶通過微信給控制器發送指令,控制指令在經過數據包解析模塊處理后,需要再經過指令請求處理模塊才能傳送到主控。用戶發送的控制指令被存儲在SAE服務器的MySQL數據庫中,主控上傳到服務器的傳感器數據也保存在服務器數據庫中,因此需要分別設計指令存儲和數據存儲的兩個數據庫文件[4]。
本文采用開源Arduino、新浪云虛擬服務器以及微信公眾號平臺,構建了可遠程監控的智能系統,實現對家庭環境的監控及其電器設備的控制。系統采用成熟的硬件平臺,不僅穩定性高,成本低,且易于部署推廣。