張加書, 韓躍平, 張瑞珍
(中北大學(xué) 信息與通信工程學(xué)院, 山西 太原 030051)
物聯(lián)網(wǎng)作為新一代信息技術(shù)的重要組成部分, 在信息化發(fā)展中起到了舉足輕重的作用[1]. “云+端”模式[2]到來之后, 基于物聯(lián)網(wǎng)云平臺(tái)的遠(yuǎn)程控制[3]、 語(yǔ)音控制[4]等一些智能化控制產(chǎn)品慢慢普及到人民的生活. 必須承認(rèn), 由于平臺(tái)的可擴(kuò)展性、 兼容性、 時(shí)效性以及開發(fā)周期的原因, 這些概念和產(chǎn)品并沒有打開最廣闊的智能家居市場(chǎng)[5].
本文利用智能通信模組(以下稱為智能模組)對(duì)接云平臺(tái)并且發(fā)射紅外波形信號(hào)到空調(diào)電控板, 移動(dòng)客戶端APP與智能模組綁定連接到云平臺(tái), 下發(fā)控制命令. 智能模組利用紅外發(fā)射接口, 將數(shù)據(jù)轉(zhuǎn)換成紅外波形信號(hào), 發(fā)射到空調(diào)電控板的紅外接收端口[6], 進(jìn)而用戶通過APP的UI界面[7]即可控制空調(diào)電控板. 本文提出了一種借助云端部署、 一鍵匹配開發(fā)控制不同品牌空調(diào)遙控器源碼庫(kù)的開發(fā)方法, 實(shí)現(xiàn)了品牌空調(diào)控制的兼容性, 通過精簡(jiǎn)內(nèi)存提高了匹配以及控制效率, 本文重點(diǎn)對(duì)空調(diào)源碼庫(kù)的開發(fā)做了深入的研究.
研究基于智能模組與云平臺(tái)(broadlink云)服務(wù)[8]相結(jié)合, 實(shí)現(xiàn)移動(dòng)客戶端一鍵學(xué)習(xí)匹配空調(diào)設(shè)備進(jìn)行遠(yuǎn)程控制、 兼容多品牌空調(diào)等功能. 智能模組硬件設(shè)備集成了WiFi模塊通信與紅外模塊通信的功能, 通過WiFi模塊與云平臺(tái)建立網(wǎng)絡(luò)連接. 云平臺(tái)核心業(yè)務(wù)面向家電產(chǎn)品實(shí)現(xiàn)了產(chǎn)品的創(chuàng)建、 標(biāo)準(zhǔn)功能參數(shù)屬性設(shè)置、 產(chǎn)品部署等功能. 云空調(diào)的實(shí)現(xiàn)不需要對(duì)傳統(tǒng)空調(diào)廠商產(chǎn)品進(jìn)行二次開發(fā), 智能云空調(diào)取代傳統(tǒng)的空調(diào)遙控器, 在保證產(chǎn)品智能化、 最優(yōu)化的情況下節(jié)約了開發(fā)成本. 如圖 1 所示為系統(tǒng)整體結(jié)構(gòu)框圖.
圖 1 系統(tǒng)整體結(jié)構(gòu)框圖Fig.1 System overall block diagram
移動(dòng)客戶端APP用戶賬號(hào)注冊(cè)登陸, APP設(shè)置為L(zhǎng)AN模式和WLAN模式[7]. 云平臺(tái)創(chuàng)建的產(chǎn)品列表提供了空調(diào)遙控器標(biāo)準(zhǔn)功能參數(shù)以及枚舉值, 如表 1 所示, 列表屬性針對(duì)本次開發(fā)設(shè)計(jì)可滿足用戶基本需求, 可根據(jù)用戶需求提供靈活性的自定義添加. 前端開發(fā)利用云平臺(tái)提供的不同功能參數(shù), 對(duì)其中的枚舉值進(jìn)行相對(duì)應(yīng)功能的UI界面開發(fā), UI開發(fā)界面如圖 2 所示.
移動(dòng)客戶端用戶可采用局域網(wǎng)WiFi、 廣域網(wǎng)WiFi兩種主要的聯(lián)網(wǎng)方式: 局域網(wǎng)下, 移動(dòng)客戶端APP下發(fā)控制指令到智能模組, 智能模組接受命令后對(duì)空調(diào)電控板發(fā)送控制指令, 同時(shí)APP把參數(shù)值上傳云平臺(tái); 廣域網(wǎng)下, APP發(fā)送的控制命令先改變?cè)破脚_(tái)的對(duì)應(yīng)參數(shù), 之后云平臺(tái)將參數(shù)值傳遞到本地設(shè)備. 局域網(wǎng)下移動(dòng)客戶端APP(client端)通過UDP協(xié)議[9]建立網(wǎng)絡(luò)套接字的方式實(shí)現(xiàn)與云平臺(tái)(server端)通信, 局域網(wǎng)通信方式如圖 3 所示; 廣域網(wǎng)下移動(dòng)客戶端APP通過建立一個(gè)線程向云平臺(tái)發(fā)送HTTP的GET/POST請(qǐng)求去查詢?cè)破脚_(tái)的功能參數(shù)變化以及下發(fā)控制命令.
表 1 空調(diào)功能參數(shù)列表及枚舉值Tab.1 List of air conditioning function parameters
圖 2 UI開發(fā)界面Fig.2 Development interface of UI
圖 3 局域網(wǎng)通信方式Fig.3 Communication mode under LAN
源碼庫(kù)的開發(fā)是整套產(chǎn)品的核心部分, 也是本文的研究重點(diǎn), 研究云空調(diào)的源碼庫(kù)開發(fā), 對(duì)云空調(diào)產(chǎn)品的品牌兼容性、 一鍵匹配、 控制高效性起到了不可或缺的作用.
網(wǎng)上下載虛擬機(jī)VMware安裝包, 并安裝64 b ubuntu, 版本號(hào)16.04, 用于編譯調(diào)試開發(fā)的c語(yǔ)言文件. 配置虛擬機(jī)的網(wǎng)絡(luò)設(shè)置為橋接方式(NAT方式不要), 為了方便后期的云端調(diào)用操作配置靜態(tài)IP地址, 在ubuntu終端中輸入$sudo vi /etc/network/interfaces, 再打開的網(wǎng)絡(luò)配置文件輸入配置內(nèi)容設(shè)置靜態(tài)IP地址. 注意在橋接方式下, 虛擬機(jī)相當(dāng)于是局域網(wǎng)中一臺(tái)獨(dú)立的主機(jī), 因此這個(gè)靜態(tài)IP地址不能和局域網(wǎng)中別的主機(jī)沖突. 如果對(duì)網(wǎng)絡(luò)設(shè)置做了更改后無法連接網(wǎng)絡(luò), 可以嘗試重啟網(wǎng)絡(luò). 安裝samba服務(wù)器[10]進(jìn)行Windows和ubuntu平臺(tái)文件共享實(shí)時(shí)同步更改, 服務(wù)器重啟命令sudo /etc/init.d/samba restart. 安裝Sourceinsight進(jìn)行源程序的讀取和編輯. 安裝紅外遙控編碼分析儀PC端軟件IRReader以及紅外遙控編碼分析儀驅(qū)動(dòng)用于分析空調(diào)遙控器輸出的紅外波形.
選用通用型智能紅外遙控編碼分析儀分析遙控器波形, 提供了被測(cè)紅外遙控器的所有脈寬信息和波形[11]. 分析儀接入PC端打開上位機(jī)軟件, 界面能清晰穩(wěn)定地顯示信號(hào)完整波形, 這是很多示波器達(dá)不到的; 可測(cè)試脈沖寬度、 碼串長(zhǎng)度、 數(shù)據(jù)位數(shù)、 引導(dǎo)碼、 客戶碼、 數(shù)據(jù)碼等; 支持一鍵多碼的解碼; 4通道顯示波形, 方便波形對(duì)比, 每個(gè)通道支持兩種模式.
在開機(jī)狀態(tài)溫度、 模式、 風(fēng)速、 風(fēng)向一定的情況下, 在上位機(jī)界面采集顯示某品牌空調(diào)遙控器輸出的紅外波形如圖 4 所示.
圖 4 采集紅外波形圖Fig.4 Acquisition of infrared waveforms
通過溫度增減按鍵以及在上位機(jī)界面的紅外遙控編碼分析儀的數(shù)據(jù)波形顯示, 空調(diào)遙控器實(shí)際是給空調(diào)電控板紅外接收器發(fā)送一連串的紅外波形, 進(jìn)而實(shí)現(xiàn)控制空調(diào)功能的作用[12]. 分析紅外遙控編碼分析儀給出的數(shù)據(jù): 空調(diào)遙控器與電控板的通信數(shù)據(jù)格式為起始碼、 數(shù)據(jù)區(qū)、 結(jié)束碼; 其中起始碼和結(jié)束碼以比特為單位, 數(shù)據(jù)區(qū)以字節(jié)為單位; 波形由高到低證明是波形發(fā)射端; 數(shù)據(jù)區(qū)中的一段高低電平(1/0)的定義見圖 5; 波形上面顯示的數(shù)字代表的是電平的大小, 見圖 6. 由此可以觀察一款空調(diào)遙控器發(fā)射的某個(gè)功能參數(shù)下的數(shù)據(jù)區(qū)有幾個(gè)字節(jié), 根據(jù)波形分析對(duì)應(yīng)的數(shù)據(jù)值(小端模式)以及起始、 結(jié)束幾個(gè)bit位.
圖 5 高低電平(1/0)的定義Fig.5 Definition of high and low level
圖 6 電平大小Fig.6 Level size
將其他輔助功能關(guān)閉(APP里沒有添加這個(gè)輔助功能按鍵, 按照用戶需求可以靈活添加), 找出固定字節(jié)、 找出各功能按鍵對(duì)應(yīng)影響的字節(jié).
某些品牌遙控器某些功能的溫度遞增受影響的不止兩個(gè)字節(jié), 如圖 7 所示, 為某品牌遙控器字節(jié)控制溫度. 風(fēng)向本有上下30°, 60°, 90°掃風(fēng), 由于控制面板里面沒有添加可以改變風(fēng)向的按鍵, 故取一個(gè)常用的值拿來做固定值.
圖 7 字節(jié)控制溫度Fig.7 Byte control temperature
某些品牌遙控器的某些功能參數(shù)沒有開發(fā), 但是UI界面具有的功能則取有效的控制波形當(dāng)默認(rèn)值.
某些品牌遙控器, 紅外遙控編碼分析儀采集的波形數(shù)據(jù)可能有多個(gè)起始碼、 多個(gè)結(jié)束碼, 其按規(guī)律進(jìn)行輸出波形的編碼添加.
某些品牌遙控器輸出的波形按照大端模式輸出, 添加電平反轉(zhuǎn)函數(shù)輸出正確電平.
選用一款通用型三菱品牌空調(diào)遙控器進(jìn)行源碼庫(kù)的開發(fā), UI界面控制功能參數(shù)包括: 溫度遞增、 溫度遞減、 模式、 風(fēng)速、 風(fēng)向、 狀態(tài)6個(gè)功能按鍵(按用戶需求可以逐個(gè)添加), 其中模式分為自動(dòng)、 制熱、 制冷、 除濕、 送風(fēng)5個(gè)模式; 風(fēng)速分為自動(dòng)、 低、 中、 高4個(gè)等級(jí); 風(fēng)向包括固定風(fēng)向和自動(dòng)掃風(fēng); 狀態(tài)包括開機(jī)狀態(tài)、 關(guān)機(jī)狀態(tài). 采集UI界面包含的功能按鍵數(shù)據(jù), 邏輯開發(fā)寫入底層繼而實(shí)現(xiàn)控制功能.
列出底層源碼庫(kù)開發(fā)的一些主要代碼為: 一鍵匹配函數(shù)、 數(shù)據(jù)輸出轉(zhuǎn)換波形函數(shù)以及溫度獲取函數(shù).
2.3.1 一鍵匹配函數(shù)功能碼
int fujistu_type_check(irda_local_frame_t*frame)
{
irda_frame_pos_t frame_pos;
irda_parse_data_t data_stream1;
memset(&frame_pos, 0, sizeof(irda_frame_pos_t));
frame_pos.frame=frame;
//匹配起始碼字節(jié)
if(irda_parse_basic_logic(&frame_pos, &startup_code)<0) return-1;
//匹配數(shù)據(jù)區(qū)字節(jié)數(shù)以及第一個(gè)字節(jié)
irda_parse_data_frame(&frame_pos, &bit01, &data_stream1, DATA_STREAM1_BIT);
if(data_stream1.bit_count //匹配結(jié)束碼字節(jié) if(irda_parse_basic_logic(&frame_pos,&end_code)<0) return -1; return 0; } 2.3.2 數(shù)據(jù)輸出波形轉(zhuǎn)換函數(shù) int irda_merge_basic_logic(irda_local_frame_t *frame, const irda_baisc_bit_t *basic_bit) { //添加一個(gè)電平到數(shù)據(jù)流 0: 低電平 1: 高電平 irda_add_level(basic_bit->level0, frame, 1); if(basic_bit->level1 != 0) irda_add_level(basic_bit->level1, frame, 0); return 0; } 2.3.3 溫度獲取邏輯函數(shù) char temp_gain(int mod_flag,int temp_flag) { char temp=0; switch(temp_flag){ case 17: tmp=(mod_flag?4 ) | 0x00; break; case 18: tmp=(mod_flag?4 ) | 0x08; break; case 19: tmp=(mod_flag?4 ) | 0x0c; break; case 20: tmp=(mod_flag?4 ) | 0x04; break; case 21: tmp=(mod_flag?4 ) | 0x06; break; case 22: tmp=(mod_flag?4 ) | 0x0e; break; case 23: tmp=(mod_flag?4 ) | 0x0a; break; case 24: tmp=(mod_flag?4 ) | 0x02; break; case 25: tmp=(mod_flag?4 ) | 0x03; break; case 26: tmp=(mod_flag?4 ) | 0x0b; break; case 27: tmp=(mod_flag?4 ) | 0x09; break; case 28: tmp=(mod_flag?4 ) | 0x01; break; case 29: tmp=(mod_flag?4 ) | 0x05; break; case 30: tmp=(mod_flag?4 ) | 0x0d; break; default: break; } return (tmp); } 按照紅外遙控編碼分析儀輸出的數(shù)據(jù)波形、 云平臺(tái)提供的功能參數(shù)枚舉值以及尋找功能參數(shù)變化邏輯規(guī)律, 進(jìn)行函數(shù)的邏輯判斷編碼, 編譯開發(fā)c程序和腳本程序代碼. 其中在IRReader界面采集的電平有效誤差范圍根據(jù)智能模組硬件電路的識(shí)別精度經(jīng)實(shí)驗(yàn)取值在80~200之間. 一鍵匹配功能函數(shù)的實(shí)現(xiàn)包括對(duì)起始碼的匹配、 數(shù)據(jù)區(qū)的匹配以及結(jié)束碼的匹配, 為了提高匹配的效率以及準(zhǔn)確性, 多次進(jìn)行起始碼、 結(jié)束碼匹配, 數(shù)據(jù)區(qū)只匹配1~2個(gè)字節(jié)的實(shí)驗(yàn), 實(shí)驗(yàn)結(jié)果顯示能達(dá)到正常的匹配功能并且相對(duì)于全部數(shù)據(jù)區(qū)匹配提高了時(shí)效性, 進(jìn)而縮短了代碼段的內(nèi)存空間. 圖 8 空調(diào)一鍵匹配成功結(jié)果Fig.8 Successful result of air conditioning key match 智能家居控制APP用戶登錄成功之后, 長(zhǎng)按智能模組復(fù)位按鍵到配網(wǎng)狀態(tài), APP添加設(shè)備綁定, 通過一鍵學(xué)習(xí)匹配空調(diào)遙控器, 學(xué)習(xí)成功后彈出控制界面. 傳統(tǒng)空調(diào)遙控器和APP在其他功能參數(shù)保持一致的情況下, 同時(shí)改變溫度, 圖 9 空調(diào)遙控器和APP數(shù)據(jù)對(duì)比圖Fig.9 Contrast diagram of air conditioning remote controller and APP data 一款傳統(tǒng)空調(diào)遙控器對(duì)應(yīng)開發(fā)一款應(yīng)用c文件, 對(duì)應(yīng)生成一個(gè)可執(zhí)行文件, 同理收錄海量空調(diào)遙控器進(jìn)行紅外碼錄入, 系統(tǒng)開辟一定的內(nèi)存空間來存儲(chǔ)海量的空調(diào)紅碼及云端部署, 形成最終的源碼庫(kù). 基于物聯(lián)網(wǎng)云平臺(tái)的空調(diào)源碼庫(kù)開發(fā)以及后期測(cè)試驗(yàn)證分析結(jié)果表明: 1) 智能終端APP遠(yuǎn)程控制的可行性以及控制的準(zhǔn)確性和時(shí)效性, 實(shí)現(xiàn)了和傳統(tǒng)空調(diào)遙控器一樣的控制功能. 2) 海量收錄空調(diào)遙控器云端部署一鍵匹配形成了一套源碼庫(kù), 通過大量的實(shí)驗(yàn)證明了整套方案的時(shí)效性以及控制準(zhǔn)確性, 符合產(chǎn)品市場(chǎng)的要求以及客戶的需要, 最終能夠?qū)崿F(xiàn)移動(dòng)客戶端對(duì)不同品牌空調(diào)的實(shí)時(shí)遠(yuǎn)程操作控制.3 系統(tǒng)功能聯(lián)調(diào)
圖 8 為空調(diào)一鍵匹配成功結(jié)果. 代碼編譯完成后通過更改輸入功能參數(shù)在ubuntu環(huán)境下驗(yàn)證c編譯后的可執(zhí)行文件和腳本程序輸出的紅碼相等, 調(diào)試對(duì)比之后上傳到云端部署.
圖 9 是傳統(tǒng)遙控器和APP控制在溫度從20 ℃~21 ℃的溫度變化過程對(duì)比, 結(jié)果顯示APP和傳統(tǒng)遙控器紅外輸出的波形是一致的, 通過實(shí)驗(yàn)驗(yàn)證都能達(dá)到遠(yuǎn)程、 實(shí)時(shí)、 準(zhǔn)確控制的目的.4 結(jié) 論