尹文博 李丹 鐘昆 王寶江



摘要:針對目前傳統(tǒng)的家居控制系統(tǒng)設(shè)備不能協(xié)同工作以及人機(jī)交互性不好等問題,設(shè)計(jì)了一種基于ESP32的家庭智能語音控制系統(tǒng)。該系統(tǒng)首先通過Wi-Fi連接到互聯(lián)網(wǎng)進(jìn)行智能配網(wǎng)的設(shè)置;其次,使用MQTT協(xié)議進(jìn)行數(shù)據(jù)間的傳輸、使用LVGL設(shè)計(jì)人機(jī)交互界面、用天貓精靈進(jìn)行語音控制,并接入騰訊云語音平臺進(jìn)行語音合成、DHT11傳感器進(jìn)行溫濕度檢測;最后,開發(fā)微信小程序客戶端進(jìn)行遠(yuǎn)程控制,并使用Free RTOS系統(tǒng)來運(yùn)行各個模塊,從微信小程序的界面可知,該系統(tǒng)實(shí)現(xiàn)了遠(yuǎn)程控制、定時任務(wù)、語音合成、檢測家庭狀況等功能,同時還有一個人機(jī)交互的終端控制設(shè)備(基于ESP32 Wi-Fi芯片設(shè)計(jì)),實(shí)現(xiàn)了系統(tǒng)的統(tǒng)一控制,滿足了人們對智能家居的需求。
關(guān)鍵詞:ESP32;智能語音控制;智能配網(wǎng);MQTT協(xié)議;DHT11
中圖分類號:TP18? ? ? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2022)21-0067-03
開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID):
1 引言
隨著科技以及經(jīng)濟(jì)的發(fā)展,人們對生活質(zhì)量要求也越來越高,然而智能家居的出現(xiàn)改變了人們的生活方式[1],提升了人們的日常生活水平。智能家居是通過將家庭中的各種電氣化等設(shè)備連接在一起,實(shí)行統(tǒng)一管理的一套智能設(shè)備控制體系[2]。目前,華為和小米是國內(nèi)智能家居做得比較好的,其中小米是基于ARM微處理器,華為是基于Hilink協(xié)議+Liteos+芯片IOT三合一[3],據(jù)調(diào)查,我國的智能家居市場在2018年規(guī)模已達(dá)到1396億元[4],2020時的市值達(dá)到8000億元[5],從市場角度來看,智能家居的前景非常好,因此,設(shè)計(jì)一款智能家居系統(tǒng)具有十分重要的研究意義和研究價(jià)值。
近年來,有不少學(xué)者提出了不同的智能家居方案,可以滿足人們的不同需求,但是為了更好地改善人們的生活,提高信息化家居管理,本文設(shè)計(jì)了一款基于ESP32的家庭智能語音控制系統(tǒng),該控制系統(tǒng)支持終端、語音、遠(yuǎn)程等多種控制方式,并且支持多設(shè)備接入,具有良好的應(yīng)用前景。
2 模塊設(shè)計(jì)
2.1 智能配網(wǎng)的設(shè)計(jì)
由于系統(tǒng)的遠(yuǎn)程控制等功能需要連接網(wǎng)絡(luò),所以配網(wǎng)環(huán)節(jié)必不可少,設(shè)備初次啟動或者無法連接到可用Wi-Fi時,會自動進(jìn)入配網(wǎng)狀態(tài),可以根據(jù)屏幕的提示進(jìn)行配網(wǎng)操作。設(shè)備配網(wǎng)首先需要將ESP32設(shè)置為AP熱點(diǎn)模式,之后用手機(jī)連接名為ESP32_WebConfig的熱點(diǎn),連接上熱點(diǎn)之后,在瀏覽器中輸入屏幕中的IP地址進(jìn)入配網(wǎng)頁面,然后下拉列表選擇Wi-Fi名稱后輸入密碼,點(diǎn)擊“提交”即可。如圖1、圖2所示。
2.2 遠(yuǎn)程控制的設(shè)計(jì)
遠(yuǎn)程控制[6]是一種智能家居的基本控制方式之一,本文采用較為成熟的MQTT協(xié)議[4]進(jìn)行設(shè)備間數(shù)據(jù)傳輸。首先基于ESP32的控制終端通過Wi-Fi接入互聯(lián)網(wǎng),通過訂閱App端的主題topic接收來自App端發(fā)送的JSON格式的消息。當(dāng)ESP32接收并解析device_id為對應(yīng)ESP32端的device_id時,再進(jìn)行data的解析,解析出command及device_name,command為控制信息,device_name為要控制的設(shè)備名稱,微信小程序也采用該格式獲取溫濕度等信息。數(shù)據(jù)格式如下:
{
“deviced_id”:“1”,
“data”:{
“command”:“OPEN”,
“device_name”:“LIGHT”,
}
}
當(dāng)設(shè)備接收到控制電燈的命令時,能夠通過控制繼電器來實(shí)現(xiàn)控制電燈的開和關(guān)。其他設(shè)備也采用JSON格式的數(shù)據(jù)進(jìn)行傳輸,這樣能讓數(shù)據(jù)格式統(tǒng)一化,便于移植。
2.3 語音控制的設(shè)計(jì)
本文的智能語音控制[7]是通過天貓精靈、小度、小愛同學(xué)進(jìn)行解析控制的,通過給天貓精靈等智能音箱Oauth授權(quán)之后,可以在天貓精靈等音箱中進(jìn)行設(shè)備添加,添加之后進(jìn)行設(shè)備掃描,掃描出已經(jīng)接入天貓精靈的設(shè)備可以由天貓精靈語音控制,流程圖如圖3所示,其中,實(shí)線箭頭是響應(yīng)請求,虛線箭頭是發(fā)送請求。
2.4 定時任務(wù)的設(shè)計(jì)
系統(tǒng)通過微信小程序發(fā)送任務(wù)的定時時間以及事件,設(shè)備接收并解析定時時間及任務(wù)后,設(shè)置硬件定時器的數(shù)值,到達(dá)設(shè)定的值后,定時器會產(chǎn)生中斷。為了讓定時時間精確,所以建議在中斷服務(wù)函數(shù)中盡量不進(jìn)行其他操作,可以通過設(shè)定一個標(biāo)志位的值,然后判斷標(biāo)志進(jìn)行開關(guān)等操作。
2.5 紅外控制空調(diào)的設(shè)計(jì)
各公司空調(diào)并未對外開放空調(diào)控制的接口,所以系統(tǒng)只能采用最原始的方法,通過類似遙控器的方式去控制空調(diào),首先系統(tǒng)需要使用VS1838B解碼并錄制自己空調(diào)的紅外碼,然后寫入到非易失性存儲 (NVS)中,然后需要進(jìn)行控制時便讀取對應(yīng)區(qū)域內(nèi)的紅外空調(diào)碼并使用紅外發(fā)射管(可使用共射放大電路進(jìn)行信號放大)進(jìn)行發(fā)送。圖4所示為原理圖。
紅外編碼分為PWM(脈沖寬度調(diào)制)以及PPM(脈沖位置調(diào)制)。
PWM(脈沖寬度調(diào)制):以發(fā)射紅外載波的占空比來表示數(shù)據(jù)“0”和“1”。例如常用的電視遙控器,使用NEC協(xié)議,數(shù)據(jù)“0”為載波發(fā)射0.56ms,不發(fā)射0.56ms;數(shù)據(jù)“1”為載波發(fā)射0.56ms,不發(fā)射1.68ms; NEC 格式的編碼的引導(dǎo)碼為發(fā)送載波9ms之后不發(fā)送載波4.5ms,使用的載波頻率為38kHz[8]。
PPM(脈沖位置調(diào)制):以發(fā)射載波的位置表示數(shù)據(jù)“0”和“1”。從發(fā)射載波到不發(fā)射載波為“0”,從不發(fā)射載波到發(fā)射載波為“1”。其發(fā)射載波和不發(fā)射載波的時間都為0.68ms[8]。
紅外遙控器的編碼格式通常有兩種格式:NEC 和RC5,為了方便解碼使用IRremote庫進(jìn)行空調(diào)解碼。IRremote集成了大多數(shù)紅外協(xié)議,所以能夠直接對著VS1838B進(jìn)行紅外碼的發(fā)送,之后通過解碼之后寫入NVS中即可,需要時直接從對應(yīng)區(qū)域中讀取。
2.6 人機(jī)交互界面的設(shè)計(jì)
一個好的控制系統(tǒng)需要有良好的交互系統(tǒng),而ESP32的RAM只有520k,且其中能夠供用戶使用的更少,QT等GUI庫并不能在ESP32上運(yùn)行,因此,本系統(tǒng)采用了性能需求較小的LVGL這個GUI庫。要使用這個GUI庫,首先需要將它移植到ESP32上,之后需要移植輸出設(shè)備(2.8寸LCD)、輸入設(shè)備(觸摸屏),以及文件系統(tǒng),圖5所示為移植時需要的函數(shù),圖6所示為部分GUI圖。
2.7 多設(shè)備接入和設(shè)備在線檢測的設(shè)計(jì)
系統(tǒng)可接入多個控制設(shè)備,只需要連接指定MQTT服務(wù)器,訂閱對應(yīng)主題topic并且按照前面介紹的JSON格式發(fā)送和接收數(shù)據(jù),就能夠進(jìn)行設(shè)備的接入,同時系統(tǒng)支持設(shè)備在線檢測,如果設(shè)備在10s內(nèi)并未發(fā)送心跳包,則判斷為設(shè)備故障或者下線,并且發(fā)送下線日志,檢測設(shè)備是否在線的流程圖如圖7所示。
2.8 語音合成的設(shè)計(jì)
系統(tǒng)通過接入第三方語音平臺進(jìn)行語音合成,來彌補(bǔ)ESP32的性能不足的缺點(diǎn)。系統(tǒng)接入騰訊云語音平臺進(jìn)行語音合成,然后通過服務(wù)器使用UDP協(xié)議發(fā)送語音文件到終端設(shè)備,由于ESP32的RAM較小,一次性無法發(fā)送完語音文件,因此,采用分次發(fā)送,服務(wù)器每次發(fā)送1024個字節(jié)的數(shù)據(jù),其中前24個字節(jié)是數(shù)據(jù)頭,后1000字節(jié)為有效數(shù)據(jù)。數(shù)據(jù)頭第一個字節(jié)為audio的長度,后面10個字節(jié)為audio,第12個字節(jié)為send的長度,后4個字節(jié)為send,第17個字節(jié)為所有文件幀的高8位,第18個字節(jié)為所有文件幀的低8位,第19個字節(jié)是當(dāng)前幀的高8位,第20個字節(jié)是當(dāng)前幀的低8位,第21個字節(jié)是剩余幀的高8位,第22個字節(jié)是剩余幀的低8位,剩余的1000個字節(jié)為有效數(shù)據(jù),圖8所示為數(shù)據(jù)包格式,圖9為語音合成流程。
2.9 溫濕度檢測的設(shè)計(jì)
本系統(tǒng)采用帶數(shù)字信號校準(zhǔn)的溫濕度傳感器DHT11,其傳感器有極高的可靠性和穩(wěn)定性,濕度精度為±5%RH,量程為20%~90%RH,溫度精度為±2攝氏度,量程為0~50攝氏度,滿足系統(tǒng)的需要,DHT11采用單線串行接口,通訊便捷[9]。DHT11的通訊協(xié)議具有嚴(yán)格的時序,主機(jī)通過拉低總線18ms,然后再拉高20~40us發(fā)起啟動信號,然后釋放總線,DHT11接收到信號之后DHT11會將總線拉低40~50us響應(yīng)主機(jī)。DHT11響應(yīng)主機(jī)之后會將總線拉高40~50us,并在之后進(jìn)行數(shù)據(jù)的傳輸。DHT11的數(shù)據(jù)“0”和數(shù)據(jù)“1”是通過高電平的持續(xù)時長來表示的,DHT11先將總線拉低12~14us,之后將會拉高總線,拉高電平時長持續(xù)26us~28us時表示數(shù)據(jù)“0”,持續(xù)時間70us為數(shù)據(jù)“1”,但一般是延時40us之后檢測引腳電平來判斷數(shù)據(jù)“0”和“1”。DHT11一次會發(fā)送40位數(shù)據(jù),也就是5個字節(jié),第1個字節(jié)表示8位濕度整數(shù),第2個字節(jié)表示8位濕度小數(shù),第3個字節(jié)表示8位溫度整數(shù),第4個字節(jié)為8位溫度小數(shù),第5個字節(jié)為校驗(yàn)位,當(dāng)前4個字節(jié)的和與第5個字節(jié)不相等時,表明數(shù)據(jù)發(fā)送時出錯,數(shù)據(jù)無效。
溫濕度檢測之后,會通過構(gòu)造的JSON字符串的格式將數(shù)據(jù)發(fā)送到小程序端,小程序?qū)SON字符串解析為JSON格式的數(shù)據(jù),獲取溫濕度,并且顯示出來,每天會將數(shù)據(jù)向服務(wù)器發(fā)送,服務(wù)器接收數(shù)據(jù)并保存,當(dāng)小程序訪問溫濕度詳情頁面時,會向服務(wù)器請求之前的溫濕度數(shù)據(jù),并繪制出表格,并且服務(wù)器每天會定時清空之前的數(shù)據(jù)。
2.10 微信小程序的設(shè)計(jì)
微信小程序支持遠(yuǎn)程控制,顯示溫濕度(24h)、定時任務(wù)、錄制紅外空調(diào)碼、語音合成(微信小程序端輸入提示內(nèi)容,內(nèi)容會在終端上音頻播放)、輸出日志等功能,如圖10所示。
2.11 使用實(shí)時操作系統(tǒng)(RTOS)運(yùn)行各個模塊
本系統(tǒng)使用了免費(fèi)開源的Free RTOS系統(tǒng),F(xiàn)ree RTOS是一個小型的實(shí)時操作系統(tǒng)內(nèi)核。作為一個輕量級的操作系統(tǒng),功能十分強(qiáng)大,其中包括:任務(wù)管理、時間管理、信號量、消息隊(duì)列、內(nèi)存管理、記錄功能、軟件定時器、協(xié)程等,可基本滿足本系統(tǒng)的需要[10]。系統(tǒng)中包含多個進(jìn)程,例如GUI界面顯示、DHT11溫濕度獲取、MQTT的網(wǎng)絡(luò)回調(diào)函數(shù)、UDP服務(wù)等等。網(wǎng)絡(luò)服務(wù)需要較高的優(yōu)先級,因此,在創(chuàng)建網(wǎng)絡(luò)服務(wù)進(jìn)程時給予較高的優(yōu)先級,GUI界面的顯示和DHT11溫濕度的獲取等進(jìn)程給予較低的優(yōu)先級,RTOS的任務(wù)調(diào)度會合理分配CPU資源,保證進(jìn)程的正常運(yùn)行。
3 系統(tǒng)的缺點(diǎn)及改進(jìn)方法
3.1 系統(tǒng)的缺點(diǎn)
系統(tǒng)的缺點(diǎn)首先是無法直接在本機(jī)中實(shí)現(xiàn)語音識別和語音合成,導(dǎo)致這些功能需要接入第三方服務(wù)平臺,其次,是系統(tǒng)的安全性,安全方面可以通過對設(shè)備間的數(shù)據(jù)及發(fā)送方式進(jìn)行加密,最后,檢測家庭環(huán)境情況的傳感器太少,需要增加傳感器,以便獲取更多家庭的信息。
3.2 改進(jìn)方法
1)更換主控芯片:更換為性能更強(qiáng)的全志H3,系統(tǒng)使用Linux系統(tǒng),能夠?qū)崿F(xiàn)更多有趣和實(shí)用的功能。
2)增加傳感器:超聲波傳感器可以檢測人走動,煙霧傳感器可以檢測火災(zāi)情況,增加攝像頭,用于家庭監(jiān)控。
3)數(shù)據(jù)傳輸加密:在數(shù)據(jù)傳輸過程中,可以采取加密的措施來保證數(shù)據(jù)的安全性。
4 結(jié)束語
本文詳細(xì)介紹了基于ESP32家庭智能語音控制系統(tǒng)的設(shè)計(jì)過程,主要包括智能配網(wǎng)模塊、遠(yuǎn)程控制模塊、定時模塊、人機(jī)交互模塊、語音合成模塊,以及微信小程序的設(shè)計(jì)等。由結(jié)果可知,該系統(tǒng)實(shí)現(xiàn)了用語音控制家居設(shè)備,并且可以顯示溫度、濕度、定時、日志等內(nèi)容,采用本文系統(tǒng)對智能家居進(jìn)行遠(yuǎn)程控制,穩(wěn)定性高且成本低。本文設(shè)計(jì)的系統(tǒng)進(jìn)一步改變了人們的生活方式,提升了人們的生活水平,同時對智能家居的控制系統(tǒng)設(shè)計(jì)具有一定的借鑒意義。
參考文獻(xiàn):
[1] 胡曼冬.基于本體的智能家居關(guān)鍵技術(shù)研究[D].青島:中國海洋大學(xué),2014.
[2] 馮凱,童世華.智能家居的由來及其發(fā)展趨勢[J].中國新技術(shù)新產(chǎn)品,2010(6):7.
[3] 嚴(yán)涵婷,杜選,孫添程,等.基于ESP8266的智能家居系統(tǒng)開發(fā)[J].電腦知識與技術(shù),2021,17(27):136-138.
[4] 俞凌麗.基于云平臺的智能家居系統(tǒng)設(shè)計(jì)[D].杭州:浙江工業(yè)大學(xué),2020.
[5] 劉振.基于STM32智能家居的無線網(wǎng)關(guān)設(shè)計(jì)與實(shí)現(xiàn)[D].杭州:浙江理工大學(xué),2017.
[6] 任遠(yuǎn)林,徐奇.基于嵌入式單片機(jī)的智能家居遠(yuǎn)程控制系統(tǒng)設(shè)計(jì)[J].新鄉(xiāng)學(xué)院學(xué)報(bào),2021,38(3):72-76.
[7] 黨譽(yù)豪,王廷軍,張貫堯,等.家用智能語音垃圾箱的設(shè)計(jì)與應(yīng)用[J].科技風(fēng),2021(12):9-10,26.
[8] 李雪瑩.基于單片機(jī)的空調(diào)紅外線編解碼系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)[D].成都:電子科技大學(xué),2014.
[9] 徐鑫秀,趙士原.基于DHT11傳感器的機(jī)房溫濕度控制系統(tǒng)設(shè)計(jì)[J].現(xiàn)代信息科技,2020,4(14):57-59.
[10] 趙波.基于STM32和FreeRTOS的溫度測量系統(tǒng)設(shè)計(jì)[J].電子技術(shù)與軟件工程,2019(3):68-69.
【通聯(lián)編輯:謝媛媛】