摘 要:隨著科學(xué)技術(shù)的不斷發(fā)展,物聯(lián)網(wǎng)技術(shù)已經(jīng)被廣泛應(yīng)用于人們的日常生活中。其中,智能家居的出現(xiàn)與發(fā)展給人們的生活方式帶來了巨大的變化。但目前智能家居技術(shù)產(chǎn)品沒有統(tǒng)一的標(biāo)準(zhǔn),并且價格昂貴,難以實現(xiàn)真正的家居應(yīng)用。針對這一問題,提出一種以Android平臺為基礎(chǔ)的智能家居系統(tǒng)方案,該方案包括控制平臺搭建、終端 APP設(shè)計、智能電器仿真?,F(xiàn)場控制平臺設(shè)計是智能家居系統(tǒng)的核心,方案采用ARM9嵌入式開發(fā)板。主要設(shè)計內(nèi)容有現(xiàn)場控制平臺硬件搭建、現(xiàn)場控制平臺Android系統(tǒng)移植、智能家居電器模擬裝置、驅(qū)動程序移植、Android應(yīng)用軟件設(shè)計等。方案采用無線WiFi與硬件設(shè)備進(jìn)行通信,同時又作為服務(wù)器與手機(jī)終端實時通信。手機(jī)終端APP作為遠(yuǎn)程控制器對智能電器進(jìn)行遠(yuǎn)程控制。該智能家居系統(tǒng)設(shè)計具有很強(qiáng)的可拓展性和靈活性,易于二次開發(fā),控制穩(wěn)定性較高。
關(guān)鍵詞:智能家居;安卓系統(tǒng);系統(tǒng)移植;驅(qū)動程序;應(yīng)用程序;遠(yuǎn)程控制
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:2095-1302(2024)07-0-04
0 引 言
隨著科學(xué)技術(shù)的發(fā)展,物聯(lián)網(wǎng)技術(shù)已經(jīng)被廣泛應(yīng)用到工業(yè)生產(chǎn)和人們的日常生活中。智能家居的出現(xiàn)使得人們的家庭生活方式發(fā)生了巨大的變化。與傳統(tǒng)的家居相比,智能家居為人們提供了一種能夠進(jìn)行遠(yuǎn)程控制且更加智能、舒適的生活環(huán)境。物聯(lián)網(wǎng)智能家居具有智能化、實時性、多樣性、創(chuàng)新性等特點[1-2]。
我國智能家居發(fā)展起步相對較晚,但是發(fā)展前景和應(yīng)用市場非常廣泛。目前,現(xiàn)有的智能家居系統(tǒng)兼容性差、操作復(fù)雜、價格昂貴。另外,當(dāng)前智能家居沒有統(tǒng)一的規(guī)范和行業(yè)標(biāo)準(zhǔn)。使得一些智能家居產(chǎn)品協(xié)議標(biāo)準(zhǔn)不兼容,維護(hù)困難,二次開發(fā)難度大[3]。針對這一困境,提出一種以ARM9嵌入式開發(fā)板為核心的智能家居系統(tǒng)方案。根據(jù)控制需求,只需要適當(dāng)添加外圍電路和設(shè)備,并編寫簡單的程序就可以實現(xiàn)遠(yuǎn)程智能控制。
1 現(xiàn)場控制平臺設(shè)計
1.1 控制平臺硬件設(shè)計
根據(jù)控制方案設(shè)計需求,控制芯片采用Exynos4412,Exynos4412芯片是基于ARM Cortex-A9架構(gòu)的高性能四核處理器[4]。核心板還包括外部內(nèi)存、存儲芯片和多個外部接口。Exynos4412核心板如圖1所示。
1.2 控制平臺操作系統(tǒng)
為了提高系統(tǒng)開發(fā)的兼容性和可拓展性,操作系統(tǒng)選用Android 5.0。該系統(tǒng)具有開放性、硬件選擇多樣性、開發(fā)便利性等特點。Android 5.0系統(tǒng)采用分層架構(gòu)方式。應(yīng)用層位于最上層,該層是為用戶提供服務(wù)的,例如手機(jī)終端APP等。應(yīng)用程序框架層用來提供API函數(shù)接口和組件,這些接口和組件包括:Views組件、Activity Manager、Content Provider、Service、Intent and Intent Filter等。系統(tǒng)庫是Android提供的內(nèi)部函數(shù)庫,只能通過上層的應(yīng)用程序框架層進(jìn)行調(diào)用。常用的函數(shù)庫有:Media Framework、Surface Manager、SGL、OpenGL ES 1.0、SQLite等。運行環(huán)境層包括兩部分:Android核心函數(shù)庫提供Java核心函數(shù)庫功能,Dalvik虛擬機(jī)提供Java運行環(huán)境。Linux內(nèi)核層用來提供各種系統(tǒng)服務(wù)和管理功能。Android 5.0系統(tǒng)架構(gòu)如圖2所示。
1.3 智能家居電器模擬裝置
智能家居電器模擬裝置采用S3C2416開發(fā)板資源[5]。S3C2416開發(fā)板提供各種功能接口,以供開發(fā)者使用。S3C2416開發(fā)板移植的是開源Linux 3.1.8操作系統(tǒng),S3C2416開發(fā)板如圖3所示。
2 現(xiàn)場控制平臺Android系統(tǒng)移植
2.1 啟動引導(dǎo)程序
嵌入式操作系統(tǒng)通常用Bootloader作為啟動引導(dǎo)程序。內(nèi)核啟動前,Bootloader對硬件進(jìn)行重置,并定位至RAM程序,完成內(nèi)核啟動[6]。
Exynos4412啟動時序是完成Uboot加載的重要環(huán)節(jié),直接決定系統(tǒng)啟動成功與否。Uboot的加載過程如圖4所示。
BL0是iROM中的一段初始化程序,包括一些基本系統(tǒng)指令。例如:重置DDR3、初始化Clock、重置Stack等。BL2根據(jù)OM值將Uboot.bin文件拷貝至DDR3中執(zhí)行。Uboot.bin將Android內(nèi)核定位至DDR3中,引導(dǎo)啟動Android內(nèi)核。
Uboot的工作過程分為兩部分:第一部分,設(shè)置CPU工作模式,設(shè)置異常向量表地址,清空流水線,設(shè)置時鐘,初始化SDRAM,初始化串口等;第二部分,初始化外設(shè),進(jìn)入超循環(huán),處理用戶指令,重置啟動內(nèi)核參數(shù),內(nèi)核啟動。Uboot的工作流程如圖5所示。
2.2 Android Kernel移植
Android內(nèi)核具有將近兩萬個文件,分別位于頂層目錄下的17個子目錄中[7]。Android內(nèi)核代碼目錄如圖6所示。
移植Linux3.0.86內(nèi)核到Exynos4412平臺上時需要設(shè)置Makefile文件,執(zhí)行make menuconfig程序進(jìn)行參數(shù)配置。這里可以配置串口設(shè)備、WiFi驅(qū)動、網(wǎng)卡設(shè)備等。參數(shù)配置完畢后,執(zhí)行make命令即可生成內(nèi)核鏡像文件。Linux內(nèi)核圖形配置如圖7所示。
2.3 驅(qū)動程序移植
驅(qū)動程序是計算機(jī)與設(shè)備之間通信的程序,類似于軟硬件之間的接口。
溫度采集驅(qū)動程序:硬件設(shè)計采用DS18B20溫度傳感器[8-9]。DS18B20驅(qū)動程序?qū)儆谧址停虼诵枰治鯠S18B20驅(qū)動結(jié)構(gòu)。DS18B20驅(qū)動結(jié)構(gòu)框圖如圖8所示。
首先需要定義DS18B20驅(qū)動注冊函數(shù)和驅(qū)動卸載函數(shù),用來訪問內(nèi)核。驅(qū)動注冊函數(shù)中包括注冊文件結(jié)構(gòu)體、創(chuàng)建類和創(chuàng)建設(shè)備節(jié)點。這里創(chuàng)建設(shè)備節(jié)點定位為ds18b20,在注冊文件操作結(jié)構(gòu)體中可以定義溫度傳感器數(shù)據(jù)的讀取和寫入函數(shù),還可以對其進(jìn)行初始化設(shè)置。例如:read函數(shù)用來對DS18B20進(jìn)行數(shù)據(jù)的讀取操作,write函數(shù)用來對DS18B20進(jìn)行數(shù)據(jù)的寫操作,reset函數(shù)用來對DS18B20進(jìn)行數(shù)據(jù)的初始化操作。
LCD驅(qū)動程序:硬件設(shè)計采用S702-AT070TN92型號7寸LCD電容屏[10]。LCD驅(qū)動結(jié)構(gòu)框圖如圖9所示。
首先,配置數(shù)組4412_lcd,定義4412_get_lcd函數(shù)用來獲取數(shù)組信息并進(jìn)行存儲。由S3cfb_set_platdata函數(shù)和S3c_fb截取數(shù)據(jù)發(fā)送至S3c數(shù)據(jù)結(jié)構(gòu)體和S3c_fb_pd_win結(jié)構(gòu)體。經(jīng)過匹配函數(shù),將S3c_fb_pd_win結(jié)構(gòu)體數(shù)據(jù)送至fb_videomode結(jié)構(gòu)體中,結(jié)合幀緩存信息結(jié)構(gòu)體,并通過fb_videomode_to_var函數(shù)進(jìn)入屏蔽信息結(jié)構(gòu)體中。其次,由register_framebuffer函數(shù)將幀緩存信息結(jié)構(gòu)體數(shù)據(jù)傳送至幀緩存信息結(jié)構(gòu)體數(shù)組中,由get_fb_info函數(shù)將獲取的數(shù)據(jù)傳送至幀緩存信息結(jié)構(gòu)體。最后由幀緩存結(jié)構(gòu)體數(shù)據(jù)信息和文件操作結(jié)構(gòu)體信息打開幀緩存獲取數(shù)據(jù)。
WiFi驅(qū)動程序:在各種Android設(shè)備中幾乎都會嵌入WiFi芯片,這里Android WiFi系統(tǒng)采用WPA_supplicant。硬件選用RT3070 USB接口WiFi模塊,Android WiFi系統(tǒng)主要模塊包括:WiFi服務(wù)、WiFi監(jiān)聽器、WPA_supplicant、Linux WiFi驅(qū)動等。
Android WiFi系統(tǒng)結(jié)構(gòu)主要包括四層。最上層為Android架構(gòu)層,該層主要包括無線設(shè)置、WiFi設(shè)置、可接入點集、WiFi使能器、WiFi管理器、WiFi服務(wù)、WiFi監(jiān)聽器等。第二層為Java本地接口層,主要完成Android_net_WiFi_WiFi接口設(shè)置。第三層為WPA_supplicant層,用來完成WPA客服端和WPA服務(wù)器配置。第四層為內(nèi)核層,實現(xiàn)WiFi驅(qū)動功能。
Android WiFi系統(tǒng)結(jié)構(gòu)框圖如圖10所示。
3 Android應(yīng)用軟件設(shè)計
Android應(yīng)用軟件設(shè)計是人機(jī)交互界面設(shè)計的重要環(huán)節(jié)。對于用戶而言,只需要對可視化界面進(jìn)行簡單的操作,即可使用智能控制平臺。應(yīng)用軟件設(shè)計過程中采用Android操作系統(tǒng)支持的接口函數(shù)和自定義接口函數(shù)相結(jié)合的方式。
3.1 溫度模塊軟件設(shè)計
溫度傳感器DS18B20將采集到的數(shù)據(jù)發(fā)送至控制平臺,由控制平臺對數(shù)據(jù)進(jìn)行處理,并通過無線傳輸網(wǎng)絡(luò)連接手機(jī)終端APP,進(jìn)而完成溫度顯示。當(dāng)手機(jī)終端APP訪問服務(wù)器使用DS18B20時,會調(diào)用I18b20Service.aidl接口文件獲取18b20Service服務(wù)。在APP顯示窗口,使用組件TextView顯示溫度值。
DS18B20最高顯示精度為0.062 5,因此需要將采集到的數(shù)據(jù)乘以0.062 5才能得到真實值。在溫度顯示過程中,還要將數(shù)據(jù)轉(zhuǎn)換為十進(jìn)制顯示。
3.2 遠(yuǎn)程視頻監(jiān)控軟件設(shè)計
遠(yuǎn)程視頻監(jiān)控模塊采用C/S架構(gòu),服務(wù)器采集視頻流,并在應(yīng)用程序上顯示。服務(wù)器通過WiFi模塊聯(lián)網(wǎng),可以在手機(jī)終端顯示。
硬件選用Z301攝像頭,V4L2驅(qū)動程序主要包括struct video_device、structv4l2_capability、structv4l2_format、structv4l2_pix_format、structv4l2_requestbuffers等結(jié)構(gòu)體。V4L2驅(qū)動程序通過調(diào)用video_register_device函數(shù)實現(xiàn)。視頻編碼采用MJPEG-streamer實現(xiàn),它可以將視頻流轉(zhuǎn)換為MJPEG格式。視頻流通常是YUV格式,MJPEG是RGB格式。因此,需要進(jìn)行顯示格式轉(zhuǎn)換。YUV格式轉(zhuǎn)換為RGB格式的公式如下:
最后將編譯生成的input_uvc.so、output_http.so文件和可執(zhí)行程序mipg_streamer放至現(xiàn)場控制平臺根目錄lib中。通過運行命令mjpg_streamer-i來配置現(xiàn)場IP地址和端口號。至此,MJPEG-streamer工具移植完成。
3.3 手機(jī)終端應(yīng)用軟件設(shè)計
為增強(qiáng)開發(fā)平臺的通用性,遠(yuǎn)程控制終端采用市場較為廣泛的Android系統(tǒng)手機(jī)?;ヂ?lián)網(wǎng)數(shù)據(jù)傳輸使用套接字Socket實現(xiàn),協(xié)議為TCP/IP。用套接字Socket建立服務(wù)器和終端鏈接,用bind函數(shù)尋址端口,用connect函數(shù)發(fā)送鏈接,用accept函數(shù)監(jiān)聽。連接建立完成后,即可使用send函數(shù)和recv函數(shù)進(jìn)行數(shù)據(jù)傳輸。例如在手機(jī)終端視頻監(jiān)控中,可以直接利用系統(tǒng)支持的API接口通過SurfaceView函數(shù)建立視頻播放平臺,這樣可以避免重新設(shè)計視頻播放程序。終端APP功能模塊設(shè)計和現(xiàn)場控制平臺設(shè)計具有類似的開發(fā)模式和流程,這里不再一一敘述。
4 結(jié) 語
本文對基于Android平臺的智能家居系統(tǒng)設(shè)計方案進(jìn)行了研究。設(shè)計了現(xiàn)場控制架構(gòu),搭建了硬件平臺,完成了現(xiàn)場控制平臺Android系統(tǒng)移植、驅(qū)動程序移植、Android應(yīng)用軟件設(shè)計,并采用無線WiFi與硬件設(shè)備進(jìn)行通信。本文設(shè)計的智能家居系統(tǒng)結(jié)構(gòu)簡單、便于維護(hù)、成本較低、可拓展性強(qiáng),易于二次開發(fā)。
參考文獻(xiàn)
[1]朱敏玲,李寧.智能家居發(fā)展現(xiàn)狀及未來淺析[J].電視技術(shù),2015,39(4):82-85.
[2]李曉陽. WiFi技術(shù)及其應(yīng)用與發(fā)展[J]. 信息技術(shù),2012,36(2):196-198.
[3] LIN C M,LIN J H,DOW C R R. Benchmark dalvik and native code for android system [J]. Innovations in bio-inspired computing and applications,2011,17(5):320-323.
[4]鞏琛,蔡文. 基于ARM的Linux驅(qū)動調(diào)試技術(shù)研究[J]. 計算機(jī)應(yīng)用與軟件,2016,33(3):232-235.
[5]楊威,高文華. 基于Android的智能家居終端設(shè)計與研究[J]. 計算機(jī)技術(shù)與發(fā)展,2013,23(7):245-248.
[6] OGAWA N,OIKAWA S. Implementing the device driver of external human interaction device for the Android [C]// Proceedings of 2013 IEEE/ACIS 12th International Conference on Computer and Information Science(ICIS). Niigata,Japan:IEEE,2013:391-396.
[7]張定. 基于物聯(lián)網(wǎng)的智能家居的設(shè)計與研究[D]. 武漢:武漢理工大學(xué),2015.
[8]劉巖. 基于S5PV210開發(fā)板的Android系統(tǒng)移植與應(yīng)用開發(fā)[D]. 青島:中國海洋大學(xué),2013.
[9]張蒙蒙. 基于Android智能家居系統(tǒng)設(shè)計[D].洛陽:河南科技大學(xué),2017.
[10]嚴(yán)海洋. 基于ARM的智能家居系統(tǒng)的設(shè)計與實現(xiàn)[D]. 哈爾濱:哈爾濱工業(yè)大學(xué),2013.