Android ThingsのサンプルDoorBellアプリを試してみた

[AndroidThingsの公式チュートリアルとして紹介されている](https://developer.android.com/things/training/doorbell/index.html)「遠隔でも誰が来たか分かるドアベル」なノリのアプリDoorBellを実際に試してみた。

#準備と必要な部品
+ インストールは[こちら](http://qiita.com/ryoyakawai/items/687e10d8d0f72afd9175)から！
+ 1Kオームの抵抗（[茶・黒・オレンジ・XX]の順）
+ タクトスイッチ
+ ジャンパ3本（メス-オス）
+ ブレッドボード

公式チュートリアルでは専用ボードで紹介されていますが、直配線でも問題ないです。
<img width="400" alt="Screen Shot 2017-05-26 at 2.33.29 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/61221/69eb10de-d7f2-5f40-c73b-891d4e405c12.png">

緑色のコードは`BCM21`に接続しています。（ピン配列は[こちら](https://developer.android.com/things/hardware/raspberrypi-io.html)）

#下準備
##コードのダウンロード
以下を実行して適当な場所にコードをCloneします。

```shell-session
$ git clone https://github.com/androidthings/doorbell.git;
```

##GCP(Google Cloud Platform)の準備
プロジェクトを作り、左ペインのメニューから[API Manager]-[Credentials]を選択します。
<img width="300" alt="Screen Shot 2017-05-26 at 2.38.14 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/61221/2c1dd258-6926-8ecf-9d4b-260465edf69a.png">

次の画面で[Create Credentials]-[API Key]を選択してキーを作成します。
<img width="400" alt="Screen Shot 2017-05-26 at 2.40.31 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/61221/8bf8ef51-67ca-f9b5-eee8-cbfe1b6c286f.png">

表示されるキーを、先程Cloneしたコード以下のファイルの42行目へコピペします。
`app/src/main/java/com/example/androidthings/doorbell/CloudVisionUtils.java`
<img width="500" alt="Screen Shot 2017-05-26 at 2.51.07 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/61221/8a917879-66d8-a9c3-a081-ba7b522def24.png">

##Firebaseの準備
新規にプロジェクトを作りましょう。
[ココ](http://qiita.com/ryoyakawai/items/95e3b70906799fa33ae2#firebase%E3%81%AE%E8%A8%AD%E5%AE%9A)の以下の3つを順に実行します。

+  [[プロジェクトの作成]](http://qiita.com/ryoyakawai/items/95e3b70906799fa33ae2#%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90)
+  [[Databaseの設定]-[RULESの設定]](http://qiita.com/ryoyakawai/items/95e3b70906799fa33ae2#rules%E3%81%AE%E8%A8%AD%E5%AE%9A)
+  [google-service.jsonをダウンロードしてコピー](http://qiita.com/ryoyakawai/items/95e3b70906799fa33ae2#google-servicejson%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%81%97%E3%81%A6%E3%82%B3%E3%83%94%E3%83%BC)

ここでは`google-service.json`のコピーは以下のディレクトリ直下、2箇所にコピーすることに注意してください。（AndroidThingsのアプリ向けと、アップロードを確認する為のスマホ用のアプリ向け）

+  app/
+ companionApp/ 

以上で準備は完了です。

#コンパイル
Android Thingsのハードへの接続は[この辺り](http://qiita.com/ryoyakawai/items/687e10d8d0f72afd9175#%E6%9C%89%E7%B7%9A%E3%81%A7raspberry-pi%E3%81%AB%E6%8E%A5%E7%B6%9A)を参照してください。

##追記（5月27日）
以下のようなエラーで最初はコンパイルが通りませんでした。
<img width="400" alt="Screen Shot 2017-05-27 at 4.46.18 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/61221/15d4320f-53dd-9ed3-e2b9-7bc622c58d08.png">

[ここ](https://stackoverflow.com/questions/32068387/dependency-apache-http-client-in-android-with-google-apis)の最後のコメントの通り追記することでコンパイルができるようになりました。

```java
configurations.all() {
    exclude group: "org.apache.httpcomponents", module: "httpclient"
}

dependencies {
    ...
}
````


##実機へアプリをインストール
下のキャプチャの赤丸の部分をクリックするとコンパイルするアプリを選べます。まずはAndroid Things向けのアプリをコンパイルするので`app`を選択して、隣の再生ボタンを押してコンパイルし、実機にインストールします。
<img width="500" alt="Screen Shot 2017-05-26 at 3.01.33 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/61221/6b7ece94-6c2e-f4ae-0c8c-4595acaf70ab.png">

##スマホへViewerアプリのインストール
スマホからアップロードされた画像を見る為のアプリです。Andoirdのエミュレータでも、実機でも動作しますので、適宜選んでください。
上の図の`CompanionApp`を選択するとスマホ向けのアプリのコンパイルをしてインストールできるので、そちらを選んで再生ボタンを押します。

#動かしてみる
一度、Android Things(Raspberry Pi 3)を再起動しましょう。（カメラ、インターネットアクセス等へのPermissionを得られるのが現在は起動時のみなので）

ボタンを押すと写真が撮影されます。時間差を置いて、スマホ側へ表示がされ、更に待っていると、画像に何が写っているかがGoogleさんのCloud Vision APIから出てきて、それが表示される仕組みです。
<img width="300" src="https://qiita-image-store.s3.amazonaws.com/0/61221/83040c58-43f5-f48c-b82c-cd9545cd30a4.png">




実際の機器たちはこんな感じ
<img width="400" src="https://qiita-image-store.s3.amazonaws.com/0/61221/0fa11029-a086-200b-57d3-db8f91a4d588.jpeg">