#はじめに
この記事は Aizu Advent Calendar 2018 23日目の記事になっています。22日目の記事はmt_coffさんのVue.jsでゆるくAtomic Designをやるです。24日目の記事は追加されたらリンクを貼ります。
Android Thingsの入門記事が少なく感じたのでメモ兼ねて書いてみました。
間違い等あったら遠慮なくコメントでご指摘ください。
#用意するもの
Raspberry Pi 3一式
ブレッドボード、LED、抵抗などLチカするのに必要なもの
#今回のゴール
Android Thingsの導入からLチカまでができる
#Android Thingsとは
Googleが「IoT向けのプラットフォーム」として発表したOSなどを含むソフトウェア群…らしいです。正直この辺が調べてもなんとなくしかわからなかったので詳しい人教えて下さい。
この記事ではIoT機器向けのOSを指すことにします。
###(個人的に思う)Androidアプリ開発者にとってのAndroid Thingsのメリット
- Androidアプリ開発のノウハウをIoTデバイスの開発に活かすことができる
- 使い慣れたIDE(Android Studio)で開発ができる
- Java/Kotlinが使える
- GPIOの制御が比較的簡単にできる
- 画面をAndroidアプリのように設計できる
僕はKotlinが好きなので、開発にKotlinを使えるというのが個人的に嬉しいです。
#Android Thingsのはじめかた
##Raspberry Pi側の準備
###プロダクトの追加
Android Things Consoleへ移動
ADD A PRODUCTをクリックし、プロダクトを追加します。
- Product name
プロダクト名 - SOM type
今回はRaspberry Pi 3 を選択 - Product description
プロダクトの説明(省略可)
###microSDカードに書き込むイメージをビルド
Modelsからモデルをクリック(この画面では2ju8p7)
CREATE A BUILD CONFIGURATIONをクリックしビルドの設定をします。
- ビルド名を入力
- Android Thingsのバージョンを選択
今回はその他は初期設定で大丈夫です。
###ビルドしたイメージのダウンロード
- ActionsからDevelopmentを選択しダウンロード
- ダウンロードされたzipファイルを解凍し、imgファイルをmicroSDカードへ書き込み
imgファイルを焼いたmicroSDをRaspberry Pi 3に挿入し起動して、次のような画面になれば成功です。(直撮りすみません)
##Android Thingsアプリの実装
通常のAndroidアプリ開発と同様、Android Studioを使います。開発の流れもほぼ同じです。
###プロジェクトの準備
Target Android DevicesでAndroid Thingsにチェックを入れます。
Activityを選択します。今回はAndroid Things Empty Activityを選択しました。
###実際にLチカしてみる
プロジェクトの準備はできたのであとはコードを書いていくだけです。
Android ThingsでGPIOを制御する流れとしては
- AndroidManifestに
USE_PERIPHERAL_IO
のパーミッションを追加 -
PeripheralManager.getInstance()
でPeripheralManagerのインスタンスを取得 -
インスタンス.openGpio("GPIO名")
でGPIOを取得していろいろする
こんな感じです。
Android ThingsでのRaspberry Pi 3のGPIO一覧はこちらを確認してください。
それではLチカまでの流れを実際にコードを載せて解説します。
####パーミッションの設定
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yt8492.ledblink">
<!-- ↓追加 -->
<uses-permission android:name="com.google.android.things.permission.USE_PERIPHERAL_IO" />
<!-- ↑追加 -->
<application android:label="@string/app_name">
<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.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
####Lチカ部分のコード
class MainActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val manager = PeripheralManager.getInstance()
val led = manager.openGpio("BCM17")
led.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW)
led.setActiveType(Gpio.ACTIVE_HIGH)
repeat(10) {
led.value = true
Thread.sleep(1000)
led.value = false
Thread.sleep(1000)
}
}
}
led.setDirection
でモードを入力か出力か設定します。
DIRECTION_IN
で入力、DIRECTION_OUT_INITIALLY_LOW
で初期電圧がLOWの出力、DIRECTION_OUT_INITIALLY_HIGH
で初期電圧がHIGHの出力になります。
led.setActiveType
でHIGHとLOWどちらがtrueか設定します。
あとは1秒ごとにLEDの点滅を10回繰り返しています。
Raspberry Piをネットワークに接続している場合は、adb connect <ラズパイのIPアドレス>
で接続してAndroid Studioから実行できます。
お疲れ様でした。
#参考
https://developer.android.com/things/get-started/
https://developer.android.com/things/sdk/pio/gpio
https://developer.android.com/things/hardware/raspberrypi