摘 要:普通空調(diào)因?yàn)闊o(wú)法對(duì)其進(jìn)行遠(yuǎn)程監(jiān)控而普遍存在用電浪費(fèi)、不能提前開(kāi)啟進(jìn)而獲得更好客戶體驗(yàn)等問(wèn)題。因此,設(shè)計(jì)基于OneNET云平臺(tái)的智能空調(diào)系統(tǒng),實(shí)現(xiàn)對(duì)普通空調(diào)進(jìn)行遠(yuǎn)程控制。系統(tǒng)由智能空調(diào)控制終端、手機(jī)APP、OneNET云平臺(tái)三部分構(gòu)成,智能空調(diào)控制終端采用STM32F103C8T6作為主控,外接ESP8266、XK555、DHT11等模塊實(shí)現(xiàn)網(wǎng)絡(luò)通信、紅外控制、溫濕度采集等功能;手機(jī)APP通過(guò)云平臺(tái)遠(yuǎn)程控制空調(diào)的開(kāi)、關(guān)、溫度設(shè)定等,并顯示現(xiàn)場(chǎng)溫濕度數(shù)據(jù);OneNET云平臺(tái)上創(chuàng)建對(duì)應(yīng)真實(shí)設(shè)備的虛擬設(shè)備,實(shí)現(xiàn)手機(jī)APP和智能空調(diào)控制終端的點(diǎn)對(duì)點(diǎn)通信。實(shí)驗(yàn)表明:只要在云平臺(tái)上做好配置,智能空調(diào)控制系統(tǒng)就能夠?qū)崿F(xiàn)利用手機(jī)APP對(duì)多臺(tái)空調(diào)進(jìn)行遠(yuǎn)程控制,進(jìn)而提高客戶體驗(yàn),減少用電浪費(fèi)。
關(guān)鍵詞:智能空調(diào);遠(yuǎn)程控制;OneNET;XK555;ESP8266;STM32F103C8T6;自動(dòng)配網(wǎng);對(duì)碼
中圖分類(lèi)號(hào):TP393.0 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2095-1302(2024)07-0-05
0 引 言
加強(qiáng)空調(diào)管理對(duì)于節(jié)能減排、控制運(yùn)行費(fèi)用有重要且現(xiàn)實(shí)的意義。當(dāng)前市場(chǎng)上已推出具有WiFi功能[1]的智能空調(diào),可以實(shí)現(xiàn)遠(yuǎn)程控制,但是價(jià)格比普通空調(diào)貴得多,而且對(duì)之前已經(jīng)售出的普通空調(diào)仍然不能做到遠(yuǎn)程控制。本文通過(guò)外置的智能空調(diào)控制終端,配合手機(jī)APP、云平臺(tái),可以實(shí)現(xiàn)遠(yuǎn)程控制普通空調(diào)。在手機(jī)APP上實(shí)現(xiàn)空調(diào)遙控器所具有的所有命令,如開(kāi)、關(guān)、設(shè)置溫度、制冷、制熱等,將這些命令通過(guò)云平臺(tái)轉(zhuǎn)發(fā)給智能空調(diào)控制終端,終端再通過(guò)XK555將命令轉(zhuǎn)換為紅外信號(hào),從而實(shí)現(xiàn)通過(guò)手機(jī)APP遠(yuǎn)程控制空調(diào)的目的。智能空調(diào)控制終端通過(guò)DHT11采集溫濕度數(shù)據(jù),上傳給云平臺(tái),云平臺(tái)轉(zhuǎn)發(fā)給手機(jī)APP進(jìn)行顯示,以此獲取現(xiàn)場(chǎng)實(shí)時(shí)信息。
1 智能空調(diào)系統(tǒng)數(shù)據(jù)流
OneNET是由中國(guó)移動(dòng)打造的PaaS物聯(lián)網(wǎng)開(kāi)放平
臺(tái)[2],基于物聯(lián)網(wǎng)特點(diǎn)打造專業(yè)化網(wǎng)絡(luò)通道,提供“云-管-端”一體化的智能通道和支撐系統(tǒng)。在OneNET云平臺(tái)上創(chuàng)建應(yīng)用,在應(yīng)用下建立虛擬設(shè)備,每個(gè)虛擬設(shè)備有其設(shè)備ID和APIKey;手機(jī)APP、智能空調(diào)控制終端作為真實(shí)設(shè)備接入,接入時(shí)需要發(fā)送設(shè)備ID和APIKey對(duì)應(yīng)應(yīng)用下的虛擬設(shè)備,建立真實(shí)設(shè)備和虛擬設(shè)備的對(duì)應(yīng)關(guān)系。手機(jī)APP下發(fā)控制命令,控制命令中帶有接收該命令的設(shè)備ID,OneNET云平臺(tái)收到后轉(zhuǎn)發(fā)給該設(shè)備ID對(duì)應(yīng)的真實(shí)的智能空調(diào)控制終端,智能空調(diào)控制終端根據(jù)接收的命令產(chǎn)生相應(yīng)的紅外信號(hào),控制空調(diào)。在回傳空調(diào)的反饋數(shù)據(jù)和終端采集的傳感器數(shù)據(jù)時(shí)會(huì)帶上手機(jī)APP的設(shè)備ID,OneNET云平臺(tái)收到后轉(zhuǎn)發(fā)給該設(shè)備ID對(duì)應(yīng)的真實(shí)手機(jī)設(shè)備上的APP。至此,通過(guò)OneNET云平臺(tái)實(shí)現(xiàn)了手機(jī)APP和智能空調(diào)控制終端的點(diǎn)對(duì)點(diǎn)通信。智能空調(diào)系統(tǒng)數(shù)據(jù)流如圖1所示。云平臺(tái)上的設(shè)備情況如圖2所示。
2 硬件框圖
智能空調(diào)控制終端硬件框圖如圖3所示。
STM32F103C8T6是意法半導(dǎo)體公司推出的一款STM32F10X系列中低端芯片[3],其基于ARM Cortex-M3內(nèi)核,頻率為72 MHz,具有64 KB閃存、20 KB SRAM和2 KB E2PROM,包含多個(gè)USART、SPI、I2C、定時(shí)器等外設(shè)資源,能滿足當(dāng)前的應(yīng)用需要。STM32F103C8T6的性價(jià)比極高,因此在智能空調(diào)控制系統(tǒng)中選擇它作為主控MCU。
ESP8266是一款超低功耗的UART-WiFi透?jìng)髂K[4],是一個(gè)高性能的無(wú)線SoC,其內(nèi)部集成有超低功耗的32位微型MCU,主頻支持80 MHz和160 MHz,內(nèi)置TCP/IP協(xié)議棧,支持STA、AP、STA+AP三種工作模式。ESP8266支持SDK和AT開(kāi)發(fā),其中SDK使用樂(lè)鑫提供的庫(kù)函數(shù)來(lái)編寫(xiě)程序,AT 開(kāi)發(fā)是指使用外部單片機(jī)通過(guò)串口和WiFi模塊通信,其通信的指令中包含AT前綴,這種開(kāi)發(fā)方式的開(kāi)發(fā)周期短。主控MCU通過(guò)串口和ESP8266相連,發(fā)送AT指令[5],通過(guò)ESP8266與外部進(jìn)行網(wǎng)絡(luò)通信。AT指令有測(cè)試、查詢、設(shè)置、執(zhí)行四種類(lèi)型,見(jiàn)表1所列。
XK555是一款內(nèi)置紅外碼庫(kù)的高性能芯片,使用簡(jiǎn)單,功耗低,覆蓋國(guó)內(nèi)外主要電器品牌,與主控MCU通過(guò)串口相連,內(nèi)置碼庫(kù)數(shù)據(jù),無(wú)需額外支付紅外碼庫(kù)費(fèi)用。XK555定義了14種設(shè)備遙控類(lèi)型,其中包含空調(diào)、電視、機(jī)頂盒、電視盒子、投影儀、功放、掃地機(jī)器人等,并且有2個(gè)是自定義學(xué)習(xí)型,使用時(shí)可以自由切換命令,每個(gè)自定義學(xué)習(xí)類(lèi)型可以學(xué)習(xí)32個(gè)按鍵,按鍵名稱由主機(jī)來(lái)保存,XK555不區(qū)分按鍵功能。
以XK555的空調(diào)遙控類(lèi)型為例,控制命令都是6 bit,常用控制命令如下。
(1)新建遙控器
控制命令涉及的字段:0x80、Device_id、KfidH、KfidL、00、XOR校驗(yàn)。其中,0x80為命令詞;Device_id為需要新建的遙控器類(lèi)型,例如:1表示空調(diào),2表示電視,3表示機(jī)頂盒,4表示DVD播放器,5表示電風(fēng)扇,6表示空氣凈化器,7表示電視盒子,8表示投影儀,9表示音箱,10表示熱水器,11表示燈,12表示自定義學(xué)習(xí)型,13表示掃地機(jī)器人;KfidH、KfidL為16 bit的遙控器ID,且Kfid的獲取方式有兩種,分別為調(diào)用一鍵匹配接口獲取、通過(guò)查閱品牌型號(hào)對(duì)應(yīng)表獲取。功能:新建一個(gè)遙控器,使用遙控器前必須要先建立一個(gè)遙控器,否則其他調(diào)用會(huì)失敗或不正確。
(2)一鍵匹配
控制命令涉及的字段:0x81、Device_id、0、0、00、XOR校驗(yàn)。其中,0x81為命令詞;Device_id為需要匹配的遙控器類(lèi)型。功能:通過(guò)使用原配遙控器向XK555發(fā)送電源開(kāi)機(jī)按鍵指令來(lái)搜索本地碼庫(kù)對(duì)應(yīng)的ID;XK555收到匹配命令后,指示燈閃爍,提示用戶按下遙控器電源鍵,搜索成功后會(huì)返回一個(gè)short型的數(shù)值(KfidH,KfidL)。若超過(guò)10" s沒(méi)有收到信號(hào),則反饋失敗。返回0x06、0x89、KfidH、KfidL、0x00、XOR,表示搜索成功;返回0x06、0xE0、DD、0x00、0x00、XOR,表示搜索失敗。
(3)發(fā)射紅外信號(hào)
控制命令涉及的字段:0x86、Device_id、Keyid、Keyvalue、00、XOR校驗(yàn)。其中,0x86為命令詞;Device_id為遙控器ID;Keyid為按鍵ID;Keyvalue為按鍵參數(shù)值,具體參考表2的按鍵順序。返回0x06、0x89、0x00、0x00、0x00、0x8F,表示執(zhí)行成功;返回0x06、0xE0、DD、0x00、0x00、XOR,表示執(zhí)行失敗,其中DD為錯(cuò)誤ID。功能:發(fā)射紅外控制信號(hào)。
通過(guò)XK555控制一臺(tái)空調(diào),首先需要發(fā)送一鍵匹配命令,獲取KfidH、KfidL;然后發(fā)送新建遙控器命令,成功后即可發(fā)送發(fā)射紅外信號(hào)命令控制空調(diào)。
DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度復(fù)合傳感器,包括一個(gè)電阻式感濕元件和一個(gè)NTC測(cè)溫元件。微控制器MCU與DHT11之間通過(guò)GPIO口相連,采用單總線數(shù)據(jù)格式進(jìn)行通信和同步,一次通信時(shí)間在4 ms左右。
OLED簡(jiǎn)單易用,占用較少GPIO口,常見(jiàn)有4針、7針
兩種引腳,分別采用I2C、SPI通信協(xié)議,由3~5.5 V電源供電。
3 軟件實(shí)現(xiàn)
如圖4所示,配置階段分為兩個(gè)步驟。
(1)配置智能空調(diào)控制終端的設(shè)備ID、APIKey
智能空調(diào)控制終端的ESP8266首先工作在服務(wù)器模式,提供熱點(diǎn)服務(wù),給出服務(wù)器IP、Port,手機(jī)APP接入熱點(diǎn),輸入服務(wù)器IP、Port,作為客戶端連接服務(wù)器;將登錄云平臺(tái)時(shí)需要提交的設(shè)備ID、APIKey以Socket方式傳輸給終端。
(2)配置智能空調(diào)控制終端連接互聯(lián)網(wǎng)時(shí)用到的WiFi熱點(diǎn)、密碼
ESP8266提供SmartConfig[6]功能,配合安信可官方提供的自動(dòng)配網(wǎng)程序,自動(dòng)搜索可以使用的WiFi熱點(diǎn),智能空調(diào)控制終端將獲得的WiFi熱點(diǎn)和密碼保存下來(lái),用于后續(xù)連接互聯(lián)網(wǎng)。
完成配置后,進(jìn)入命令控制階段。智能空調(diào)控制終端首先要和空調(diào)遙控器進(jìn)行對(duì)碼,學(xué)習(xí)紅外調(diào)制解調(diào)的參數(shù),為后續(xù)接收命令控制空調(diào)做準(zhǔn)備。終端發(fā)送一鍵匹配命令給XK555,進(jìn)入匹配模式,只需將空調(diào)遙控器對(duì)著XK555按下電源鍵,即可完成對(duì)碼,對(duì)碼成功則在終端顯示匹配成功。
智能空調(diào)控制終端利用在配置階段獲得的虛擬設(shè)備ID和APIKey登錄云平臺(tái)。登錄成功后,顯示終端當(dāng)前的狀態(tài),包括溫濕度數(shù)據(jù)、XK555的狀態(tài)等。云平臺(tái)上也會(huì)顯示終端設(shè)備是否在線,若設(shè)備在線,智能空調(diào)控制終端定時(shí)發(fā)送心跳消息,維持與云平臺(tái)的長(zhǎng)連接。
智能空調(diào)控制終端使用串口1輸出調(diào)試信息;串口2外接X(jué)K555紅外控制模塊,發(fā)送紅外控制命令給XK555,XK555產(chǎn)生調(diào)制的紅外信號(hào)控制普通空調(diào),接收、解調(diào)普通空調(diào)的反饋數(shù)據(jù),再通過(guò)串口2返回給主控;串口3外接ESP8266,負(fù)責(zé)接收云平臺(tái)轉(zhuǎn)發(fā)過(guò)來(lái)的手機(jī)APP的命令,并上傳溫濕度數(shù)據(jù)、心跳消息給云平臺(tái)。串口1、2、3工作在中斷方式下,為保證能及時(shí)收到云平臺(tái)的數(shù)據(jù),串口3優(yōu)先級(jí)設(shè)置得最高,串口2優(yōu)先級(jí)次之,串口1優(yōu)先級(jí)最低。
主流程采用輪詢方式,周期性檢查是否收到云平臺(tái)轉(zhuǎn)發(fā)的命令,若收到,解析EDP協(xié)議[7]獲取命令內(nèi)容,并將命令重新構(gòu)造成符合XK555的協(xié)議格式,通過(guò)串口2發(fā)送給XK555;主流程還需要維護(hù)與云平臺(tái)的長(zhǎng)連接,周期性發(fā)送心跳消息給云平臺(tái),若發(fā)現(xiàn)通信異常,需要斷開(kāi)連接,重連云平臺(tái)。智能空調(diào)控制終端流程如圖5所示。
手機(jī)APP基于Android Studio開(kāi)發(fā),設(shè)計(jì)了登錄、添加設(shè)備、初始化設(shè)備、智能空調(diào)控制、日志等界面,編寫(xiě)EDP協(xié)議類(lèi),實(shí)現(xiàn)手機(jī)APP以EDP協(xié)議和云平臺(tái)通信,使用了Android的Activity、Thread、SQLite、Fragment、Adapter等組件和特性。
手機(jī)APP可以同時(shí)控制多個(gè)智能空調(diào)控制終端,只需要在圖6(a)所示的登錄界面上點(diǎn)擊右上角添加設(shè)備,即跳轉(zhuǎn)到圖6(b)所示的添加設(shè)備界面,需要輸入設(shè)備昵稱(一般用房間號(hào)碼表示)、設(shè)備在云平臺(tái)上的虛擬設(shè)備ID、空調(diào)品牌等信息;點(diǎn)擊確定按鈕即進(jìn)入到圖6(c)所示的初始化設(shè)備界面。初始化設(shè)備界面在配置階段使用,需要輸入以智能空調(diào)控制終端作為服務(wù)器時(shí)的IP、Port,以Socket方式將設(shè)備ID、APIKey等信息發(fā)送給智能空調(diào)控制終端;配置終端,點(diǎn)擊“確定”之后可以看到在登錄界面多了一個(gè)目的設(shè)備,點(diǎn)擊垃圾桶圖標(biāo)可以刪除該目的設(shè)備,點(diǎn)擊書(shū)寫(xiě)圖標(biāo)可以對(duì)設(shè)備信息進(jìn)行修改。
在登錄界面選擇需要控制的目的設(shè)備,可以選多個(gè),點(diǎn)擊連接即進(jìn)入到圖6(d)所示的智能空調(diào)控制界面,點(diǎn)擊房間昵稱即表示需要與該房間的智能空調(diào)控制終端通信。房間昵稱用房間號(hào)表示,即601、602等,選中602,點(diǎn)擊其他圖標(biāo),比如開(kāi)、關(guān)等,系統(tǒng)會(huì)將命令發(fā)給602的智能空調(diào)控制終端,室內(nèi)溫度、濕度數(shù)據(jù)也會(huì)上傳至602的智能空調(diào)控制終端。點(diǎn)擊右上角的記事本圖標(biāo),會(huì)進(jìn)入到圖6(e)所示的日志界面。
為實(shí)現(xiàn)手機(jī)APP對(duì)多個(gè)終端的控制,用數(shù)據(jù)庫(kù)SQLite[8]存儲(chǔ)空調(diào)品牌信息,設(shè)計(jì)BrandAdapter類(lèi)管理設(shè)備信息,用Listlt;Stringgt;類(lèi)型定義設(shè)備ID、設(shè)備昵稱、空調(diào)品牌等成員變量,BrandAdapter類(lèi)繼承RecyclerView.Adapte類(lèi)[9],并重寫(xiě)三個(gè)抽象方法:onCreateViewHolder、onBindViewHolder和getItemCount。調(diào)用這些方法后,子項(xiàng)就既有了布局又有了數(shù)據(jù)。不同終端有不同的溫濕度數(shù)據(jù),選中設(shè)備昵稱后,即可顯示對(duì)應(yīng)終端的溫濕度數(shù)據(jù),設(shè)計(jì)HumitureFragment類(lèi)管理溫濕度數(shù)據(jù)。HumitureFragment類(lèi)繼承Fragment[10]類(lèi),F(xiàn)ragment是一種可以嵌入在活動(dòng)中的UI片段,能夠讓程序更加合理和充分地利用大屏幕的空間,可以將其看成一個(gè)小型Activity,又稱作Activity片段。使用Fragment可以把屏幕劃分成幾塊,然后進(jìn)行分組,并進(jìn)行模塊化管理。Fragment不能單獨(dú)使用,需要嵌套在Activity中使用。當(dāng)智能空調(diào)控制界面Activity接收到云平臺(tái)轉(zhuǎn)發(fā)過(guò)來(lái)的溫濕度數(shù)據(jù)后,傳給對(duì)應(yīng)終端的HumitureFragment,刷新視圖,即可顯示出最新的溫濕度數(shù)據(jù)。
4 結(jié) 語(yǔ)
本文提出并實(shí)現(xiàn)了通過(guò)手機(jī)APP基于云平臺(tái)遠(yuǎn)程控制普通空調(diào)的系統(tǒng),控制終端在配置階段工作在服務(wù)器模式;手機(jī)APP作為客戶端連接服務(wù)器,對(duì)終端進(jìn)行配置;使用ESP8266的SmartConfig功能,終端自動(dòng)獲取WiFi熱點(diǎn)及密碼;使用XK555的一鍵匹配功能自動(dòng)進(jìn)行空調(diào)對(duì)碼,終端配置靈活,有自適應(yīng)性;在手機(jī)APP上可實(shí)現(xiàn)一對(duì)多的終端控制,有較強(qiáng)的實(shí)用性、靈活性。本文系統(tǒng)基于云平臺(tái)的“云-管-端”模式開(kāi)發(fā),對(duì)類(lèi)似項(xiàng)目的開(kāi)發(fā)有借鑒意義。
參考文獻(xiàn)
[1]茍少旎.淺談寶雞廣電“全屋WiFi”技術(shù)應(yīng)用[J].中國(guó)有線電視,2023,31(6):39-42.
[2]尹春杰,王光旭,趙欽,等.基于OneNET的需求側(cè)用電信息監(jiān)測(cè)系統(tǒng)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2023,23(2):38-41.
[3]黃鳳英.基于STM32F103C8T6單片機(jī)的多功能智能手表設(shè)計(jì)[J].物聯(lián)網(wǎng)技術(shù),2019,9(3):49-51.
[4]管嘉誠(chéng),李曉烽,黃志芳,等.基于ESP8266與機(jī)智云的物聯(lián)網(wǎng)智能家居[J].物聯(lián)網(wǎng)技術(shù),2023,13(3):140-142.
[5]黃玉金,楊越,薛偉,等.無(wú)線模塊的AT指令UDP透?jìng)髟O(shè)計(jì)[J].電子產(chǎn)品世界,2018,25(1):34-36.
[6]田麗娜. WiFi一鍵聯(lián)網(wǎng)SmartConfig技術(shù)的原理及應(yīng)用[J].信息與電腦(理論版),2018,12(20):152-154.
[7]李白華,孫濤.基于EDP協(xié)議的溫濕度在線檢測(cè)系統(tǒng)[J].通信電源技術(shù),2020,37(10):18-20.
[8]陳敬靜. SQLite數(shù)據(jù)庫(kù)研究與可視化[D].南京:南京郵電大學(xué),2020.
[9]邵國(guó)紅. Android開(kāi)發(fā)中常用數(shù)據(jù)適配器的應(yīng)用研究[J].信息系統(tǒng)工程,2019,32(4):86-88.
[10]郭雨佳,韓雨辰,趙明英,等. Android開(kāi)發(fā)中Activity和Fragment+的通信方式分析[J].電子世界,2021,43(11):98-100.