google邁向IoT的開端——推出Android Things作業系統
上個月Google推出Android Things 嵌入式系統取代“Brillo”,這意味著Google看好IoT(物聯網)發展,要與Apple的HomeKit抗衡。我本人是先學51微控制器,然後是ARM的stm32嵌入式開發,再到Android客戶端開發。因此,對於Android中的嵌入式開發比較感興趣。其實,Android Things是Android的一個分支版本,類似於可穿戴手錶,為開發者提供豐富的API介面,使用java語言開發。其框架結構如下:
可以看出,它與Android的框架是大致相同的。只是應用框架層換成特定的Java API Framework,另外增加了Google Services和Things Support Library。既然要用到Google Services,那麼需要在AndroidManifest.xml新增:
<uses-library android:name="com.google.android.things"/>
另外,在gradle新增依賴,注意不是compile,而是provided:provided 'com.google.android.things:androidthings:0.1-devpreview'
接下來,可以在Activity的onCreate裡面建立一個外設管理服務物件PeripheralManagerService:
PeripheralManagerService pioService = new PeripheralManagerService();
該服務提供獲取GPIO(通用IO口)、SPI(序列外設介面)、Uart(串列埠)、I2C(序列匯流排)、PWM(脈衝寬度調節)列表,與開啟對應的外設。在這裡主要介紹下GPIO控制LED燈開關:
//使用外設管理服務物件獲取GPIO列表
List<String> gpioList = pioService.getGpioList();
if(gpioList != null && gpioList.size() > 0) {
try {
//開啟列表中的第一個GPIO
Gpio ledPin = pioService.openGpio(gpioList.get(0));
//設定邊沿觸發型別
ledPin.setEdgeTriggerType(Gpio.EDGE_NONE);
//設定啟用型別
ledPin.setActiveType(Gpio.ACTIVE_HIGH);
//設定方向
ledPin.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
//設定為高電平,使能該GPIO埠
ledPin.setValue(true);
} catch (IOException e) {
e.printStackTrace();
}
}
如果你曾經接觸過微控制器或者嵌入式ARM開發,看到上面GPIO的操作是不是很熟悉呢?其實,在GPIO類裡面定義有關常量:
public static final int ACTIVE_HIGH = 1;//高電平
public static final int ACTIVE_LOW = 0;//低電平
public static final int DIRECTION_IN = 0;//輸入
public static final int DIRECTION_OUT_INITIALLY_HIGH = 1;//輸出並且初始化為高電平
public static final int DIRECTION_OUT_INITIALLY_LOW = 2;//輸出並且初始化為低電平
public static final int EDGE_BOTH = 3;//上升、下降沿同時觸發
public static final int EDGE_FALLING = 2;//下降沿觸發
public static final int EDGE_NONE = 0;//無觸發
public static final int EDGE_RISING = 1;//上升沿觸發
再來對比下ARM中stm32系列的GPIO初始化(庫函式操作版本):
void GPIO_init (){
GPIO_InitTypeDef GPIO_InitStructure; //宣告結構體
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//選擇GPIO_Pin_0埠
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//設定為推輓輸出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//設定時脈頻率
GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化結構體
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能時鐘
}
可以看出,ARM比Android Things的多了時脈頻率設定與使能。ARM中的時鐘分為內部低速、內部高速、外部低速與外部高速,主要是為了節約功耗,可靈活根據需求選擇時鐘並且單獨使能。我猜測,Android Things作業系統應該是預設了時脈頻率,才不需要單獨配置的。其實,ARM的庫函式是基於暫存器操作的,來看下暫存器操作初始化GPIO:
void LED_Init(void)
{
RCC->APB2ENR|=1<<2; //使能PORTA時鐘
GPIOA->CRH&=0XFFFFFFF0; //選中PA8埠
GPIOA->CRH|=0X00000003;//PA8推輓輸出
GPIOA->ODR|=1<<8; //PA8輸出高電平
}
上面暫存器操作涉及了指標、左移、與運算、或運算,這很符合C語言的特徵,這樣效率也是相當比較高的。可以想象到,Android Things底層也是基於暫存器操作;然後是Native 硬體抽象層呼叫底層方法,為上層提供介面;再是框架層使用java語言進行封裝,為應用層提供API介面。
目前存在開發平臺的侷限性:“樹莓派3”、英特爾微型可穿戴裝置“愛迪生”(Edison)以及恩智浦半導體的Pico平臺。但是,Google致力於增加更多認證裝置。相信不久的將來,Android的IoT作業系統會得到廣泛應用,讓我們共同期待屬於Android的物聯網時代的到來吧!
相關文章
- AliOS Things物聯網作業系統iOS作業系統
- Google作業系統基於Chrome?!Go作業系統Chrome
- Oracle推出全球首個自治作業系統Oracle作業系統
- Google 的 ARC 現能在多種作業系統上執行 Android 應用Go作業系統Android
- Android Things系統結構及展望Android
- 如何判斷作業系統大小端作業系統
- 作業系統(1)——作業系統概述作業系統
- 作業系統(一):作業系統概述作業系統
- 各個作業系統的 作業系統日誌作業系統
- 作業系統能實現國產替代嗎?智慧終端作業系統大調查作業系統
- 極端可靠的作業系統 EROS GPL了! (轉)作業系統ROS
- 作業系統(二):作業系統結構作業系統
- 【作業系統】作業系統綜述(一)作業系統
- 作業系統 作業5作業系統
- 開發作業系統的各種方法作業系統
- Linux 作業系統!開篇!!!Linux作業系統
- 開源作業系統彙總作業系統
- 分析師:Google進軍作業系統是遲早的事Go作業系統
- Google 跨裝置作業系統Fuchsia或將支援 Java,Android將何去何從?Go作業系統JavaAndroid
- 作業系統1—作業系統概論(上)作業系統
- 作業系統2—作業系統概論(下)作業系統
- 如何確定遠端計算機所用的作業系統計算機作業系統
- web端作業控制系統簡易實現Web
- Google I/O 大會上的 Android Things 亮點彙總GoAndroid
- Android Things 開發入門Android
- 作業系統的馬戲團作業系統
- 《作業系統》作業系統
- 作業系統作業系統
- [作業系統]作業系統
- Android 作業系統的記憶體回收機制Android作業系統記憶體
- Google Earth釋出最新版 支援Linux 作業系統GoLinux作業系統
- 微軟開發自己的 Linux 作業系統微軟Linux作業系統
- 作業系統: Unix作業系統演進簡史作業系統
- 計算機作業系統|作業系統引論計算機作業系統
- 不同作業系統上遮蔽oracle的作業系統認證方式作業系統Oracle
- ·Mozilla擬開發移動作業系統 將火狐押寶Android作業系統Android
- 同時廣泛支援搭載iOS、Android及鴻蒙作業系統的移動終端iOSAndroid鴻蒙作業系統
- 高薪祕訣,跟著AliOS Things輕鬆入門作業系統:互斥訊號量高薪iOS作業系統