李昱兵,汪 偉,趙季中
(1.西安交通大學(xué) 電子與信息學(xué)院 計(jì)算機(jī)系,陜西 西安 710049;2.長(zhǎng)虹四川虹美智能科技有限公司 技術(shù)研究中心,四川 綿陽(yáng) 621000)
近年來,隨著移動(dòng)互聯(lián)網(wǎng)的普及和物聯(lián)網(wǎng)技術(shù)的成熟,以智能冰箱、智能空調(diào)為代表的智能白電產(chǎn)品(以下簡(jiǎn)稱智能白電)雖然發(fā)展迅速,但是由于缺乏平臺(tái)化的系統(tǒng)軟件,行業(yè)普遍存在重復(fù)開發(fā)、研發(fā)周期長(zhǎng)、傳感器匹配難、配網(wǎng)體驗(yàn)差、系統(tǒng)通用性不強(qiáng)等問題。因此,研發(fā)面向智能白電的系統(tǒng)軟件,不僅有利于企業(yè)提升新品開發(fā)效率,也有利于家電和智能家居行業(yè)的智能化轉(zhuǎn)型升級(jí)。
文中在研發(fā)定制化系統(tǒng)軟件、特定外設(shè)傳感器驅(qū)動(dòng)方面做了大量研究和實(shí)踐,產(chǎn)品化后效益顯著。文中將闡述智能白電系統(tǒng)軟件的總體設(shè)計(jì)思路,以及傳感器驅(qū)動(dòng)、設(shè)備控制協(xié)議、家電網(wǎng)絡(luò)接入等核心軟件的設(shè)計(jì)方法、技術(shù)突破和創(chuàng)新工程應(yīng)用。
國(guó)內(nèi)外大部分研究是基于Windows CE、Android等開發(fā)相對(duì)獨(dú)立的家居控制系統(tǒng)。例如,基于Windows CE的智能家居系統(tǒng)多以系統(tǒng)應(yīng)用軟件為主控,配合外圍單片機(jī)實(shí)現(xiàn)溫度采集、視頻采集、網(wǎng)絡(luò)服務(wù)等功能[1]。而基于Android搭建的智能家居控制系統(tǒng)多以手持終端與其他硬件模塊配合,實(shí)現(xiàn)家居控制,與家電本身存在差異[2]。另外則基于Android開發(fā)智能網(wǎng)關(guān)來實(shí)現(xiàn)視頻監(jiān)控、電量檢測(cè)、溫度檢測(cè)等功能[3-4]?,F(xiàn)有研究多是家居系統(tǒng)而非白電產(chǎn)品。
文中研究側(cè)重基于智能白電的系統(tǒng)軟件,研究方式上并未停留在簡(jiǎn)單移植和裁剪層面,而是針對(duì)白電專屬外設(shè)驅(qū)動(dòng)、設(shè)備控制協(xié)議、網(wǎng)絡(luò)接入等方面做了深入研究,解決了一系列技術(shù)難題,形成了一套通用化、平臺(tái)化水平較高的系統(tǒng)軟件。該軟件緩解了行業(yè)缺乏白電系統(tǒng)軟件的難題,有效提升了智能白電產(chǎn)品的研發(fā)效率和質(zhì)量。
基于智能白電特性,系統(tǒng)須滿足:(1)輕量、高效、穩(wěn)定;(2)具備成熟的GUI系統(tǒng);(3)具有可配置化及可裁剪特性,基礎(chǔ)系統(tǒng)需要方便進(jìn)行二次研發(fā)。
綜合評(píng)估Windows CE、Unix等現(xiàn)有主流操作系統(tǒng)后,最適合作為智能白電系統(tǒng)軟件的基礎(chǔ)系統(tǒng)[5]是開源Android系統(tǒng)。
通常智能白電的硬件系統(tǒng)由兩部分組成(見圖1),左側(cè)為產(chǎn)品的電控系統(tǒng),右側(cè)為智能SOC系統(tǒng)。二者通過串口連接,構(gòu)成整個(gè)硬件系統(tǒng)。文中設(shè)計(jì)的系統(tǒng)軟件運(yùn)行于智能SOC上。
圖1 智能白色家電硬件架構(gòu)
文中采用裁剪加定制的研發(fā)思路,先將Android系統(tǒng)中白電產(chǎn)品不需要的軟件模塊(圖2中白底黑字部分)裁剪掉,保留Linux Kernel、HAL、JNI、Java Framework等核心框架(圖2中黑底白字部分)。
圖2 Android系統(tǒng)裁剪示意
定制開發(fā)分為三步。第一步是開發(fā)白電設(shè)備所需的一系列外設(shè)(傳感器)驅(qū)動(dòng)及硬件抽象層;第二步是開發(fā)智能白電控制協(xié)議、網(wǎng)絡(luò)接入模塊等核心庫(kù)和定制庫(kù);第三步是開發(fā)應(yīng)用接口,供上層應(yīng)用調(diào)用。
如圖3所示,定制開發(fā)的系統(tǒng)軟件從上至下分為4層,分別與Android的應(yīng)用層、框架層、運(yùn)行庫(kù)層和內(nèi)核層對(duì)應(yīng)[6]。定制開發(fā)的系統(tǒng)可支持帶GUI的Android應(yīng)用和不帶GUI的Linux應(yīng)用,以滿足不同產(chǎn)品需求。
圖3 智能白電系統(tǒng)軟件架構(gòu)
系統(tǒng)裁剪分為L(zhǎng)inux內(nèi)核裁剪和Android系統(tǒng)裁剪兩方面。
內(nèi)核裁剪重點(diǎn)是對(duì)智能白電無用但又會(huì)占用大量硬件資源的文件系統(tǒng),如EXT、DOS-FAT/NTFS等,ISA、PCMCIA等總線協(xié)議,WIMAX、VLAN等通信協(xié)議,打印機(jī)、CD/DVD、鼠標(biāo)等針對(duì)PC的外設(shè)驅(qū)動(dòng)[6]。
裁剪時(shí)先使用$make menuconfig命令調(diào)出內(nèi)核配置菜單進(jìn)行快速裁剪[7],按需要調(diào)整KCONFIG文件,并進(jìn)行編譯、燒錄和運(yùn)行測(cè)試。執(zhí)行$make menuconfig命令后,裁剪配置信息會(huì)保存到內(nèi)核源碼樹根目錄下的.config中。在確認(rèn)裁剪生效后,以產(chǎn)品的SOC信息重命名.config文件,并將其保存到kernel/arch/arm/目錄下指定位置。后續(xù)研發(fā)時(shí)只需修改此文件中的編譯開關(guān)就可快速啟用所需驅(qū)動(dòng)。
Android系統(tǒng)裁剪需從系統(tǒng)應(yīng)用、系統(tǒng)服務(wù)、硬件抽象層三方面入手。
裁剪掉包括電話撥號(hào)、通訊錄管理、短信與彩信、電子郵件、Google play、地圖和游戲等[7]在內(nèi)的系統(tǒng)應(yīng)用,可使system.img縮小幾十兆字節(jié),降低存儲(chǔ)空間占用并提升軟件燒錄速度。裁剪可從build/target/product/目錄下的core.mk和generic.mk文件入手,理清默認(rèn)編譯、安裝的應(yīng)用程序及依賴關(guān)系后,將裁剪對(duì)象涉及的代碼注釋掉。
需要裁剪的服務(wù)包括本地系統(tǒng)服務(wù)和Java系統(tǒng)服務(wù)兩類[8]。裁剪前者可從init.rc文件入手,重點(diǎn)移除vold、ril-daemon、dbus、bluetoothd、pbap等本地系統(tǒng)服務(wù)。裁剪后者需要找到源碼樹中所有調(diào)用addService方法(ServiceManger類的成員)的代碼,在理清錯(cuò)綜復(fù)雜的依賴關(guān)系后裁剪掉BatteryService、LocationMangerService、DropBoxManagerServicet等Java系統(tǒng)服務(wù)。
同時(shí)裁剪RIL、重力傳感器、磁力傳感器、陀螺儀、圖像硬件加速以及GPS等模塊為主的硬件抽象層。裁剪硬件抽象層frameworks/base/services/jni/Onload.cpp文件中的JNI_OnLoad函數(shù),注釋掉無關(guān)的硬件抽象層模塊可獲得顯著的裁剪效果。在hardware目錄下的各個(gè)Android.mk,修改此文件后無關(guān)的硬件抽象層將不被編譯。
定制開發(fā)涉及內(nèi)核驅(qū)動(dòng)、定制庫(kù)、核心庫(kù)等三個(gè)層級(jí)的十余個(gè)模塊(如圖3所示),而SOC控制步進(jìn)電機(jī)、多攝像頭驅(qū)動(dòng)、設(shè)備連接控制協(xié)議等則是創(chuàng)新應(yīng)用基礎(chǔ)[9],也是文中的技術(shù)創(chuàng)新點(diǎn)。
定制系統(tǒng)軟件首先為智能白電特有的外設(shè)(傳感器)開發(fā)驅(qū)動(dòng)和硬件抽象層。驅(qū)動(dòng)被設(shè)計(jì)在內(nèi)核空間,硬件抽象層則按照Android Hal標(biāo)準(zhǔn)實(shí)現(xiàn)[10-12]。智能白電特有的外設(shè)包括步進(jìn)電機(jī)、紅外傳感器、圖像傳感器、溫濕度傳感器、PM2.5傳感器、VOC傳感器、麥克風(fēng)陣列與音頻DSP等。家電專用的傳感器按標(biāo)準(zhǔn)I2C設(shè)備驅(qū)動(dòng)實(shí)現(xiàn),并以字符設(shè)備形式向上層提供接口。
步進(jìn)電機(jī)多與單片機(jī)配合應(yīng)用于工業(yè)控制領(lǐng)域,在智能白電上應(yīng)用特別是SOC直接控制步進(jìn)電機(jī)的研究和應(yīng)用都比較少。文中設(shè)計(jì)了一種適用于智能家電SOC控制步進(jìn)電機(jī)的新方案:利用SOC主芯片的若干個(gè)PWM控制器生成具有精確周期和占空比的脈沖信號(hào),利用delay類函數(shù)精確控制各脈沖信號(hào)間的初始相位差,從而解決CPU占用率高的問題。同時(shí)PWM控制器生成的脈沖信號(hào)具備芯片級(jí)的一致性和準(zhǔn)確性,而delay類函數(shù)也有足夠的精度用于設(shè)置初始相位差。
該設(shè)計(jì)無論是CPU占用率還是信號(hào)精度,都滿足了智能家電的應(yīng)用要求。實(shí)驗(yàn)表明,采用新方案的某型號(hào)智能空調(diào),其步進(jìn)電機(jī)實(shí)現(xiàn)了7×24小時(shí)無故障運(yùn)行。由于Linux是多任務(wù)搶占式操作系統(tǒng),必須在操作若干個(gè)PWM控制器前關(guān)閉中斷、關(guān)閉搶占,操作PWM控制器后再打開(見示例代碼前兩行和最后兩行),否則運(yùn)行過程或出現(xiàn)難以排查的問題。
void pwm_drive_motor_move_clockwise(void){
local_irq_disable();//關(guān)閉中斷
preempt_disable();// 關(guān)閉搶占
motor_pwm_enable(&motor_pwms[3]);
ndelay(STEP_PERIOD*2);
motor_pwm_enable(&motor_pwms[2]);
ndelay(STEP_PERIOD*2);
motor_pwm_enable(&motor_pwms[1]);
ndelay(STEP_PERIOD*2);
motor_pwm_enable(&motor_pwms[0]);
local_irq_enable();
preempt_enable();
}
某系列智能冰箱的核心功能“食材圖像識(shí)別”,其關(guān)鍵是基于智能白電SOC實(shí)現(xiàn)多路圖像采集:快速地從冰箱的十余個(gè)位置采集清晰的食材圖像。關(guān)于多路圖像采集技術(shù)的研究多集中在安防領(lǐng)域,以采用FPGA、DSP或PC處理器構(gòu)建的系統(tǒng)居多[13]。與安防等常見領(lǐng)域的多路圖像采集不同,智能白電的多路圖像采集要求低成本、低功耗、小尺寸、高可靠性。
新設(shè)計(jì)的多路圖像采集系統(tǒng)采用USB2.0總線,將分布于冰箱內(nèi)部不同位置的攝像頭與SOC芯片連接,在對(duì)成本(低于20元)、尺寸、線長(zhǎng)(超過1米)的約束下,支撐了12個(gè)攝像頭的圖像采集。
基于USB構(gòu)建多路圖像采集系統(tǒng)的關(guān)鍵是需要解決多攝像頭支持問題。此前未見關(guān)于Android系統(tǒng)支持超過3個(gè)攝像頭的研究文獻(xiàn)。對(duì)此,文中首先采用2顆SMSC公司的USB2517芯片,將一個(gè)USB接口擴(kuò)展為12個(gè),突破了SOC芯片USB接口數(shù)量約束。
其次,采用如圖4所示設(shè)計(jì),使用最多4個(gè)GPIO輸入到2個(gè)3-8譯碼器,即可控制多達(dá)16個(gè)攝像頭的供電切換。結(jié)合USB即插即用性質(zhì)可實(shí)現(xiàn)多個(gè)攝像頭快速切換的目標(biāo)。以下是攝像頭供電切換控制的示例,將譯碼器狀態(tài)表與控制口的GPIO信息形成數(shù)據(jù)結(jié)構(gòu),供切換時(shí)查詢。實(shí)現(xiàn)方法如下:
static int uvc_hub_enable_port(int port_index){
int i;
int ret=0;
for (i=0;i if(ret<0){ printk("Fail to control LDO port: %d, GPIO:%d
",port_index,->a[i].gpio); return ret; } } 圖4 多路攝像頭電源控制 第三,對(duì)Android和Linux內(nèi)核做從上而下的修改[14],解除Android框架對(duì)攝像頭數(shù)量的限制,擴(kuò)大V4L2體系中相關(guān)數(shù)據(jù)結(jié)構(gòu)的長(zhǎng)度,解決原生Android的攝像頭框架未考慮多攝像頭成千上萬次切換的問題。 下面代碼是以Android接口文件CameraService.h為例,解除系統(tǒng)支持的攝像頭個(gè)數(shù)上限為2的限制。在Android JNI層、硬件抽象層以及Linux內(nèi)核中亦存在諸多類似限制,需逐個(gè)修改,限于篇幅不再列舉。 #define MAX_CAMERAS2 //對(duì)攝像頭數(shù)量的限制需要解除 class Client:public BnCamera { … Mutex mServiceLock; wp Mutex mClientLock[MAX_CAMERAS]; //prevent Client destruction inside callbacks int mNumberOfCameras; … } 對(duì)采用該設(shè)計(jì)的冰箱實(shí)驗(yàn)和測(cè)試顯示,12顆攝像頭完成一次圖像采集耗時(shí)不超過30 s,并以7×24小時(shí)反復(fù)采集圖像數(shù)據(jù)。 系統(tǒng)另外一個(gè)定制化特色是設(shè)備控制協(xié)議,包含互聯(lián)網(wǎng)范圍內(nèi)的遠(yuǎn)程控制協(xié)議、局域網(wǎng)控制協(xié)議以及SOC與電控系統(tǒng)的串口通信協(xié)議等三個(gè)層次[15]。 互聯(lián)網(wǎng)范圍內(nèi)遠(yuǎn)程控制協(xié)議是采用可擴(kuò)展消息處理現(xiàn)場(chǎng)協(xié)議(XMPP),利用它來實(shí)現(xiàn)設(shè)備遠(yuǎn)程控制、上傳設(shè)備狀態(tài)信息等功能,該協(xié)議被越來越多地應(yīng)用于智能家電[16]。 IPP(integrated person portal)作為局域網(wǎng)近端通信協(xié)議,用于本地控制。在此協(xié)議中存在控制終端和被控終端兩種角色,前者一般是移動(dòng)應(yīng)用,后者是各種智能白電。IPP在設(shè)備入網(wǎng)發(fā)現(xiàn)、局域網(wǎng)設(shè)備控制中發(fā)揮核心作用。 其設(shè)計(jì)方法是:在設(shè)備入網(wǎng)時(shí),控制APP和智能白電通過監(jiān)聽指定端口上的UDP包,實(shí)現(xiàn)設(shè)備發(fā)現(xiàn)。端口和數(shù)據(jù)包格式由IPP協(xié)議規(guī)定。圖5描述了移動(dòng)應(yīng)用通過IPP協(xié)議在局域網(wǎng)控制智能白電的關(guān)鍵通訊過程。 圖5 IPP協(xié)議局域網(wǎng)數(shù)據(jù)通訊過程 如圖1所示,智能白電SOC與電控系統(tǒng)之間通過串口進(jìn)行通信,并建立一個(gè)主控通信接口層,將與電控系統(tǒng)聯(lián)系緊密的協(xié)議拼接工作控制在底層,兼顧具體智能產(chǎn)品的特性,使得同一套通訊控制代碼可以自動(dòng)適配不同的產(chǎn)品。 設(shè)備接入方式可劃分為有線接入和無線接入兩大類。前者多采用MCU加以太網(wǎng)控制器的架構(gòu),通過RJ-45接口接入以太網(wǎng)[17]。這類接入方式的優(yōu)點(diǎn)是連接方便、穩(wěn)定,缺點(diǎn)是需要布線、移動(dòng)性差,在白電領(lǐng)域應(yīng)用受限。后者多基于Wi-Fi、ZigBee等無線通信技術(shù)及無線網(wǎng)關(guān)將設(shè)備接入Internet。相比有線接入方式,無線接入更具靈活性,更適合智能白電。 目前智能白電網(wǎng)絡(luò)配置主要步驟如下: (1)智能設(shè)備進(jìn)入待配網(wǎng)模式; (2)手機(jī)連接家庭Wi-Fi路由器; (3)手機(jī)將家庭Wi-Fi路由器SSID和密碼發(fā)送給智能設(shè)備; (4)智能設(shè)備切換至Station模式; (5)智能設(shè)備連接家庭Wi-Fi路由器。 在以上配網(wǎng)流程中,智能設(shè)備在同一時(shí)刻工作在單一模式,因此需要進(jìn)行工作模式切換,而智能手機(jī)也將反復(fù)連接智能設(shè)備和家庭路由器,三者的配合非常復(fù)雜,操作麻煩,易出現(xiàn)配網(wǎng)失敗,造成用戶體驗(yàn)差。 文中設(shè)計(jì)是將白電Wi-Fi工作期劃分為若干個(gè)可調(diào)節(jié)時(shí)隙,如圖6所示,在T1時(shí)隙內(nèi),Wi-Fi工作在STA模式,在T2時(shí)隙內(nèi),Wi-Fi工作在AP模式,如此反復(fù)。 圖6 智能白電Wi-Fi模式分時(shí)復(fù)用 這種設(shè)計(jì)在宏觀上可使一顆Wi-Fi芯片同時(shí)工作在STA(station)和AP(access point)兩種模式,從軟件上虛擬出兩個(gè)網(wǎng)卡。工作在AP模式的網(wǎng)卡可用于手機(jī)向白電發(fā)送家庭中心路由器的SSID和密碼,也可用于局域網(wǎng)控制。而工作在STA模式的網(wǎng)卡則用于連接家庭路由器。由于設(shè)備AP熱點(diǎn)一直存在,手機(jī)APP可直觀地掃描到家庭中有哪些同品牌的智能家電,因此可以有選擇地對(duì)設(shè)備進(jìn)行網(wǎng)絡(luò)配置和局域網(wǎng)范圍內(nèi)的操控,能有效地提升用戶體驗(yàn)。 從原生Android系統(tǒng)出發(fā),采用裁剪加定制的方法研制面向智能白電的系統(tǒng)軟件,解決了行業(yè)缺乏平臺(tái)性系統(tǒng)軟件的問題,在智能白電外部傳感器驅(qū)動(dòng)設(shè)計(jì)、設(shè)備控制協(xié)議、網(wǎng)絡(luò)接入、通用性等方面克服了眾多技術(shù)難題。在業(yè)內(nèi)首次將多攝像頭、步進(jìn)電機(jī)等應(yīng)用于智能白電產(chǎn)品,支撐了M品牌CHiQ空調(diào)的“紅外人體狀態(tài)識(shí)別”和CHiQ冰箱的“食材識(shí)別”等業(yè)界領(lǐng)先的全新功能,不但有效提升了企業(yè)智能白電產(chǎn)品的研發(fā)效率和質(zhì)量,對(duì)整個(gè)智能家電產(chǎn)業(yè)、智能家居行業(yè)、人工智能發(fā)展也有一定的參考意義。4.2 智能白電設(shè)備控制協(xié)議
4.3 設(shè)備的網(wǎng)絡(luò)接入技術(shù)
5 結(jié)束語(yǔ)