程 翔, 許正榮, 張昆明
(安徽農(nóng)業(yè)大學(xué) 信息與計(jì)算機(jī)學(xué)院,安徽 合肥 230036)
智能家居是以住宅為平臺(tái),應(yīng)用了嵌入式技術(shù)、傳感器技術(shù)、網(wǎng)絡(luò)通信技術(shù)及自動(dòng)控制技術(shù),將家居設(shè)施關(guān)聯(lián)整合,實(shí)現(xiàn)對(duì)家居生活的智能化控制[1,2],使家居生活更加高效、舒適。物聯(lián)網(wǎng)(IoT)技術(shù)的不斷發(fā)展為智能家居提供了便利,利用紅外、藍(lán)牙、ZigBee,射頻(RF)、Wi-Fi等短距離通信技術(shù),可以方便地將傳感器采集到的信息傳至物聯(lián)網(wǎng)網(wǎng)關(guān),相比于有線通信避免了布線問(wèn)題,更加靈活。
傳統(tǒng)的智能家居系統(tǒng)普遍使用藍(lán)牙、Wi-Fi來(lái)使智能家居網(wǎng)關(guān)連接到手機(jī),通過(guò)手機(jī)應(yīng)用(App)在室內(nèi)進(jìn)行控制,控制方式單一,使用范圍有限,且成本較高[3],針對(duì)以上問(wèn)題,設(shè)計(jì)了物聯(lián)網(wǎng)智能家居控制系統(tǒng),提供網(wǎng)頁(yè)端控制,可通過(guò)手機(jī)電腦控制家居設(shè)備,提供本地控制,可在主控制器的觸控屏上對(duì)家居進(jìn)行控制,模塊化程度高,降低了成本并且方便拓展傳感器與電器設(shè)備。
本系統(tǒng)由三部分組成:節(jié)點(diǎn)、主控制器、服務(wù)器。節(jié)點(diǎn)是控制鏈的末端,承載著家居器件和傳感器,本系統(tǒng)中家居器件簡(jiǎn)化為照明燈,傳感器主要為溫濕度傳感器,節(jié)點(diǎn)數(shù)量多,且對(duì)芯片性能要求不高,所以使用51單片機(jī)作為節(jié)點(diǎn)芯片;主控制器管理著各個(gè)節(jié)點(diǎn),提供用戶操作界面,并連接服務(wù)器,使用STM32微處理器來(lái)滿足以上要求;服務(wù)器部署網(wǎng)站,還運(yùn)行有與硬件通信的后臺(tái)程序。系統(tǒng)組成框圖如圖1所示。
圖1 系統(tǒng)組成框圖
用戶在網(wǎng)頁(yè)端點(diǎn)擊操作,網(wǎng)頁(yè)向網(wǎng)站后臺(tái)發(fā)送相應(yīng)請(qǐng)求,網(wǎng)站后臺(tái)結(jié)合通信后臺(tái)將指令發(fā)送至主控制器,主控制器將來(lái)自服務(wù)器的指令處理后下發(fā)至節(jié)點(diǎn),節(jié)點(diǎn)按照指令控制繼電器,完成照明控制。主控制器每隔一段時(shí)間向傳感器節(jié)點(diǎn)發(fā)指令索取傳感器數(shù)據(jù),并上傳至服務(wù)器,網(wǎng)頁(yè)定時(shí)刷新傳感器信息。
節(jié)點(diǎn)電路板可連接繼電器或傳感器,系統(tǒng)中繼電器用于控制照明燈亮滅,傳感器用于采集溫濕度信息。節(jié)點(diǎn)電路主要包含單片機(jī)最小系統(tǒng)、電壓轉(zhuǎn)換模塊、無(wú)線射頻模塊和各類接口等。其電路原理圖如圖2所示。
圖2 節(jié)點(diǎn)電路原理
節(jié)點(diǎn)編程芯片選用STC12C5A60S2,是由宏晶科技生產(chǎn)的高速增強(qiáng)型單時(shí)鐘/機(jī)器周期8051單片機(jī),擁有功耗低、抗干擾能力強(qiáng)的特點(diǎn)[4],可使用keil4軟件進(jìn)行開發(fā)。無(wú)線射頻模塊為直插式NRF24L01模塊,是由NORDIC生產(chǎn)的工作在2.4~2.5 GHz的ISM頻段的單片無(wú)線射頻器芯片,擁有體積小、功耗低、傳輸距離遠(yuǎn)的特點(diǎn)[5],使用SPI協(xié)議與單片機(jī)通信。為減小節(jié)點(diǎn)的體積,程序燒錄通過(guò)外置CH340G程序下載模塊完成,節(jié)點(diǎn)只提供相應(yīng)引腳接口,不含程序下載電路。節(jié)點(diǎn)供電為12 V直流電,通過(guò)DC插口連接電源,電壓轉(zhuǎn)換模塊為兩片AMS1117芯片,可分別提供5,3.3 V的輸出電壓,3.3 V電壓用于NRF24L01模塊。
傳感器或繼電器模塊可通過(guò)預(yù)留接口與節(jié)點(diǎn)連接,繼電器為5 V繼電器模塊,可負(fù)載10A/250V交流電,能控制常規(guī)照明燈和大多數(shù)家用電器的電源通斷,傳感器為DHT11溫濕度傳感器,這是含有已校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度復(fù)合傳感器[6],具有低功耗和高穩(wěn)定性的優(yōu)點(diǎn)。
主控制器可與各個(gè)節(jié)點(diǎn)遠(yuǎn)程通信,通過(guò)觸控屏為用戶提供本地操控,并連接著服務(wù)器。主控制器選用阿波羅STM32F429IGX開發(fā)板,這是正點(diǎn)原子公司推出的基于ARM Cortex—M4內(nèi)核的開發(fā)板,最高主頻為180 MHz,該開發(fā)板具有豐富的板載資源,可滿足系統(tǒng)各方面要求,可使用keil5軟件進(jìn)行開發(fā)。NRF24L01無(wú)線射頻模塊與節(jié)點(diǎn)相同。
使用ESP8266—12F作為WiFi通信模塊,ESP8266是樂(lè)鑫公司生產(chǎn)的低功耗高集成度的WiFi芯片,支持802.11 b/g/n 無(wú)線標(biāo)準(zhǔn),內(nèi)置TCP/IP 協(xié)議棧[7]。本身可以承載程序來(lái)獨(dú)立執(zhí)行工作;也可以作為從機(jī)搭載到主機(jī)上,執(zhí)行主機(jī)的指令,起到Wi-Fi適配器的作用,ESP8266支持UART,SPI,I2C,GPIO等多種通信接口。
顯示屏為ATK—4342 RGBLCD,這是正點(diǎn)原子推出的高性能4.3寸RGB接口電容觸摸屏模塊,使用GT9147電容觸控芯片,支持24位真彩顯示,該屏幕易于安裝,可以滿足顯示控制界面的要求。主控制器上的模塊連接如圖3所示。
圖3 主控制器模塊連接
使用云服務(wù)器,入門級(jí)配置即可滿足需求。操作系統(tǒng)為CentOS7.3,是成熟、易用的Linux發(fā)行版。
NRF24L01無(wú)線射頻模塊擁有6條工作通道,少于本系統(tǒng)節(jié)點(diǎn)數(shù)量,不夠?yàn)楣?jié)點(diǎn)一一分配,所以各節(jié)點(diǎn)模塊共同接收通道1的數(shù)據(jù),設(shè)定節(jié)點(diǎn)編號(hào),主控制器一對(duì)多以廣播形式向節(jié)點(diǎn)發(fā)送指令,節(jié)點(diǎn)發(fā)數(shù)據(jù)到通道2以被主控制器接收;為避免出現(xiàn)多個(gè)節(jié)點(diǎn)同一時(shí)間段向主控制器發(fā)送信息產(chǎn)生碰撞干擾問(wèn)題,可以為通信方案加上防碰撞措施,如隨機(jī)延時(shí)重發(fā)、查詢樹算法等[8],本文采用另一種方法,設(shè)計(jì)為節(jié)點(diǎn)只在收到指令后被動(dòng)回應(yīng)主控制器,不主動(dòng)發(fā)送信息,也就不會(huì)出現(xiàn)同時(shí)發(fā)送,傳感器信息由主控制器向節(jié)點(diǎn)發(fā)指令索取,節(jié)點(diǎn)工作流程如圖4所示。
圖4 節(jié)點(diǎn)工作流程
主控制器程序基于HAL固件庫(kù)開發(fā),程序主要包含驅(qū)動(dòng)各模塊運(yùn)行、顯示操作界面、與節(jié)點(diǎn)的通信、與服務(wù)器的通信等內(nèi)容。操作界面提供預(yù)設(shè)操作、照明控制和查看傳感器數(shù)據(jù)功能。用戶可以通過(guò)界面左側(cè)的房間列表在多個(gè)房間中切換選擇,選擇房間后可以在二級(jí)列表中進(jìn)一步選擇照明控制或查看傳感器,通過(guò)預(yù)設(shè)操作按鈕用戶可以一次執(zhí)行多個(gè)操作,如全開、全關(guān)。主控制器操作界面如圖5所示。
圖5 主控制器操作界面
網(wǎng)站包含登錄、選擇房間、照明控制和查看傳感器功能。網(wǎng)站基于PHP+MySQL+Apache架構(gòu),網(wǎng)站使用了后臺(tái)框架ThinkPHP,這是一種MVC結(jié)構(gòu)的國(guó)產(chǎn)開源PHP框架,擁有快速、兼容、輕量化的特點(diǎn),適合于中小型項(xiàng)目;網(wǎng)站使用了前端框架LayUI,這是一種輕量級(jí)模塊化前端框架,適合于快速開發(fā)界面;網(wǎng)站適配移動(dòng)端以便于在手機(jī)上訪問(wèn),手機(jī)網(wǎng)頁(yè)如圖6所示。
圖6 手機(jī)網(wǎng)頁(yè)
主控制器作為客戶端,與服務(wù)器建立TCP連接,進(jìn)而實(shí)現(xiàn)各種聯(lián)網(wǎng)功能。服務(wù)端:PHP提供Socket支持,Socket是套接字,基于TCP/IP通信協(xié)議,是對(duì)TCP/IP協(xié)議的抽象[9],在編程語(yǔ)言中,通過(guò)使用類似于create,connect,send,read等Socket接口函數(shù),人們可以方便地進(jìn)行TCP通信。PHP自帶的Scoket函數(shù)只提供客戶端功能,不能監(jiān)聽端口以作為服務(wù)端,需要使用PHP的Socket擴(kuò)展模塊來(lái)實(shí)現(xiàn)監(jiān)聽功能,本文使用了PHP的非官方擴(kuò)展Swoole來(lái)搭建Socket通信服務(wù)端, Swoole是高性能異步網(wǎng)絡(luò)通信引擎,可以用于編寫TCP,UDP,HTTP,WebSocket 服務(wù)。首先選定一個(gè)端口作為服務(wù)端通信端口,服務(wù)器需將此端口設(shè)為對(duì)外開放;然后利用Swoole編寫服務(wù)端通信腳本,內(nèi)容主要包含監(jiān)聽之前選定的通信端口,對(duì)該端口設(shè)置TCP連接事件回調(diào)、接收事件回調(diào)等,在回調(diào)函數(shù)中進(jìn)行事務(wù)邏輯處理;最后腳本在服務(wù)器上后臺(tái)運(yùn)行,便形成了Socket通信服務(wù)端。
客戶端:主控制器通過(guò)ESP8266Wi-Fi模塊連接服務(wù)端,ESP8266模塊采用AT指令[10],支持三種工作模式,AP(Access Point)模式、station模式、AP+station模式,本文使用station模式,即作為客戶端。主要使用指令“AT+CWMODE”選擇模式,指令“AT+CWJAP”連接Wi-Fi,指令“AT+CIPSTART”與服務(wù)端建立TCP連接,指令“AT+CIPMODE=1”開啟透明傳輸。
服務(wù)器與主控制器的通信由前文通信程序負(fù)責(zé),網(wǎng)頁(yè)產(chǎn)生的控制指令最終需要由通信程序發(fā)送至主控制器,由于網(wǎng)頁(yè)不支持建立常規(guī)的Socket連接,網(wǎng)頁(yè)的控制指令無(wú)法直接發(fā)給通信程序,所以本文網(wǎng)頁(yè)控制指令照常以HTTP請(qǐng)求方式發(fā)送至網(wǎng)站后臺(tái),再由網(wǎng)站后臺(tái)通過(guò)其他方式發(fā)給通信程序。
網(wǎng)站后臺(tái)與通信程序間可使用管道、共享內(nèi)存、Socket連接等方式進(jìn)行跨進(jìn)程通信,由于通信程序本身是一個(gè)Socket通信服務(wù)端,本文使用Socket連接方式,網(wǎng)站后臺(tái)獲取網(wǎng)頁(yè)控制指令后,通過(guò)建立Socket連接將指令發(fā)送至通信程序,然后關(guān)閉連接,最后再由通信程序?qū)⒅噶畎l(fā)送至主控制器,完成了指令的下發(fā)。
本文設(shè)計(jì)了基于STM32微處理器、STC12單片機(jī)、NRF24L01無(wú)線射頻模塊及ESP8266WiFi模塊的智能家居控制系統(tǒng),提供本地觸控操作和遠(yuǎn)程網(wǎng)頁(yè)操作。經(jīng)運(yùn)行測(cè)試證明,該系統(tǒng)操作方便,延遲極小,運(yùn)行穩(wěn)定。節(jié)點(diǎn)預(yù)留引腳方便擴(kuò)展其他傳感器,可以為節(jié)點(diǎn)安裝紅外模塊來(lái)實(shí)現(xiàn)空調(diào)、電視等控制,可以為節(jié)點(diǎn)安裝光照傳感器以實(shí)現(xiàn)自動(dòng)照明控制等。