岳 駿,解乃軍
(南京工程學(xué)院,江蘇 南京 211167)
在全球范圍內(nèi),對高效能源利用的需求不斷增加[1]。此外人們對工作或其他活動的流動性增加,導(dǎo)致對遠(yuǎn)程監(jiān)控家庭技術(shù)和條件的需求逐漸增加。為了滿足這些需求,人們主張使用智能家居解決方案,可以遠(yuǎn)程監(jiān)控和控制家中設(shè)備。Waleed將智能住宅定義為“配備了先進(jìn)智能技術(shù)的生活環(huán)境,可以根據(jù)住宅居民的需求進(jìn)行操作和響應(yīng)”[2]。
智能家居的自動化通常由分布式傳感器和執(zhí)行器以及一個(gè)中央微控制器組成。智能家居解決方案的一個(gè)關(guān)鍵因素是物聯(lián)網(wǎng)、移動互聯(lián)技術(shù)、云計(jì)算和傳感器技術(shù)的快速發(fā)展。這與工業(yè)機(jī)械的監(jiān)控和控制自動化方面息息相關(guān),然而,盡管取得了顯著的成就,智能家居仍然面臨著購買昂貴、安全和隱私漏洞等問題和挑戰(zhàn)。
該文的智能家居系統(tǒng)的整體網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。它主要分為ESP8266WIFI模塊和嵌入式STM32接入互聯(lián)網(wǎng)兩部分。
圖1 智能家居系統(tǒng)整體網(wǎng)絡(luò)結(jié)構(gòu)圖
系統(tǒng)要實(shí)現(xiàn)網(wǎng)絡(luò)遠(yuǎn)程控制,首先必須在互聯(lián)網(wǎng)上建立一個(gè)服務(wù)器,該系統(tǒng)選用阿里云ECS服務(wù)器建立物聯(lián)網(wǎng)云端服務(wù)器,利用EMQX的MQTT消息代理傳輸數(shù)據(jù),其中MQTT是一種發(fā)布/訂閱消息傳遞協(xié)議,設(shè)計(jì)用于受約束網(wǎng)絡(luò)中的輕量級M2M通信。MQTT客戶端將消息發(fā)布給MQTT代理,這些消息可以由其他客戶端訂閱,也可能會保留給將來的訂閱。每個(gè)消息都被發(fā)布到一個(gè)地址,稱為主題??蛻舳丝梢杂嗛喍鄠€(gè)主題,并接收發(fā)布到每個(gè)主題的每個(gè)消息,MQTT協(xié)議模型如圖2所示。其次對手機(jī)端進(jìn)行配置,利用Nod-vue前端框架制作微信小程序,并根據(jù)阿里云物聯(lián)網(wǎng)服務(wù)器對微信小程序進(jìn)行配置,使得微信小程序與服務(wù)器建立起TCP連接。然后對STM32外接ESP8266模塊進(jìn)行配置,并使其也與云端服務(wù)器建立起TCP連接[3]。
圖2 MQTT協(xié)議模型
該文采用STM32F103C8T6作為主控芯片的核心板,并根據(jù)所需功能分為如下模塊:BH1750光照度檢測模塊、DHT11溫濕度檢測模塊、 MQ-135空氣質(zhì)量檢測模塊、OLED0561顯示屏模塊、按鍵模塊、報(bào)警模塊和ESP8266-01S無線WIFI模塊等。
圖3 硬件結(jié)構(gòu)框圖
STM32F103C8T6是一款32位基于ARM核心的帶64K字節(jié)閃存的微控制器,需要電壓2.0 V~3.6 V,工作溫度為-40 ℃ ~ 85 ℃。STM32 處理器具有睡眠模式、停機(jī)模式、待機(jī)模式三種低功耗模式單片機(jī)在低功耗狀態(tài)下喚醒時(shí)間可以達(dá)到微秒級[4]本設(shè)計(jì)中采用AT指令對 ESP8266WIFI 模塊進(jìn)行控制聯(lián)網(wǎng)時(shí),主要用到主控制芯片中的 UART 串口通信,主控制芯片UART 串口多達(dá)3個(gè),完全滿足每個(gè)設(shè)備的需求。
該模塊的處理器為樂鑫公司研發(fā)的專用于物聯(lián)網(wǎng)的一款芯片,其特點(diǎn)為成本低、功耗低、集成TCP/IP協(xié)議棧[5]。該模塊供電范圍2.5 V~3.6 V,工作電流為80 mA,供電接口處連接到3.3 V的穩(wěn)壓電路上,通信時(shí)必須保證電壓穩(wěn)定,不然容易造成設(shè)備與云端出現(xiàn)斷連的情況。作為物聯(lián)網(wǎng)應(yīng)用的模塊,它可以部署在家庭自動化、家用電器、工業(yè)無線網(wǎng)絡(luò)等領(lǐng)域。
本系統(tǒng)選用的是128×64的OLED顯示屏,該模塊體型較小,性能較強(qiáng),功耗低,刷新反應(yīng)速度快適用于物聯(lián)網(wǎng)設(shè)備的開發(fā)。此外低耗電及高對比度不僅可以節(jié)能,更增加了可視化界面美觀性。結(jié)合主控制器的片上資源和該顯示屏的優(yōu)點(diǎn),選用該 OLED 作為顯示模塊。
溫濕度檢測采用的是DHT11。該傳感器中復(fù)合了其特有的NTC,一個(gè)具有AD轉(zhuǎn)換功能的芯片,以及在其末端與八位微控制器相連,三者聯(lián)動。其中AD轉(zhuǎn)換芯片負(fù)責(zé)將NTC采集到的模擬量轉(zhuǎn)化為分別代表了溫度與濕度的數(shù)字信息,并向微控制器輸出實(shí)時(shí)性較強(qiáng)的串行數(shù)據(jù)。這使得該傳感器易于與任何微控制器一起使用。濕度范圍是20~90%RH,溫度范圍是0~50 ℃,滿足家居環(huán)境的檢測需求[6]。
光照度模塊采用的是BH1750。BH1750是一種不需要區(qū)分的光源的數(shù)字光照度傳感器。BH1750的集成電路是由兩條線串行總線接口所組成,可以隨時(shí)根據(jù)外部環(huán)境檢測光照強(qiáng)度。BH1750同時(shí)具有范圍較廣的光照強(qiáng)度分辨率,達(dá)到1~65535lx,因此可以監(jiān)測和收集大范圍的光強(qiáng)變化,BH1750與主控制器之間的通信協(xié)議是標(biāo)準(zhǔn)的I2C通信協(xié)議。主控制器使用I2C接口發(fā)送各種控制命令,并向BH1750讀取測量數(shù)據(jù)[7]。
本設(shè)計(jì)選用對煙霧和其他有害氣體檢測較為理想的MQ-135空氣質(zhì)量傳感器。適合多種應(yīng)用場合的低成本傳感器,可滿足檢測家居環(huán)境的有害氣體檢測裝置[8]。當(dāng)空氣中有害氣體濃度大于16PPM時(shí),蜂鳴器會發(fā)出報(bào)警,并通過微信小程序并使手機(jī)震動15 s以提示用戶。
蜂鳴器驅(qū)動方式為GPIO定時(shí)切換高低電平,蜂鳴器平時(shí)不工作,三極管由于I/O端口輸出高電平從而截止。三極管由于I/O端口輸出低電平從而導(dǎo)通,蜂鳴器內(nèi)部線圈、揚(yáng)聲器振片也因此工作。上述GPIO每一次對高低電平的變換即為一個(gè)完整的頻率周期,蜂鳴器工作本質(zhì)正是上述周期的循環(huán)。報(bào)警信號產(chǎn)生的具體方法為:低電平0.5 ms,高電平也為0.5 ms,周期總時(shí)長為1 ms,即可產(chǎn)生一個(gè)周期為1 ms的1 kHz音頻[9]。
LED是一個(gè)發(fā)光的二極管。LED1與LED2的負(fù)極接地(GND),正極連接I/O端口。通過控制I/O端口的高低電平狀態(tài)從而達(dá)到對LED的亮滅的控制。電阻R5和R6是限流電阻,使通過LED的電流不至于過大而導(dǎo)致?lián)p壞,同時(shí)也控制LED的亮度[10]。LED1在STM32智能家居系統(tǒng)中充當(dāng)客廳燈,LED2在系統(tǒng)中充當(dāng)報(bào)警時(shí)的燈光閃爍提示。
系統(tǒng)軟件部分主要由ESP8266WIFI模塊,OLED顯示模塊,溫濕度傳感器模塊,光照度模塊,空氣質(zhì)量模塊,外圍設(shè)備控制模塊所組成,程序開始后先要對各個(gè)模塊進(jìn)行初始化,然后進(jìn)入監(jiān)測控制程序,實(shí)時(shí)監(jiān)測和控制被測對象,系統(tǒng)監(jiān)測和控制部分程序流程圖如圖4所示。
圖4 系統(tǒng)監(jiān)測和控制部分程序流程圖
引用頭文件是在編寫主控程序之前必不可少的步驟,在引用所有需要調(diào)用的函數(shù)頭文件后,所需的變量都應(yīng)該在第一時(shí)間被定義或復(fù)制,一方面能增加程序的可讀性,另一方面也便于后續(xù)程序中可以順利的調(diào)用。設(shè)置是否報(bào)警的標(biāo)志alarmFlag,報(bào)警器是否手動操作alarm_is_free,發(fā)送和訂閱的內(nèi)容等,然后開始初始化函數(shù),例如設(shè)置中斷優(yōu)先級分NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2),波特率設(shè)置為115200, ADC函數(shù),TIM定時(shí)器中斷函數(shù),LED,BEEP,OLED,初始化延時(shí)函數(shù),光敏電阻傳感器調(diào)用函數(shù),初始化USART串口等。
首先初始化ESP8266,隨后將其設(shè)置成AP工作模式,并啟動多連接,最后設(shè)置開啟服務(wù)器模式。接入阿里云服務(wù)器的循環(huán)while(AliNet_DevLink()),蜂鳴器鳴叫提示接入成功。ESP8266模塊初始化函數(shù)如下:
Void ESP8266_Init(void)
{
ESP8266_Clear();
UsartPrintf(USART_DEBUG, “0.AT ”);
While(ESP8266_SendCmd(“AT ”,“OK”));
delay_ms(500);
UsartPrintf(USART_DEBUG, “1.RST ”);
While(ESP8266_SendCmd(“AT+RST ”,“”));
delay_ms(500);
While(ESP8266_SendCmd(“AT+CIPCLOSE ”,“”));
delay_ms(500);
UsartPrintf(USART_DEBUG, “2.CWMODE ”);
While(ESP8266_SendCmd(“AT+CWMODE=1 ”,“OK”));
delay_ms(500);
UsartPrintf(USART_DEBUG, “3.AT+CWDHCP ”);
While(ESP8266_SendCmd(“AT+CWDHCP=1 ”,“OK”));
delay_ms(500);
UsartPrintf(USART_DEBUG, “4.CWJAP ”);
While(ESP8266_SendCmd(ESP8266_WIFI_INFO,“GOT_IP”));
delay_ms(500);
UsartPrintf(USART_DEBUG, “5.CIPSTART ”);
While(ESP8266_SendCmd(ESP8266_ONENET_INFO,“CONNECT”));
delay_ms(500);
UsartPrintf(USART_DEBUG, “6.ESP8266 Init OK ”);
}
結(jié)束主程序所需調(diào)用函數(shù)的初始化工作后,為了使程序系統(tǒng)正常運(yùn)行,需使用while不斷循環(huán)。使用if判斷語句對數(shù)據(jù)獲取進(jìn)行設(shè)置,數(shù)據(jù)獲取的時(shí)間為每5秒獲取一次溫濕度,光照度,空氣質(zhì)量的數(shù)據(jù)。設(shè)備側(cè)將獲取到的數(shù)據(jù)通過基于TCP的MQTT協(xié)議上傳數(shù)據(jù)到devPubTopic,并訂閱下行命令devSubTopic以接收下行命令;用戶側(cè)同樣通過基于TCP的MQTT協(xié)議訂閱設(shè)備上行數(shù)據(jù)devPubTopic獲取數(shù)據(jù)并下發(fā)命令至devSubTopic。程序串口調(diào)試圖如圖5所示。
圖5 程序串口調(diào)試圖
通過對系統(tǒng)原型的各項(xiàng)驗(yàn)證測試,系統(tǒng)能夠順利運(yùn)行。首先對STM32單片機(jī)通電,運(yùn)行各個(gè)傳感器模塊,STM32通過ESP8266WIFI模塊接入網(wǎng)絡(luò),連入阿里云ECS物聯(lián)網(wǎng)云平臺。當(dāng)網(wǎng)絡(luò)配置成功后,傳感器所接受到的數(shù)據(jù)通過MQTT協(xié)議傳輸至云平臺,小程序最終接收這些數(shù)據(jù)。打開小程序的人機(jī)交互界面,可以實(shí)時(shí)監(jiān)測控制家中情況和設(shè)備,當(dāng)傳感器檢測到的數(shù)據(jù)參數(shù)不符合所設(shè)定的閥值時(shí),小程序會發(fā)出警報(bào)使手機(jī)持續(xù)震動,并通過微信小程序訂閱消息發(fā)送相關(guān)的報(bào)警信息,同時(shí)家中的設(shè)備也會通過蜂鳴器和LED2發(fā)出警報(bào)。智能家居系統(tǒng)微信小程序及報(bào)警提示如圖6所示。
圖6 微信小程序顯示及報(bào)警提示圖
圖7為小程序所存儲的歷史數(shù)據(jù),將歷史數(shù)據(jù)繪制成折線圖,通過折線圖可以直觀的觀察家中環(huán)境的變化情況。
圖7 歷史數(shù)據(jù)折線圖
該文設(shè)計(jì)的一套基于STM32的物聯(lián)網(wǎng)智能家居系統(tǒng),通過STM32遠(yuǎn)程控制家庭里的設(shè)備來調(diào)節(jié)出家庭比較舒適的居住環(huán)境,使家居自動化。其中包括從傳感器獲取數(shù)據(jù)并最終顯示在微信小程序中等等,重點(diǎn)在于代理的發(fā)布/訂閱消息傳遞協(xié)議MQTT與終端進(jìn)行連接,利用EMQX的MQTT消息代理達(dá)到向阿里云ECS服務(wù)器傳輸數(shù)據(jù)的目的,其特點(diǎn)是低開銷、異步通信;低復(fù)雜度和低功耗。同時(shí),利用Nod-vue前端框架制作微信小程序,并根據(jù)阿里云ECS服務(wù)器對微信小程序進(jìn)行配置,使得微信小程序與服務(wù)器建立起TCP連接。在建立的模型中,產(chǎn)生數(shù)據(jù)的客戶端((publisher)將數(shù)據(jù)轉(zhuǎn)發(fā)給終端用戶設(shè)備(微信小程序)。該智能家居系統(tǒng)在未來的使用中還可以擴(kuò)展接口,使用更多的傳感器,來收集環(huán)境信息數(shù)據(jù),從而覆蓋到人們生活的各個(gè)角落,為人們生活提供更多的便利。