劉 音,楊曉凡
(淮南師范學(xué)院 電子工程學(xué)院,安徽 淮南 232038)
隨著智能控制、無線通信等技術(shù)在近年來取得的長足進(jìn)步與廣泛應(yīng)用,智能家居作為這些前沿科技與日常生活的一個有效的結(jié)合點(diǎn),得到了極大地發(fā)展。近年來對人工智能、深度學(xué)習(xí)的研究日益深入,為智能家居的進(jìn)一步發(fā)展提供了新的方向和難得的機(jī)遇[1]。智能開關(guān)也逐漸進(jìn)入多元化發(fā)展,實(shí)現(xiàn)了互聯(lián)、遠(yuǎn)程操控、語音智能等功能。但一個房屋要使用智能開關(guān),在建造前就要對整個房屋進(jìn)行布線設(shè)計,否則在后期改造接線時會帶消耗大量人力物力。目前國內(nèi)外市場上的智能開關(guān)除了有安裝復(fù)雜的弊端,還有受到網(wǎng)關(guān)限制、無法和其他智能產(chǎn)品兼容等問題。本文提出一種免安裝式的多功能智能開關(guān),讓傳統(tǒng)的電燈開關(guān)物聯(lián)網(wǎng)化,并配有其他功能[2]。通過手機(jī)上的微信小程序遠(yuǎn)程控制開關(guān)并監(jiān)測室內(nèi)環(huán)境信息,并配有語音識別模塊,可以語音控制開關(guān)。同時開關(guān)配備1.3寸OLED顯示屏,實(shí)時顯示室內(nèi)的溫濕度及功能模式。其中功能模式包含夜燈模式和防盜模式,夜燈模式晚上監(jiān)測到人時,自動打開LED小夜燈5秒,沒有人活動時自動關(guān)閉。防盜模式開啟后,監(jiān)測到人時會通過蜂鳴器發(fā)出警報,并向手機(jī)端發(fā)送信息提醒。
系統(tǒng)主要由4個部分組成:上位機(jī)手機(jī)APP、下位機(jī)STM32主控系統(tǒng)、傳感器模塊部分、外設(shè)驅(qū)動部分[3]。如圖1所示,STM32主控系統(tǒng)通過WIFI模塊連接到互聯(lián)網(wǎng),和手機(jī)APP進(jìn)行通信。用C語言編程驅(qū)動各個模塊,對應(yīng)不同的場景實(shí)現(xiàn)不同的功能。
圖1 系統(tǒng)總體框圖
硬件電路主要由9個部分組成,如圖2所示,主要有主控模塊、OLED顯示屏、溫濕度傳感器、人體紅外傳感器、WIFI模塊、語音模塊、防盜報警模塊、LED小夜燈和電機(jī)模塊。
圖2 硬件電路設(shè)計框圖
微處理器采用ST公司的基于Cortex M3內(nèi)核的STM32F130C8T6芯片。工作頻率為72MHz,具有128K字節(jié)的Flash(閃存)和20K字節(jié)的SRAM(靜態(tài)隨機(jī)存取存儲器)。內(nèi)部還有兩條APB(Advanced Peripheral Bus)總線,上面掛載豐富的片上外設(shè)及I/O端口。同時支持多種通信方式,如IIC、SPI、USB、USART、CAN等。支持兩線的SWD(串行單線調(diào)試)和5線的JTAG接口的下載調(diào)試。
無線網(wǎng)絡(luò)通信解決方案選用樂鑫科技的ESP8266-12F,內(nèi)部集成了32位處理器,工作頻率可設(shè)置為80MHz或160MHz,支持超低功耗的工作模式。完美支持IEEE802.11b/g/n協(xié)議和TCP/IP協(xié)議棧[4]。既可以直接使用此模塊給自己的系統(tǒng)添加網(wǎng)絡(luò)通信功能,也可以將它作為獨(dú)立主控芯片,自帶聯(lián)網(wǎng)功能,以最低成本提供最大實(shí)用性,為Wi-Fi功能嵌入其他系統(tǒng)提供無限可能[5]。
ESP8266-12F是一個完整體系的無線網(wǎng)絡(luò)通信的解決方案。不僅能夠作為主控芯片獨(dú)立運(yùn)行程序,還可以作為從機(jī),搭配其他處理器運(yùn)行。這里是通過UART串口與MCU連接,只作聯(lián)網(wǎng)功能使用,網(wǎng)絡(luò)通信模塊原理圖如圖3所示。
圖3 網(wǎng)絡(luò)通信模塊原理圖
系統(tǒng)采用DHT11溫濕度傳感器,不僅成本低,功耗低,還可靠穩(wěn)定。內(nèi)部含有已經(jīng)精準(zhǔn)校驗過的傳感器,由電阻式感濕元件和NTC測溫元件兩部分組成。單總線通信,所以連線方便,使用起來簡易快捷。
人體紅外檢測模塊采用型號為HC-SR505的紅外傳感器,具有體積小,操作簡單,靈敏度高,低電壓,低功耗的特點(diǎn)。
語音識別模塊使用的是海凌科的HLK-V20,它是RSIC架構(gòu)內(nèi)核,包含專門針對信號處理和語音識別所需要的DSP指令集,支持浮點(diǎn)運(yùn)算及FFT加速器??梢酝ㄟ^神經(jīng)網(wǎng)絡(luò)對音頻信號進(jìn)行學(xué)習(xí),以此提高語音信息的識別能力。芯片支持150條本地指令的離線識別,可以通過后臺自由配置喚醒詞、命令詞與播報答復(fù)詞,支持RTOS輕量級系統(tǒng),具有豐富的外圍接口,以及簡單友好的客制化工具[6]。
首先通過USB轉(zhuǎn)TTL芯片配合串口助手,讀取語音模塊的數(shù)據(jù)包協(xié)議。然后找到有效的數(shù)據(jù)段,由于每段語音的有效數(shù)據(jù)段長度不一樣,使用一般的串口中斷是不能夠完整接受的,因為一般的串口中斷已經(jīng)知道數(shù)據(jù)段的長度,或者像正點(diǎn)原子官方例程里通過識別回車符來判斷接受完畢,所以這里串口應(yīng)該采用讀取USART_FLAG_IDLE(空閑總線標(biāo)志位),這樣就可以每次接受不同長度的數(shù)據(jù)包并且產(chǎn)生中斷,然后在程序里截取有效數(shù)據(jù)段進(jìn)行解析對比。原理圖如圖4所示。
圖4 語音識別模塊原理圖
系統(tǒng)在開發(fā)過程中,運(yùn)用Keil uVision5軟件環(huán)境編寫下位機(jī)代碼,包含主程序、系統(tǒng)初始化、語音檢測識別、串口通信、定時器中斷及其他外設(shè)初始化等。系統(tǒng)子程序以模塊功能分開,主函數(shù)中需要時直接調(diào)用預(yù)先寫好的功能子程序。手機(jī)端APP設(shè)計是在eclipse軟件開發(fā)環(huán)境下完成的,使用Java語言編寫APP程序。
當(dāng)系統(tǒng)上電時,程序會按照程序流程執(zhí)行,先初始化好片上外設(shè)和系統(tǒng)外設(shè),然后進(jìn)入主循環(huán),在主循環(huán)中不斷檢測語音,當(dāng)語音檢測到后,會通過語音識別芯片識別,然后通過串口與STM32通信,將語音數(shù)據(jù)包發(fā)給STM32。STM32在對語音數(shù)據(jù)包進(jìn)行解析和數(shù)據(jù)匹配,識別是要執(zhí)行哪一個功能。如果沒有檢測到語音,則每間斷3秒讀取下溫濕度數(shù)據(jù),最后將收據(jù)發(fā)送到服務(wù)器。系統(tǒng)流程設(shè)計如圖5所示。
圖5 系統(tǒng)軟件程序流程圖
主函數(shù)的循環(huán)部分先是檢測語音串口的中斷標(biāo)志位,一旦檢測到語音識別模塊的額數(shù)據(jù)便開始協(xié)議匹配,然后是自動模式和警報模式的檢測,在OLED屏幕上顯示模式工作的圖標(biāo)。條件循環(huán)主要就是定時的讀取數(shù)據(jù),發(fā)送數(shù)據(jù)到云服務(wù)器。
語音解析匹配函數(shù)是先獲取有效數(shù)據(jù)段的長度,將前面的包頭跳過,在for循環(huán)里對接收到的數(shù)據(jù)與庫里的數(shù)據(jù)對比,每次匹配相等,right變量便增加。匹配結(jié)束后,如果right等于有效數(shù)據(jù)段的長度,便視為識別成功,開始執(zhí)行相應(yīng)任務(wù),并把right變量清零。
語音數(shù)據(jù)包的協(xié)議庫(此處刪除“是先前”)用TTL轉(zhuǎn)USB芯片配合串口助手,解析語音識別模塊數(shù)據(jù)包的有效數(shù)據(jù)段,然后保存在程序里,當(dāng)識別語音時,將STM32串口接收到的數(shù)據(jù)與庫中的數(shù)據(jù)對比,這樣就可以完成相應(yīng)的指令。語音數(shù)據(jù)包協(xié)議庫如圖6所示。
圖6 語音數(shù)據(jù)包協(xié)議庫
服務(wù)器主要采用Linux服務(wù)器上部署EMQ X消息服務(wù)器。EMQ X是一種開源的物聯(lián)網(wǎng)MQTT消息服務(wù)器,不僅可靠性高,還可以連接大量的客戶端[7]。單個服務(wù)器節(jié)點(diǎn)最高支持100萬個連接,同時還可以提供設(shè)備間低延時的消息路由。支持的協(xié)議有:MQTT、MQTT-SN、CoAP、LwM2M、WebSocket等。
上位機(jī)微信小程序的設(shè)計是基于mpvue的框架開發(fā)的,這樣可以節(jié)省開發(fā)周期并且蘋果和安卓用戶都可使用。mpvue是使用Vue.js的前端框架。在此之上修改了Vue.js的runtime和compiler,使其能夠直接運(yùn)行在小程序的環(huán)境中,從而為小程序的開發(fā)引入了整套Vue.js開發(fā)體驗[8]。
小程序的設(shè)計如圖7所示,最頂端是天氣模塊,調(diào)用了免費(fèi)開源的天氣API,小程序會先請求獲取用戶的位置,然后顯示所在位置的空氣質(zhì)量、空氣指數(shù)、天氣,并給出今天的穿衣建議。在天氣模塊的下方有6個模塊,包含2個顯示模塊和4個控制模塊。顯示模塊實(shí)時顯示溫濕度,控制模塊可以控制下位機(jī)實(shí)現(xiàn)功能。
圖7 微信小程序上位機(jī)
串口測試選用的軟件是XCOM V2。將電路的串口用Type-C線與電腦相連,選擇好串口COM號,然后把波特率設(shè)置為115200。打開串口,觀察數(shù)據(jù)變化。每次向服務(wù)器發(fā)送json格式的消息。消息內(nèi)容中,第一個是溫度,第二個是濕度,然后是Led小夜燈、防盜模式、睡眠模式和舵機(jī)的狀態(tài)值,0表示關(guān)閉,1表示開啟。
語音識別測試使用SSCOM串口助手,連接到語音模塊的串口,然后測試通信狀況并采集數(shù)據(jù),解析數(shù)據(jù)包格式。如圖8所示,經(jīng)測試工作正常,語音識別快速準(zhǔn)確。
圖8 語音模塊串口測試結(jié)果圖
上位機(jī)是手機(jī)端的微信小程序。先在微信開發(fā)者工具中運(yùn)行代碼測試,看是否能正常運(yùn)行并連接到服務(wù)器。然后再測試手機(jī)端,在手機(jī)連接網(wǎng)絡(luò)的情況下,打開多功能智能開關(guān)小程序,觀察數(shù)據(jù)顯示結(jié)果。手機(jī)在連接4G網(wǎng)絡(luò)的狀態(tài)下,正常連接到服務(wù)器,并正確顯示下位機(jī)的溫濕度數(shù)據(jù),如圖9所示,并成功對下位機(jī)的LED小夜燈進(jìn)行了控制。
本方案溫濕度的測試使用溫濕度儀在相同環(huán)境下測出第三方數(shù)據(jù),計算得到相對誤差,將所得數(shù)據(jù)進(jìn)行整理后,得到表1和表2。
圖9 手機(jī)端上位機(jī)測試結(jié)果圖
表1 溫度測量數(shù)據(jù)
表2 濕度測量數(shù)據(jù)
本系統(tǒng)達(dá)到了預(yù)期的效果,數(shù)據(jù)的相對誤差控制在5%以內(nèi),且對數(shù)據(jù)傳輸?shù)膶?shí)時性和穩(wěn)定性進(jìn)行驗證,發(fā)現(xiàn)運(yùn)行狀況符合預(yù)期。
文章從物聯(lián)網(wǎng)的內(nèi)涵入手,指出傳統(tǒng)智能家居的缺點(diǎn),提供了一個不需要網(wǎng)關(guān),直接通過WIFI與服務(wù)器直連,手機(jī)端也可以監(jiān)控數(shù)據(jù)的多功能智能開關(guān)面板設(shè)計方案。本系統(tǒng)提供溫濕度檢測、防盜報警、人體檢測開啟小夜燈、電機(jī)開燈等功能??紤]到配網(wǎng)要求,在硬件上留有AT24C02芯片,通過IIC與STM32通信。系統(tǒng)調(diào)試結(jié)果表明:溫濕度測量結(jié)果準(zhǔn)確可靠,防盜功能運(yùn)行穩(wěn)定,能滿足用戶對智能開關(guān)的基本需求。手機(jī)APP中人性化的交互頁面設(shè)計、獨(dú)立的語音助手增加了用戶體驗。當(dāng)然,該系統(tǒng)尚存在不足之處,對于和其他智能家電設(shè)備的互聯(lián)功能還有待進(jìn)一步完善。