4
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Organization

Raspberry Pi 3でAndroid Things入門

はじめに

この記事は 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へ移動
スクリーンショット 2018-12-22 18.08.59.png
ADD A PRODUCTをクリックし、プロダクトを追加します。
スクリーンショット 2018-12-22 18.25.58.png

  • Product name プロダクト名
  • SOM type 今回はRaspberry Pi 3 を選択
  • Product description プロダクトの説明(省略可)

microSDカードに書き込むイメージをビルド

Modelsからモデルをクリック(この画面では2ju8p7)
スクリーンショット 2018-12-22 18.34.25.png

CREATE A BUILD CONFIGURATIONをクリックしビルドの設定をします。
スクリーンショット 2018-12-22 18.48.41.png

  • ビルド名を入力
  • Android Thingsのバージョンを選択

今回はその他は初期設定で大丈夫です。

スクリーンショット 2018-12-22 19.13.01.png

ビルドしたイメージのダウンロード

  • ActionsからDevelopmentを選択しダウンロード
  • ダウンロードされたzipファイルを解凍し、imgファイルをmicroSDカードへ書き込み

スクリーンショット 2018-12-22 21.25.58.png

imgファイルを焼いたmicroSDをRaspberry Pi 3に挿入し起動して、次のような画面になれば成功です。(直撮りすみません)

DSC_0626.JPG

Android Thingsアプリの実装

通常のAndroidアプリ開発と同様、Android Studioを使います。開発の流れもほぼ同じです。

プロジェクトの準備

プロジェクトを作成し、
スクリーンショット 2018-12-22 21.48.41.png

Target Android DevicesでAndroid Thingsにチェックを入れます。
スクリーンショット 2018-12-22 22.10.06.png

Activityを選択します。今回はAndroid Things Empty Activityを選択しました。
スクリーンショット 2018-12-22 22.13.35.png

Activityの設定をして準備完了です。
スクリーンショット 2018-12-22 22.16.08.png

実際にLチカしてみる

プロジェクトの準備はできたのであとはコードを書いていくだけです。
Android ThingsでGPIOを制御する流れとしては

  • AndroidManifestにUSE_PERIPHERAL_IOのパーミッションを追加
  • PeripheralManager.getInstance() でPeripheralManagerのインスタンスを取得
  • インスタンス.openGpio("GPIO名") でGPIOを取得していろいろする

こんな感じです。
Android ThingsでのRaspberry Pi 3のGPIO一覧はこちらを確認してください。

それではLチカまでの流れを実際にコードを載せて解説します。

パーミッションの設定

AndroidManifest.xml
<?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チカ部分のコード

MainActivity.kt
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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
4
Help us understand the problem. What are the problem?