張 萍
(廣東工貿(mào)職業(yè)技術(shù)學(xué)院 計算機與信息工程學(xué)院,廣州 510510)
當(dāng)前家電市場上已經(jīng)有不少廠家推出了智能空調(diào)產(chǎn)品[1],實現(xiàn)原理通常是以單片機作為控制芯片,內(nèi)置無線通信模塊(比如WiFi)與控制平臺通信.這種方式需要內(nèi)置無線通信模塊,只適用于新生產(chǎn)的新型號空調(diào),無法控制舊型號普通空調(diào).本文提出并實現(xiàn)了一種以手機APP作為客戶端,通過OneNet云平臺上的虛擬設(shè)備和外置智能空調(diào)控制終端,實現(xiàn)對普通空調(diào)進行遠程控制的系統(tǒng)[2].
整個系統(tǒng)分成3部分(如圖1):手機APP,OneNET云平臺上的虛擬設(shè)備,智能控制終端.手機APP通過無線網(wǎng)絡(luò)(通信運營商網(wǎng)絡(luò)、WiFi等)接入Internet與OneNET云平臺通信,智能空調(diào)控制終端通過WiFi[3]接入Internet與OneNET云平臺通信,OneNET云平臺上建有與手機APP和智能空調(diào)控制終端分別對應(yīng)的虛擬設(shè)備,實現(xiàn)手機APP與智能空調(diào)控制終端的點對點通信.

圖1 智能空調(diào)控制系統(tǒng)系統(tǒng)框圖
智能空調(diào)控制終端內(nèi)置溫濕度模塊采集周邊環(huán)境的溫濕度數(shù)據(jù),通過WiFi上傳給OneNET云平臺,OneNET云平臺將數(shù)據(jù)記錄到智能空調(diào)控制終端在OneNET云平臺上對應(yīng)的虛擬設(shè)備下,再轉(zhuǎn)發(fā)給手機APP在OneNET云平臺上對應(yīng)的虛擬設(shè)備,虛擬設(shè)備會將溫濕度數(shù)據(jù)傳給手機APP,在手機上能查看當(dāng)前環(huán)境的溫濕度數(shù)據(jù).
用戶可根據(jù)當(dāng)前溫濕度數(shù)據(jù),通過手機APP發(fā)送空調(diào)控制命令(開、關(guān)、設(shè)定溫度等)給OneNET云平臺,OneNET云平臺將控制命令記錄到手機APP在OneNET云平臺上對應(yīng)的虛擬設(shè)備下,再轉(zhuǎn)發(fā)給智能空調(diào)控制終端在OneNET云平臺上對應(yīng)的虛擬設(shè)備,虛擬設(shè)備會將控制命令傳給智能空調(diào)控制終端,智能空調(diào)控制終端內(nèi)置紅外模塊,產(chǎn)生紅外信號與普通空調(diào)通信,達到控制普通空調(diào)的效果.
如圖2所示,智能控制終端、手機APP采用Socket方式與云平臺通信,通過心跳保持與云平臺的長連接.系統(tǒng)中傳輸?shù)臄?shù)據(jù)根據(jù)方向分為2類:1)上行數(shù)據(jù),采集到的傳感器數(shù)據(jù);2)下行數(shù)據(jù),用戶通過手機APP發(fā)出的控制指令.

圖2 數(shù)據(jù)流圖
上行數(shù)據(jù)流:智能空調(diào)控制終端主控芯片STM32通過GPIO口接溫濕度傳感器,采集溫濕度數(shù)據(jù),通過串口發(fā)送給ESP8266無線通信模塊,由ESP8266發(fā)送給OneNET云平臺,再由云平臺轉(zhuǎn)發(fā)給手機APP.
下行數(shù)據(jù)流:手機APP發(fā)出控制指令,通過OneNET云平臺轉(zhuǎn)發(fā)給智能控制終端,控制終端根據(jù)指令構(gòu)造出空調(diào)控制碼,通過串口發(fā)送給空調(diào)控制模塊,空調(diào)控制模塊調(diào)制產(chǎn)生紅外信號,發(fā)送給普通空調(diào),普通空調(diào)接收解調(diào)紅外信號.
本系統(tǒng)設(shè)計了智能空調(diào)控制終端的硬件部分,并進行了驗證,主要分為6個模塊(如圖3):溫濕度采集模塊、無線通信(WiFi)模塊、空調(diào)控制(紅外通信)模塊、微處理器(主控)模塊、SD卡讀取(存儲)模塊、供電模塊.

