AndroidThingsをRaspberryPi3にセットアップする

　東北Tech道場/第3期郡山道場にあたり、AndroidThingsをRaspberryPiにセットアップした作業の記録です。

　初期設定の操作には、他のページなどで紹介されている一般的な手順の「有線LAN」と「USBキーボード」を使いません。そのかわり「USBシリアル変換ケーブル」が必要です。
　また、ディスプレイには「RaspberryPi 7インチ公式タッチディスプレイ」が使用できることを確認できました。

#準備

##使用した機材
- [RaspberryPi3](http://akizukidenshi.com/catalog/g/gM-11425/)
- [RaspberryPi 7インチ公式タッチディスプレイ](http://akizukidenshi.com/catalog/g/gM-09917/)
- 16G SDメモリカード
- [USBシリアル変換ケーブル](http://akizukidenshi.com/catalog/g/gM-05840/)
- ノートPC Windows10/64bit

##ダウンロードしたファイル
- [AndroidStudio 2.3.2 インストールファイル](https://developer.android.com/studio/index.html?hl=ja)
- [AndroidThings 0.4.0-devpreview ディスクイメージ](https://developer.android.com/things/hardware/raspberrypi.html)

##使用した補助ソフト
- [DD for Windows ディスクイメージ書き込み用]
(http://www.si-linux.co.jp/techinfo/index.php?DD%20for%20Windows)
- [TeraTerm コンソール接続用](https://ja.osdn.net/projects/ttssh2/releases/)

# WindowsPCにAndroid Studioをインストール
　ダウンロードした「android-studio-bundle-162.3934792-windows.exe」を実行するだけ。
　すべてデフォルト。詳しくは覚えていない。

# SDメモリにAndroidThingsのディスクイメージを書き込む
　[参考にした公式ガイド](https://developer.android.com/things/hardware/raspberrypi.html)では、「Etcher」や「Win32DiskImager」というものを使うように書いてありましたが、手元のPCに「[DD for Windows]
(http://www.si-linux.co.jp/techinfo/index.php?DD%20for%20Windows)」が入っていたのでこれを使用してSDメモリカードに書き込みました。

1. ダウンロードした「androidthings_rpi3_devpreview_4.zip」を解凍する。解凍後のイメージファイル「iot_rpi3.img」は4Gバイト以上あるので注意。
2. SDメモリカードをフォーマットする
3. DD for Windowsを右クリックメニューの「管理者として実行」で起動する
4. ドライブを選択。
5. 解凍後のイメージファイル「iot_rpi3.img」を選択。ファイルの種類は「All files」にしないとimgファイルが選べない。
6. 「書込」ボタンを押す。かなり時間がかかります。

#RaspberryPi3で起動
1. AndroidThingsのイメージを書き込んだSDメモリカードをRaspberryPi3にセットする。
2. 電源アダプタを接続する

　以上で、すんなりタッチパネルディスプレイに起動画面が表示されました・・・・
　しかーし！！なんと表示が上下逆さまです！！
　またLANにもつながっていないので何もできません。
　いくつか設定を施します。

#ディスプレイの上下逆さま現象に対処
　この作業は普通の外付けディスプレイをHDMIで接続している場合は不要です。そもそも用途によってはディスプレイ自体が不要です。
　[この記事](http://qiita.com/edisonthk/items/40c61b27e3d44e85ca10)を参考に作業。

1. いったんSDメモリカードをRaspberryPi3から抜き、WindowsPCに刺し直す。
2. SDメモリカードのルートにあるconfig.txtを開く
3. ファイルの最後に「`lcd_rotate=2`」の一行を追加して保存
4. RaspberryPiにセットして起動。今度はちゃんと正しく表示されました。

#USBシリアル変換ケーブルによるコンソール接続
　RaspberryPiはUSBデバイスとして動作しないためUSBケーブル接続ではアプリ開発できないそうです。そこで有線または無線LANに接続する必要があります。
　公式ガイドでは最初に有線LANに接続して無線LANの設定をするという2段階の作業になっていますが、手元にUSBシリアル変換ケーブルがあったので、有線LANもUSBキーボードも使わず、WindowsPCからシリアルコンソール経由で設定しました。

1. USBシリアルケーブルをRaspberryPi3のGPIOコネクタに接続![IMG_2535.JPG](https://qiita-image-store.s3.amazonaws.com/0/131002/d6a2961b-ffe3-7f33-61d4-68524c0cf1e9.jpeg)

2. PCでTeraTermを起動する。シリアルポートを開き、通信設定は「ボーレート：115200bps、データ：8bit、パリティ：none、ストップ：1bit」とする。
3. RaspberryPi3を起動するとTeraTermの画面にコンソールが表示される。

#無線LANの設定
　接続する無線LANのSSIDとパスコードを確認しておく。
　コンソールに下記のコマンドを入力する。

```
am startservice \
    -n com.google.wifisetup/.WifiSetupService \
    -a WifiSetupService.Connect \
    -e ssid <Network_SSID> \
    -e passphrase <Network_Passcode>
```
　\<Network_SSID\>と\<Network_Passcode\>の部分に、それぞれ無線LANのSSIDとパスコードを入力する。

　打ち間違いの修正や確認をしやすいように、私は上のコマンドをいったんテキストエディタに入力して編集し、これをコンソールにコピー＆ペーストしました。
　無線LANの接続が完了するとディスプレイにSSIDやIPアドレスが表示されます。
　下記のコマンドで、WiFiインターフェースにIPアドレス等が設定されていることや、pingが通ることなどネットワークの疎通を確認します。

`ifconfig`
`ping <ルータのアドレスなど>`


以上、無線LANに接続した状態でAndroidThingsを起動することができました。
![IMG_2533.JPG](https://qiita-image-store.s3.amazonaws.com/0/131002/461e9ce9-1fa3-1791-36fb-6a86204aa08a.jpeg)

　ちなみにちゃんとタッチパネルも動作します。
![IMG_2534.JPG](https://qiita-image-store.s3.amazonaws.com/0/131002/6bfcd028-2580-9a8e-e31e-f35e8fdb925d.jpeg)

#注意
　忘れがちですが、RaspberryPiの電源を切る時はいきなり電源アダプタを抜いてはいけません。SDメモリカードの内容が破損する恐れがあります。
　コンソールで下記のコマンドを入力してから、電源を切断します。
`reboot -p`

#おしまい
　Androidそのものの開発をしたことがないので、この後何をどうしたらいいのかわかりません。Tech道場でそこら辺を探りつつ、何に使おうか考えたいと思います。