はじめてのAndroid Things
GClue, Inc.
Akira Sasaki
ABC 2017 Autumn
特徴
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によるシステムやアプリの大規模更新を標準でサポートされます。
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
Peripheral I/O
• I2C
• PWM
• I2S
• GPIO
• SPI
へのアクセスをAPIレベルでサポート
FaBo接続の拡張時
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が内包。
AIY Project
AIY Project
I2S Mic
I2S Speaker GPIO
対応ボード
Board Support Package(BSP)をGoogleが提供するボード
NXP Pico i.MX7D
Raspberry Pi 3
NXP SprIoT i.MX6UL
NXP Argon i.MX6UL
NXP Pico i.MX6UL
Edison JOULE
Edison, JOULEは、Intelが2017年12月16日出荷分で終了。
Discontinued.
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
PIN Header
NXP i.MX7D
NXP i.MX6UL
Raspi3
PICO-PI-IMX7-STARTKIT
$169
ADB
RaspPi3
HDMI 5 インチ Display ¥4,000
RaspPi3 ¥5,500
Android Things Console
OTA(Over To Air)によるSystem Imageの更新やアプリケーションの更新が可能
各社動向
• QualcommのLTE統合Snapdragon 210がGoogleのIoT OS
、Android Thingsをサポート
• 台湾MediaTek社は、Google AssistantとAndroid Thingsの
双方に対応したSoCとして「MT8516」を発表
• Googleが、Android ThingsをサポートしたCLOUD IOT
COREをPublic Betaで公開
PICO-PI-IMX7-STARTKITにFaBo装着
RaspPi3にFaBo装着
アプリ開発
<?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のライ
ブラリ使用を宣言
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”
を追加
GPIO
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;
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チカ)
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 割り込みイベントに反応しない
I2C
I2C
Si7053
SCL
SDA
VCC
GND
4つの配線でAndroid Thingsとつなぐ
SDA, SCL, VCC, GND
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);
デバイスのオープン
宣言
MEMS
Micro Electro Mechanical Systemsの略
MEMS(メムス、Micro Electro Mechanical Systems)は、機械要素部品、センサ、アクチュエータ、
電子回路を一つのシリコン基板、ガラス基板、有機材料などの上に集積化したデバイスを指す。プロセ
ス上の制約や材料の違いなどにより、機械構造と電子回路が別なチップになる場合があるが、このよう
なハイブリッドの場合もMEMSという。
(Wikiより) https://ja.wikipedia.org/wiki/MEMS
I2Cにアクセスできれば、MEMSセンサーとの連携が可能になる
最近のMEMS(I2C対応)ニュース
mCubeが世界最小となる1mmx1mmの加速度センサ
ー(MC3571)を発表
http://www.mcubemems.com/news-events/press-releases/mcube-mc3571-pr/
InvenSenseが世界初となる3コア搭載のモーションセン
サーを発表
http://ir.invensense.com/phoenix.zhtml?c=237953&p=irol-newsArticle&ID=2003597
maxim integratedが、脈と酸素飽和度が計測可能な
MAX30100を発表
https://www.maximintegrated.com/jp/products/analog/sensors-and-sensor-
interface/MAX30100.html
Boschがガス、湿度、温度、大気圧の計測が可能な環境
センサーBME680を発表
http://prtimes.jp/main/html/rd/p/000000139.000005028.html
その他
• SPI
Display, Sensor等
• I2S
マイク、スピーカー等
宇都宮大学でのThingsの講座
2017年度の試み
http://docs.fabo.io/things/
テキスト(現在作成中)
既存のAndroid + ハードウェアの授業を
Android Thingsに置き換え

はじめてのAndroid Things