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