林鑫睿
摘要: Android Things是谷歌公司推出的新一代智能物聯(lián)網(wǎng)操作系統(tǒng),有效地降低了開發(fā)的難度。該文首先對(duì)Android Things的結(jié)構(gòu)、優(yōu)勢和應(yīng)用場景進(jìn)行了分析,然后從硬件的準(zhǔn)備、關(guān)鍵技術(shù)的實(shí)現(xiàn)來探討如何基于Android Things來進(jìn)行LED燈開關(guān)的操作試驗(yàn),為學(xué)習(xí)Android Things提供了較好的實(shí)踐案例。
關(guān)鍵詞:物聯(lián)網(wǎng);Android Things;LED燈控制;樹莓派
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)03-0084-02
1 Android Things技術(shù)
Android Things為谷歌公司在2016年12月發(fā)布的物聯(lián)網(wǎng)操作系統(tǒng)。在圖1的系統(tǒng)架構(gòu)中可看出,Android Things通過Things Support Library庫,擴(kuò)展了核心Android框架,從而可使APP能夠與手機(jī)上沒有的硬件集成在一起。此外,出于優(yōu)化的目的,Android Things只是選用了Android API的子集。由于嵌入式設(shè)備典型情況下是為用戶呈現(xiàn)單個(gè)應(yīng)用程序,因此在Android Things中一次只能運(yùn)行一個(gè)應(yīng)用程序,而且應(yīng)用程序?qū)㈦S著系統(tǒng)自動(dòng)啟動(dòng)。
Android Things帶來了如下顯著的優(yōu)勢:
1) 在標(biāo)準(zhǔn)上,通過谷歌的品牌和影響力,類似于Android手機(jī)操作系統(tǒng),有望在業(yè)界中推動(dòng)建立一個(gè)流行的智能物聯(lián)網(wǎng)操作系統(tǒng)。
2) 在開發(fā)上,可以在Android Things中使用Java語言來編程,通過調(diào)用Android Things提供的有關(guān)API來操作硬件,此外還可以使用谷歌豐富的開發(fā)資源,降低實(shí)現(xiàn)難度。
3) 在效率上,使用Android Studio來開發(fā)和調(diào)試程序,直接可以在物聯(lián)網(wǎng)硬件上運(yùn)行,提高了開發(fā)效率。
4) 硬件價(jià)格低,Android Things對(duì)硬件的要求比Android要低。目前支持Androd Things的開發(fā)板有:NXP i.MX7D、NXP i.MX6UL、Raspberry Pi 3、Intel Edison、Intel Joule。
5) 機(jī)器學(xué)習(xí)能力:支持TensorFlow,能夠?qū)⑸疃葘W(xué)習(xí)應(yīng)用到物聯(lián)網(wǎng)領(lǐng)域,提高物聯(lián)網(wǎng)設(shè)備的智能性。
6) 安全性:通過Cloud IOT云平臺(tái)來進(jìn)行安全管理,依靠谷歌的安全團(tuán)隊(duì)技術(shù),提高物聯(lián)網(wǎng)產(chǎn)品的使用安全性,減少數(shù)據(jù)泄露和被攻擊的幾率。
可以將Android Things部署在多個(gè)物聯(lián)網(wǎng)領(lǐng)域,例如:智慧城市、車聯(lián)網(wǎng)、智能音箱、數(shù)字標(biāo)牌、打印機(jī)等,但目前受開發(fā)板成本的限制,Android Things還沒有開始大規(guī)模在商業(yè)市場上應(yīng)用。
2 硬件準(zhǔn)備
1) 樹莓派(Raspberry PI)。樹莓派作為專門用于學(xué)習(xí)計(jì)算機(jī)編程的微型電腦,具有體積小、功能強(qiáng)大、價(jià)格便宜的優(yōu)點(diǎn),因此在本實(shí)驗(yàn)中采用樹莓派來安裝Android Things。
2) 面包板。面包板是集成電路實(shí)驗(yàn)板,板上由若干個(gè)小插孔組成,用于插放各類電子元器件。中間部分的5個(gè)小插孔是縱向相互連通,而上、下部分的所有橫向孔是相互連通的。面包板的優(yōu)點(diǎn)在于不需要焊接,組裝電路較快,而且可以重復(fù)使用電子元器件。
3) 其他配件:紅、黃、藍(lán)LED燈各1個(gè),電阻3個(gè)、杜邦線若干、HDMI接口顯示屏1個(gè)。
3 系統(tǒng)實(shí)現(xiàn)
3.1 功能介紹
通過APP操作界面設(shè)置LED燈的開和關(guān),并通過滑動(dòng)欄來控制開燈的閃爍頻率。
3.2 軟件開發(fā)環(huán)境配置
1) Android Studio 3.0對(duì)Android Things提供了支持,需要到谷歌開發(fā)者官網(wǎng)下載并安裝。
2) 打開Android Studio,新建一個(gè)項(xiàng)目,設(shè)置目標(biāo)Android設(shè)備為“Android Things”,并選擇合適的API版本。
3.3 關(guān)鍵實(shí)現(xiàn)代碼
實(shí)現(xiàn)的原理是獲取連接在GPIO的引腳對(duì)象,通過該對(duì)象去訪問連接在燈上的引腳BCM6,然后進(jìn)行true/false的取值來發(fā)送接通/關(guān)閉引腳,從而實(shí)現(xiàn)對(duì)燈的管理。
1) 定義一個(gè)PeripheralManagerService對(duì)象:PeripheralManagerService是負(fù)責(zé)管理外設(shè)連接的類。
PeripheralManagerService service = new PeripheralManagerService();
2) 定義一個(gè)Gpio對(duì)象:Gpio對(duì)象用于讀取輸入設(shè)備的二進(jìn)制狀態(tài)(例如:按鈕開關(guān))和控制二進(jìn)制輸出設(shè)備的開關(guān)狀態(tài)(例如:LED燈)。PeripheralManagerService對(duì)象的openGpio方法用于打開指定引腳名字的Gpio對(duì)象。
Gpio mLedGpio= service.openGpio("BCM6");
3) 通過Gpio對(duì)象的setDirection方法來配置 BCM6引腳為輸出信號(hào)引腳。
mLedGpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
4) 調(diào)用Gpio對(duì)象的setValue(true)方法打開LED,或者調(diào)用setValue(false)方法關(guān)閉LED。
5) 最后調(diào)用Gpio對(duì)象的close()方法關(guān)閉端口的連接,釋放資源。
本案例的運(yùn)行結(jié)果如圖5,6所示:
4 結(jié)論
Android Things能夠和樹莓派較好地結(jié)合,進(jìn)行物聯(lián)網(wǎng)的相關(guān)應(yīng)用。在本實(shí)驗(yàn)搭建的LED環(huán)境中,可以作進(jìn)一步的物聯(lián)網(wǎng)擴(kuò)展開發(fā)實(shí)驗(yàn),例如:增加煙霧探測、溫度、人體紅外感應(yīng)等類型的傳感器,添加攝像頭進(jìn)行圖像捕捉等。
參考文獻(xiàn):
[1] 謝景明,鐘閏祿,陳長輝,等. Android移動(dòng)開發(fā)項(xiàng)目式教程 [M].2版.北京:人民郵電出版社,2015.
[2] Google, Things[EB/OL].[2018-01-03]. https://developer.android.google.cn/things/index.html.