Android Things に入門してみる(準備編)

Android ThingsはGoogleがAndroid OSをIoT(Internet of Things)用にカスタマイズしたOS、です。

一部機能を限定し、組み込み機器向けの制御インターフェイス用のライブラリ(Things support library他)を追加したとのこと。

今のところ、Preview版という位置付け。1〜2ヶ月ぐらいで更新されている模様。


某出版社の$10セールに敗れて本を買ってしまった結果です。お察し下さい。

また未読の電子書籍が貯まっていく……。

準備

OSのイメージファイルをmicroSDに書き込んで起動するという流れはRaspbianのインストールと同じです。作業環境としてmacOSを前提にしています。

用意するもの

  • microSD カード(8GB以上)
  • ラズパイ3 一式(本体とLANケーブル、マウス、キーボード、ディスプレイ)
  • Android Studio (付属のSDKおよびadbコマンド)

microSDはSDFormatter あたりでFAT32にフォーマットしておく。

インストール時点ではキーボードとマウスはほとんど意味をなさないので不要かも。

ダウンロード

公式サイトからダウンロード。この記事を書いている時点の最新版は Android Things のPreview バージョン4.1。

developer.android.com

各ハードウェアごとにインストールイメージが異なるので注意する。ラズパイの場合は一覧表の下の方にあるandroidthings_rpi3_devpreview_4_1.zipというリンクをクリックする。

Safariでダウンロードすると勝手に展開されるので圧縮ファイルの展開については省略。

デバイス名の確認

まずはmicroSDの物理デバイス名を特定する。Windows環境の場合はRaspbianと同じ要領で。以下の手順はmacOS環境向けです。

アダプタをつけてmac本体のSDカードスロットを使用する前提。

SDFormaterでフォーマットした場合、ファイルシステムはFAT32になっているいるはず。grepで絞り込む。

$ diskutil list | grep FAT -B4

実行結果の左端の、/dev/diskXという箇所のdiskX(Xは数字)という箇所がデバイス名(BSD名ともいう)。

数字は環境依存。0とか1は内蔵フラッシュストレージなので間違えないように。

物理デバイスの番号を間違えるとデータが吹き飛ぶので慎重に。私の環境ではdisk3。


一旦、SDをアンマウント。

$ diskutil umountDisk /dev/disk3
Unmount of all volumes on disk3 was successful

別解として、「システムレポート…」(画面左上のリンゴのマーク→「このMacについて」)から表示される「システム情報」から確認することもできる。

f:id:atuyosi:20170727035122j:plain:w320

microSDへの書き込み

microSDにイメージを書き込む。いつも通りデバイス名にrをつけてrdiskとする。

$ sudo dd bs=1m if=iot_rpi3.img of=/dev/rdisk3
4352+0 records in
4352+0 records out
4563402752 bytes transferred in 361.139898 secs (12636108 bytes/sec)

そのまま待つ。5分から10数分おとなしく待つ。

完了したらmicroSDを取り外してラズパイのmicroSDスロットへ。

初期設定

microSDをセットしたら、 キーボード、マウス、LANケーブル、HDMIケーブルをつないで電源ONするだけ。主にやることはWifiの設定ぐらい。

IPアドレスさえ特定できればHDMIはなくても問題ない。

電源を入れるとAndroid Thingsロゴとバージョン番号、IPアドレスがディスプレイに表示される。

準備(macOS側)

adbコマンドを使うためにパスを通す。

Android Studioをインストールし、初期設定を完了すると、各ユーザーのホームディレクトリのLIbrary配下にAndroid SDKの関連ファイルが保存されている。このうち、Library/Android/sdk/platform-toolsにパスを通せばいい。

Bash

.profileなり.bash_profileに以下を追加する。

export PATH=$USER/Library/Android/sdk/platform-tools:$PATH

fish shell

最近、fish shellを使っていたりするので。

.config/fish/config.fishに以下を追加する。

set -x PATH $HOME/Library/Android/sdk/platform-tools $PATH

Android Things環境への接続

電源を入れると画面上にネットワークへの接続状態とIPアドレスが表示されるのでこのアドレスを指定する。

$ adb start-server

HDMIでつないだディスプレイで確認したIPアドレスを指定して接続する。

$ adb connect <ip-address>

<ip-address>は環境に応じて修正。

実行例

$ adb connect 192.168.0.5
connected to 192.168.0.5:5555

環境によっては以下のようにmDNS名を指定して接続することもできる。

$ adb connect Android.local
connected to Android.local:5555

接続状態の確認

接続状態は以下で確認できる。

$ adb devices
List of devices attached
192.168.0.5:5555    device

詳細表示(-lオプション)

$ adb devices -l
List of devices attached
192.168.0.5:5555       device product:iot_rpi3 model:iot_rpi3 device:rpi3

wifi 設定

無線LAN経由の方が便利ですねってことで。

$ adb shell am startservice -n com.google.wifisetup/.WifiSetupService -a WifiSetupService.Connect \
 -e ssid <SSID> -e passphrase <pass phrase>
Starting service: Intent { act=WifiSetupService.Connect cmp=com.google.wifisetup/.WifiSetupService (has extras) }

<SSID><pass phrase>は環境に応じて修正。別にバックスラッシュで区切らずに1行で入力してもいい。

IPアドレスが変わるとディスプレイ側の表示が変わるはず。もしくはadb shell ip aなどのコマンドでwlan0にIPがセットされているかどうか確認する。

無線LANで接続に成功したら一度切り離す。

$ adb disconnect Android.local
disconnected Android.local

LANケーブルを抜いてからadb connectコマンドで再接続。再接続の際にデバイスが見つからないかもしれないが、IPアドレスを指定すれば繋がるはず。

disconnectしてから電源を切れば次回からは自動接続される。

スクリーンショット

現状、OpenGLに対応していないらしいので、ふつうのAndroid端末のようにはいかないみたい。

ただし、動画は撮れるそうなのでそれを使う。

$ adb shell screenrecord --verbose /sdcard/screenrecord.mp4  --time-limit 1

--verboseはなくてもいい。スクリーンショットを取り出す場合は、adb pullを使う。

ファイル名および保存先のパスはscreenrecordコマンドの引数に指定したもの。

$ adb pull /sdcard/screenrecord.mp4
/sdcard/screenrecord.mp4: 1 file pulled. 0.9 MB/s (19643 bytes in 0.020s)

mp4形式の動画なので適当に変換すればいいはず。

$ ffmpeg -ss 0 -i screenrecord.mp4 -f image2 test.jpg

-fはファイルフォーマットを指定するオプション。 image2を指定した場合、出力ファイルの拡張子で自動判別される。

f:id:atuyosi:20170727171613j:plain:w320
こんな感じ。


多分続く。

参考サイト