More Related Content Similar to はじめてのAndroid Things Similar to はじめてのAndroid Things(20) More from Akira Sasaki(20) はじめてのAndroid Things2. 特徴
Peripheral I/O APIが追加。
PWM, I2C, SPI, UART, I2S対応のハードウェアと通信するためのAPI群が提供。ハード
ウェアのデバイスドライバ等を、標準的なAndroid APIをたたく事で、開発可能に。
User Driver APIが追加
ユーザードライバは、開発者が開発したデバイスドライバを既存のAndroidフレームワ
ークサービスに追加する事が可能になります。その事により、他のアプリケーション
から、標準のAndroid APIをたたく事で、ハードウェアの操作やイベントの取得が可能
になります。
BSPをGoogleが管理
Board Support Package(BSP)をGoogleが管理。Googleから標準的なアップデート
が提供されます。
Android Things Console
OTAによるシステムやアプリの大規模更新を標準でサポートされます。
3. User Driver
種類 概要
GPS GPS
HID Human Interface Devices (HID), Touch pads, keyboards, and game controllers
Sensors Sensors measure and report the conditions of the physical environment.
Audio audio drivers
6. Version
Version DP Version Release Date
0.51 DP5.1 August 2017
0.50 DP5.0 August 2017
0.41 DP4.1 June 2017
0.40 DP4.0 May 2017
現在、Versionは、DP(Developer Preview)。
正式版のリリースの発表は未定。
DP5.1では、OS Versionは8.0 Oreoが内包。
10. DevBoard
NXP i.MX7D NXP i.MX6UL Raspi3
Display DSI No HDMI + DSI
Camera CSI-2 NO CSI-2
USB
1x USB 2.0 Host
1x USB 2.0 OTG
1x USB 2.0 Host
1x USB 2.0 OTG
4x USB 2.0 Host
ADB USB経由でアプリ転送可能 USB経由でアプリ転送可能 Wifi経由でアプリ転送可能
$79 $69 ¥5,500
19. アプリ開発
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gclue.thingsApp">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<uses-library android:name="com.google.android.things"/>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.IOT_LAUNCHER"/>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
AndroidManifest.xml
com.google.android.thingsのライ
ブラリ使用を宣言
20. Gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
buildToolsVersion "26.0.2"
defaultConfig {
applicationId “com.gclue.thingsApp"
minSdkVersion 21
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:26.+'
compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha8'
testCompile 'junit:junit:4.12'
provided 'com.google.android.things:androidthings:0.5.1-devpreview'
}
dependenciesに、
“com.google.android.things.androidthings:0.
5.1-devpreview”
を追加
22. GPIO(Lチカ)
PeripheralManagerService service = new PeripheralManagerService();
try {
mLedGpio = service.openGpio(PIN_NAME);
mLedGpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
mHandler.post(mBlinkRunnable);
} catch (IOException e) {
Log.e(TAG, "Error on PeripheralIO API", e);
}
private Gpio mLedGpio;
private String PIN_NAME = "BCM4";
private Handler mHandler = new Handler();
private static final int INTERVAL_BETWEEN_BLINKS_MS = 1000;
23. private Runnable mBlinkRunnable = new Runnable() {
@Override
public void run() {
if (mLedGpio == null) {
return;
}
try {
trigger = !trigger;
mLedGpio.setValue(!mLedGpio.getValue());
mHandler.postDelayed(mBlinkRunnable, INTERVAL_BETWEEN_BLINKS_MS);
} catch (IOException e) {
Log.e(TAG, "Error on PeripheralIO API", e);
}
}
};
GPIO(Lチカ)
24. GPIO
private Gpio mButtonGpio;
private String PIN_NAME = "BCM4";
PeripheralManagerService service = new PeripheralManagerService();
try {
mButtonGpio = service.openGpio(PIN_NAME);
mButtonGpio.setDirection(Gpio.DIRECTION_IN);
mButtonGpio.setEdgeTriggerType(Gpio.EDGE_BOTH);
mButtonGpio.registerGpioCallback(mCallback);
} catch (IOException e) {
Log.e(TAG, "Error on PeripheralIO API", e);
}
定数 GPIO
Gpio.DIRECTION_IN 入力
Gpio.DIRECTION_OUT_INITIALLY_HIGH 出力(初期値 HIGH)
Gpio.DIRECTION_OUT_INITIALLY_LOW 出力(初期値 LOW)
private GpioCallback mCallback = new GpioCallback() {
@Override
public boolean onGpioEdge(Gpio gpio) {
Log.i(TAG, gpio.getName() + "が" + gpio.getValue());
return true;
}
};
定数 GPIO
Gpio.EDGE_BOTH どちらにも反応
Gpio.EDGE_FALLING HighからLowの変化に反応
Gpio.EDGE_RISING LowからHighの変化に反応
Gpio.EDHE_NONE 割り込みイベントに反応しない
27. I2C
/** I2C Device Name */
private static final String I2C_DEVICE_NAME = "I2C1";
/** I2C Slave Address */
private static final int I2C_ADDRESS = 0x53;
PeripheralManagerService manager = new PeripheralManagerService();
mDevice = manager.openI2cDevice(I2C_DEVICE_NAME, I2C_ADDRESS);
mDevice.writeRegByte(ADDRESS, data);
書き込み
読み込み
mDevice.writeRegBuffer(ADDRESS, data, data.length);
mDevice.readRegByte(ADDRESS, data);
mDevice.readRegBuffer(ADDRESS, data, data.length);
デバイスのオープン
宣言
28. MEMS
Micro Electro Mechanical Systemsの略
MEMS(メムス、Micro Electro Mechanical Systems)は、機械要素部品、センサ、アクチュエータ、
電子回路を一つのシリコン基板、ガラス基板、有機材料などの上に集積化したデバイスを指す。プロセ
ス上の制約や材料の違いなどにより、機械構造と電子回路が別なチップになる場合があるが、このよう
なハイブリッドの場合もMEMSという。
(Wikiより) https://ja.wikipedia.org/wiki/MEMS
I2Cにアクセスできれば、MEMSセンサーとの連携が可能になる