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