圖3 智能空調(diào)控制系統(tǒng)硬件模塊圖
微處理器模塊采用了STM32F429IGT6作為MCU,該芯片配置非常強大,芯片主頻高達180 MHz,具有256 KB SRAM、1024FLASH、12個16位定時器、2個32位定時器、2個USB、140個通用IO口、8個串口等,完全能滿足現(xiàn)有的需求和后續(xù)的功能拓展.
溫度控制模塊采用DHT11,DHT11是一款能夠采集溫濕度數(shù)據(jù)的數(shù)字傳感器,與單片機等微處理器進行簡單的電路連接就能夠?qū)崟r采集本地濕度和溫度.DHT11與單片機之間可采用單總線進行通信,僅僅需要一個I/O口.采集一次,共產(chǎn)生40 bit的溫濕度數(shù)據(jù),通過單總線一次性傳給單片機,數(shù)據(jù)采用校驗和方式進行校驗,有效保證了數(shù)據(jù)傳輸?shù)臏蚀_性.功耗很低,5 V電源電壓下,最大平均工作電流0.5 mA.
無線通信模塊采用ALIENTEK推出的高性能UART-WIFI(串口—無線)模塊ATK-ESP8266[4].ATKESP8266板載ai-thinker公司的ESP8266模塊,內(nèi)置TCP/IP協(xié)議棧,通過串口與微處理器通信,能夠?qū)崿F(xiàn)串口與WiFi之間的轉(zhuǎn)換.通過ATK-ESP8266模塊,微處理器只需進行簡單的串口配置,即可通過網(wǎng)絡(luò)(WiFi)傳輸數(shù)據(jù).ATK-ESP8266模塊支持LVTTL串口,兼容3.3 V和5 V,方便與微處理器模塊連接.
空調(diào)控制模塊采用XK2233-1作為主控芯片,內(nèi)置豐富的定時器用來調(diào)制遙控信號,豐富的數(shù)據(jù)存儲器來存儲海量的空調(diào)控制碼表,覆蓋了市場上常見的空調(diào)品牌及其主要型號.工作電壓2~3.6 V,通過串口與微處理器連接.使用時,首先和普通空調(diào)對碼,微處理器從SD卡中讀取配置文件,獲取空調(diào)型號信息,構(gòu)造設(shè)置空調(diào)型號的數(shù)據(jù)幀通過串口發(fā)送給空調(diào)控制模塊,該模塊即被設(shè)置為該型號空調(diào)對應(yīng)的遙控器.后續(xù)接收到空調(diào)控制命令時,空調(diào)控制模塊會調(diào)制出與普通空調(diào)相匹配的紅外信號,用于控制普通空調(diào).
微處理器通過SDIO口讀取SD卡數(shù)據(jù).系統(tǒng)使用USB接口為微處理器模塊提供5 V電源,通過AMS1117-3.3產(chǎn)生3.3 V的輸出電壓,同時可為其他模塊提供5 V和3.3 V電源.
OneNET[4]是中國移動通信集團的物聯(lián)網(wǎng)開放云平臺,開發(fā)文檔詳細完善,開發(fā)者只需按照OneNET平臺的規(guī)范接入平臺,上傳設(shè)備數(shù)據(jù),平臺實現(xiàn)數(shù)據(jù)傳輸、數(shù)據(jù)存儲、數(shù)據(jù)管理等功能,支持HTTP、EDP、MQTT、RGMP等多種接入?yún)f(xié)議[5].
本系統(tǒng)采用EDP協(xié)議接入,利用OneNET云平臺實現(xiàn)手機和智能空調(diào)控制終端點對點通信.在OneNET云平臺上建立的設(shè)備情況如圖4.

