李鵬鵬 徐偉業
【摘要】 隨著嵌入式系統的不斷發展和網絡的廣泛普及,智能家居也逐步走入生活。論文從智能家居的理念出發,以現代網絡為橋梁,以智能手機為控制平臺,以家居音樂播放器為控制對象,對嵌入式音樂播放器的開發以及遠程控制作了詳細的分析與論述,并給出系統關鍵技術的設計思路和設計過程。
【關鍵詞】 安卓系統 嵌入式ARM 遠程控制
引言
智能家居控制系統以家居電器及家電設備為主要控制對象,利用綜合布線技術、網絡通信技術、安全防范技術、自動控制技術、音視頻技術將家居生活有關的設施進行高效集成,構建高效的住宅設施與家庭日程事務的控制管理系統,提升家居智能、安全、便利、舒適,并實現環保控制系統平臺。其中家居電器控制采用弱電控制強電方式,既安全又智能,可以用遙控、定時等多種智能控制方式實現對在家里飲水機、插座、空調、地暖、投影機、音像設備以及新風系統等進行智能控制,用以避免飲水機在夜晚反復加熱影響水質,在外出時斷開插排通電,避免電器發熱引發安全隱患等等。本系統設計正是在這樣的背景下產生,并以家居音頻設備為控制對象。整個系統的設計是通過隨身攜帶的智能手機利用無線網絡和家庭無線路由對嵌入式ARM為核心的音樂播放器進行遠程操控。下文是對整個系統的設計原理和設計過程的詳細論述。
一、總體方案設計
整個系統由智能手機、路由器、開發板三個部分組成。智能手機通過連接無線信號實現與開發板的通信,這里由于所使用的mini2440開發板缺少無線網卡的支持,所以路由器充當了無線網卡的作用,負責發射無線信號:
1.1 硬件方案
硬件平臺選用友善之臂提供的mini2440開發板,處理器采用基于ARM9內核的Samsung S3C2440。由于S3C2440內部配有64M SDRAM,256M NandFlash,所以完全可以勝任內部的音頻解碼任務。另外,為了保證系統運行時的穩定性,采用了專業的CPU內核電源芯片和復位芯片。相對來說,手機的選擇比較自由,只要是安卓系統的智能手機都可以,在APP測試時,要求手機的安卓操作系統是Android2.3版本或以上。
1.2軟件方案
要將硬件設備連接并且工作,關鍵是軟件的開發,因此軟件開發環境的選擇很重要。整個系統的軟件開發主要包括操作系統的裁剪和移植、音頻播放程序的開發、Android應用的開發三個部分。音頻解碼采用軟件解碼。主要是利用CPU進行音頻數據的解碼,這需要在Linux操作系統下移植一個開源音頻解碼庫--madplay。采用軟件解碼雖然增加了CPU的開銷,但大大縮短了開發時間,而且不需要考慮解碼芯片的選擇和驅動問題。
智能手機選用了安卓的操作系統,主要考慮到安卓系統是一種基于Linux的自由及開放源代碼的操作系統,且市場占有量較高,2011年第一季度,Android在全球的市場份額首次超過塞班系統,躍居全球第一。 2013年的第四季度,Android平臺手機的全球市場份額已經達到78.1%,全世界采用這款系統的設備數量已經達到10億臺,2014年第一季度Android平臺已占所有移動廣告流量來源的42.8%,首度超越iOS(運營收入不及iOS)。
二、軟件開發
2.1 操作系統裁剪
操作系統的裁剪是系統設計的重點,一個精簡的操作系統不僅可以加快系統的開機時間,還能減小CPU的開銷,使系統運行的更加流暢。操作系統由uboot、內核、文件系統組成,需要裁剪的部分包括內核(去掉不必要的配置)以及文件系統
2.2 音頻解碼數據庫的移植
madplay是linux下的開源音樂播放器,利用開源解碼庫libmad實現音頻的編解碼,目前該播放器除了不支持網絡歌曲的播放外,其余功能都支持,如快進、暫停、繼續等。開發人員需要自己開發一個自己的可視化界面或者播放器的管理程序,這樣使用起來才方便、快捷。系統設計時需要在開發板的ARM內核上運行madplay可執行文件,所以移植madplay也是本次設計的重要環節。
2.3 音樂播放器設計
播放器的核心代碼就是音樂的播放程序,在整個行程序運行時的內部主控流程:
父進程負責接收按鍵信息或者socket信息。監聽部分由select()函數完成,當按鍵或者socket文件描述符發生變化的時候,父進程首先判斷按鍵或者socket信息,根據不同的信息向子進程或者孫進程發送不同的信號。如,父進程收到的按鍵信息是“暫停”,調用kill()函數向子進程和孫進程發送SIGSTOP信號就可以暫停音樂的播放。
2.4 Android應用程序設計
Android操作系統下設計控制軟件可簡可繁,這里的界面的設計由于缺少專業UI的支持,所以設計的比較簡單。用到的控件主要有Button、TextView、ScrollView、ListView、TabHost,其中前面4個采用常規控制,調用簡單,只需在activity_main.xml文件中調用并設置相應的屬性(如長、寬、在頁面中的位置等)即可。TabHost用起來有點麻煩,這里需要注意兩點:
在開發自己的app過程中,主要難點在于新的線程接收服務器返回的信息,其主要的代碼如下:
Android部分的設計邏輯明了,算法簡單。作為客戶端或者命令發送端,只需向服務器發送自己的指令即可。
三、性能測試
系統的運行需要開發板、路由器以及APP三者的配合,路由器和開發板之間通過網線連接。需要設置路由器和開發板在同一個網段。測試中,路由器IP為192.168.1.10,開發板IP為192.168.1.22。經測試,播放器可以通過按鍵或者APP實現歌曲切換、音量調節、歌曲信息顯示、播放模式的切換。并且經過裁剪的操作系統啟動速度快,從系統上電到程序運行僅需要20秒。
本系統設計關鍵在于操作系統的裁剪移植以及加入了手機APP的控制。省去了QT以及內核中不必要的模塊,使播放器的開機速度更加快,同時也減小了CPU的資源消耗;加入手機APP的控制,符合目前智能家居的發展趨勢,使得播放器使用起來更加的方便、人性化。
系統還存在一個問題未能很好解決。歌曲播放完畢并且切換到下一首后,手機APP測并不能實現播放曲目的更新。
目前,APP上顯示的歌曲信息只有三種情況會更新:點擊上一首或者下一首、暫停后繼續、點擊開始播放。試著修改代碼,子進程在實現共享內存更新后將歌曲信息發送給APP,但是問題來了,APP和開發板的通信是基于UDP協議,即無連接,通俗的說,每次通信過程,只有當APP發送數據給開發板,開發板收到數據后同時記下了客戶端(APP)地址信息,通過地址信息將數據返回給APP。所以如果系統上電后APP并未接入網絡,開發板發送數據時將會報錯。感興趣的讀者可以在APP發送數據給開發板后設定一個標志位,然后根據這個標志位判斷播放下一首歌曲的時候是否要將歌曲信息發送給APP。
參 考 文 獻
[1] Matt Welsh & Lar Kaufman,linux權威指南[M] 中國電力出版社 2000 年3月
[2]科波特,LINUX設備驅動程序[M]中國電力出版社
[3]Robert Love,linux內核設計與實現[M] 機械工業出版社 2011年8月
[4]游雙,linux高性能服務器編程[M] 機械工業出版社 2013年6月