圖4 OneNET云平臺上的虛擬設(shè)備
圖中APIKey和設(shè)備ID用于建立虛擬設(shè)備和實際設(shè)備的對應(yīng)關(guān)系,云平臺上的stmdata設(shè)備ID對應(yīng)實際的智能空調(diào)控制終端,temp設(shè)備ID對應(yīng)手機APP,APIKey表示設(shè)備關(guān)聯(lián)到平臺上某個應(yīng)用,兩個設(shè)備的APIKey相同,即表示關(guān)聯(lián)到同一個應(yīng)用.智能空調(diào)控制終端和手機APP作為終端連接OneNET云平臺,在登錄時需發(fā)送APIKey和設(shè)備ID給云平臺,平臺依據(jù)設(shè)備ID判斷某個設(shè)備上線,依據(jù)APIKey關(guān)聯(lián)應(yīng)用.終端發(fā)送EDP協(xié)議的消息時帶上目的設(shè)備ID,云平臺根據(jù)目的設(shè)備ID進行消息轉(zhuǎn)發(fā),實現(xiàn)不同終端間的點對點通信[6].
該系統(tǒng)軟件部分由手機APP和基于STM32的單片機程序組成.
手機APP以Android studio作為開發(fā)平臺,設(shè)計登錄、日志、溫濕度顯示、溫濕度控制4個UI(圖5),移植EDP協(xié)議到Android平臺,實現(xiàn)手機APP以EDP協(xié)議和云平臺通信,使用了Android的Activity,Thread,Intent,Handler,Message,MessageQueue等組件和特性.

圖5 智能空調(diào)控制系統(tǒng)手機APP UI界面
單片機程序采用中斷加輪詢方式實現(xiàn)多任務(wù)并行[6],整個程序使用3個串口中斷,1個定時器中斷,主流程采用輪詢方式.定時器用于定時改變LED燈的狀態(tài),提示系統(tǒng)正在工作.串口1用于輸出調(diào)試信息,串口2外接XK2233-1,用于發(fā)送空調(diào)控制碼,串口3外接ATKESP8266,用于上傳溫濕度數(shù)據(jù)、接收云平臺轉(zhuǎn)發(fā)的控制指令和維護和云平臺的心跳消息.串口3負責(zé)上傳溫濕度數(shù)據(jù),為保證能盡量實時反映現(xiàn)場溫濕度,且發(fā)送給空調(diào)的控制命令首先是由串口3負責(zé)接收,為保證發(fā)出的控制命令是最新的命令,將串口3優(yōu)先級設(shè)為最高;為保證系統(tǒng)的響應(yīng)速度,串口2優(yōu)先級次之;定時器優(yōu)先級中斷再次;串口1調(diào)試用,優(yōu)先級最低.
主流程負責(zé):1)程序初始化(讀取配置文件,獲取設(shè)備ID、目的設(shè)備ID、API-key、接入熱點名、接入熱點密碼、云服務(wù)器IP地址、云服務(wù)器端口、空調(diào)型號等關(guān)鍵信息,開啟中斷等),2)定時采集溫濕度數(shù)據(jù),通過串口3發(fā)送給ATK-ESP8266,3)定時檢查串口3是否有云平臺發(fā)送過來的指令,若有,進行解析,將解析出來的結(jié)果通過串口2發(fā)送給XK2233-1,進而發(fā)出紅外控制命令給普通空調(diào).
程序流程圖如圖6.

圖6 智能空調(diào)控制終端STM32程序流程圖
配置文件采用明文文本方式,Key-Value鍵值對存儲,方便修改,格式如圖7.

圖7 智能空調(diào)控制終端配置文件格式
手機APP、智能空調(diào)控制終端和OneNET云平臺采用EDP協(xié)議通信(如圖8),自定義了登陸、溫濕度數(shù)據(jù)上傳、空調(diào)控制命令等應(yīng)用層消息.

圖8 EDP協(xié)議基本格式
登陸消息如圖9,消息體格式如下:

溫濕度上傳消息如圖10,消息體格式如下:


圖9 登陸消息

圖10 溫濕度上傳消息
空調(diào)控制命令如圖11,消息體格式如下:


圖11 空調(diào)控制命令
命令消息格式中,JSON格式中value值不同即代表開、關(guān)、設(shè)置溫度等不同的控制命令,智能控制終端接收到命令后需進行格式轉(zhuǎn)化,按照空調(diào)控制模塊的命令格式構(gòu)造出數(shù)據(jù)幀發(fā)送給空調(diào)控制模塊.通信協(xié)議格式緊湊,數(shù)據(jù)量不大,傳輸效率高.
本文提出并實現(xiàn)了一種基于中國移動開放物聯(lián)網(wǎng)云平臺OneNET,通過增加外置控制模塊遠程控制普通空調(diào)的系統(tǒng),該系統(tǒng)可改造用于其他帶有紅外通信的普通家電,實現(xiàn)普通家電上云接入物聯(lián)網(wǎng),具有一定的普遍性.