Android ThingsのサンプルプログラムをRaspi3で動かしてみた
その前に、昨日の続きを少し。
昨日のはこれ。
Android Thingsのディベロッパーリリースが出たので起動してみた
http://d.hatena.ne.jp/kinneko/20161214/p1
WiFiはできるのかな? (ドングル選ぶ感じ)
カニのWiFiドングルがあったので、差し込んで見る。
Androidはデバイスのホットプラグには対応していないので、再起動する。
rpi3:/ $ reboot $ ./adb connect 192.168.51.86 connected to 192.168.51.86:5555 $ ./adb shell rpi3:/ $
rpi3:/ $ dmesg | grep wlan [ 31.638832] brcmfmac: brcmf_add_if: ERROR: netdev:wlan0 already exists
dmesgを眺めると、ドライバは入っているようだ。
[ 3.048153] usb 1-1.2: new high-speed USB device number 4 using dwc_otg [ 3.149682] usb 1-1.2: New USB device found, idVendor=0bda, idProduct=8178 [ 3.149693] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 3.149701] usb 1-1.2: Product: WN-G300UA [ 3.149708] usb 1-1.2: Manufacturer: I-O DATA DEVICE, INC. [ 3.149716] usb 1-1.2: SerialNumber: 00e04c000001 [ 3.727092] console [ttyAMA0] enabled
/dev/socket/wpa_wlan0というのができているけど、これは違いそう。
logcatしてみると、WiFiは動こうとはしているようだ。
しかし、デバイスに対応したファームイメージがないので動いてない感じかな。
01-01 00:01:10.633 410 456 D WifiNative-HAL: Failing getSupportedFeatureset because HAL isn't started
ブロコム専用?
インストールされているアプリ
アプリのリスト。
rpi3:/ $ pm list packages package:com.android.providers.telephony package:com.android.providers.calendar package:com.android.providers.media package:com.android.externalstorage package:com.android.htmlviewer package:com.android.providers.downloads package:com.google.android.iot.frameworkpackagestubs package:com.android.defcontainer package:com.android.pacprocessor package:com.google.wifisetup package:com.android.certinstaller package:android package:com.android.mtp package:com.android.backupconfirm package:com.android.provision package:com.android.statementservice package:com.android.providers.settings package:com.android.sharedstoragebackup package:com.android.webview package:com.android.inputdevices package:android.ext.shared package:com.android.onetimeinitializer package:com.android.keychain package:com.google.android.gms package:com.google.android.gsf package:com.google.android.tts package:android.ext.services package:com.google.android.things.permissions package:com.android.packageinstaller package:com.android.proxyhandler package:com.android.managedprovisioning package:com.android.settings package:com.android.iotlauncher package:com.android.shell package:com.android.wallpaperbackup package:com.android.providers.userdictionary package:com.android.location.fused package:com.android.bluetoothmidiservice package:com.android.bluetooth package:com.android.providers.contacts
rpi3:/ $ ls /system/app/ AndroidThings ExtShared KeyChain WifiSetup Bluetooth GoogleTTS PacProcessor webview BluetoothMidiService HTMLViewer UserDictionaryProvider CertInstaller IoTFrameworkPackageStubs WallpaperBackup rpi3:/ $ find /system/app | grep apk /system/app/AndroidThings/AndroidThings.apk /system/app/Bluetooth/Bluetooth.apk /system/app/BluetoothMidiService/BluetoothMidiService.apk /system/app/CertInstaller/CertInstaller.apk /system/app/ExtShared/ExtShared.apk /system/app/GoogleTTS/GoogleTTS.apk /system/app/HTMLViewer/HTMLViewer.apk /system/app/IoTFrameworkPackageStubs/IoTFrameworkPackageStubs.apk /system/app/KeyChain/KeyChain.apk /system/app/PacProcessor/PacProcessor.apk /system/app/UserDictionaryProvider/UserDictionaryProvider.apk /system/app/WallpaperBackup/WallpaperBackup.apk /system/app/WifiSetup/WifiSetup.apk /system/app/webview/webview.apk
weave関係は、/system/etc/weaved/traits/metrics.json なんてのしか見当たらない。
サンプルアプリをビルドしてみる
簡単に試せるアプリは用意されていないようなので、サンプルソースからビルドするしかない。
手元のAndroid Studioが古いので、2.2.3にアップデートしておく。
Download Android Studio and SDK Tools | Android Studio
https://developer.android.com/studio/index.html
Studioを起動して、Terminaから、以下を入力しRaspi3に接続する。
$ adb connect 192.168.51.86 connected to 192.168.51.86:5555 $ adb devices List of devices attached 192.168.51.86:5555 device
サンプルコートはLEDやボタンやサーボ制御などいくつか用意されている。
Samples | Android Things
https://developer.android.com/things/sdk/samples.html
- Simple PIO - Runs basic code that exercises the PIO APIs. Each sample is an Android module that can be run independently.
- Simple UI - Basic user interface that represents each GPIO on the board by an interactive switch widget on the display.
- Button - Using a button input driver from the peripheral driver library to listen for GPIO state changes and generate Android key events.
- UART Loopback - Emulates a loopback adapter for the selected UART port. Echoes all data back out the same port.
- Doorbell - Smart doorbell that captures a camera image, analyzes it, and sends it to a companion app using the Google Cloud Platform and Firebase.
- Weather Station - Integration of multiple peripheral sensors to analyze and display current weather information. Data can optionally push to the Google Cloud Platform for further analysis.
この中から、ボタンのサンプルを試す。
いわゆるLチカもの。
ソースはこちら。
https://github.com/androidthings/sample-button
プロジェクトをcloneしてくる。
$ git clone https://github.com/androidthings/sample-button.git Cloning into 'sample-button'... remote: Counting objects: 283, done. remote: Compressing objects: 100% (115/115), done. remote: Total 283 (delta 78), reused 283 (delta 78), pack-reused 0 Receiving objects: 100% (283/283), 1.89 MiB | 690 KiB/s, done. Resolving deltas: 100% (78/78), done.
File->New->Inport projectから、cloneしたプロジェクトを選んで読み込む。
いきなりエラー。
Failed to sync Gradle project 'sample-button'
Error:Failed to find Build Tools revision 24.0.3
Install Build Tools 24.0.3 and sync project
クリックして、ビルド・ツールを更新する。
Gradleもアップデートしたほうがいいよとダイアログが出るので、これもアップデート。
アプリ名は、com.example.androidthings.button。
BoardDefaultsとButtonActivityがあるだけ。
BoardDefaultsは、ボードの判定とgpioのリスト取得をしているだけ。
ButtonActivityは、スペースキーに連動して、LEDを点灯するだけ。
build.gradleを見ると、"minSdkVersion 24"になっている。
え? API24(Android7.0)指定なのか...
普通にAndroid端末側と通信するようなわけじゃなく、thingsデバイス上で動くアプリなのね。
一気にやる気なくなってきた...
現状のバグなどは、こちらにまとめられている。
Release Notes | Android Things
https://developer.android.com/things/preview/releases.html
- Apps using Google Play Services APIs must compile against SDK version 10.0.0 or newer.
これあたり注意?
Release Notes | Google APIs for Android | Google Developers
https://developers.google.com/android/guides/releases
November 2016 - v.10.0がいるということね。
Google Repositoryにチェックが入っていれば問題ないってことだけど、入っているので問題なし。
Studioから、ターゲットをRaspi3にしてビルド&インストールしてみる。
画面白くなって、アプリ動いたみたい。
だけどなんだ?
まだ外付けのデバイス作ってないので、何もおきない感じ。
スクリーンショットだけでも取るか。
$ adb shell rpi3:/ $ screenrecord --verbose /sdcard/DCIM/button.mp4 Main display is 1824x984 @60.00fps (orientation=0) Configuring recorder for 1824x984 video/avc at 4.00Mbps Content area is 1823x984 at offset x=0 y=0 ^CEncoder stopping; recorded 1 frames in 12 seconds Stopping encoder and muxer Executing: /system/bin/am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file:///sdcard/DCIM/button.mp4 Broadcasting: Intent { act=android.intent.action.MEDIA_SCANNER_SCAN_FILE dat=file:///sdcard/DCIM/button.mp4 } Broadcast completed: result=0 rpi3:/ $ exit $ adb pull /sdcard/DCIM/button.mp4
USBキーボードつなげて、スペース押すとLチカるはず。
あと、USBキーボードはホットプラグできないので、起動時から接続してある必要がある。
再起動すると、インストール済みのアプリが問答無用で立ち上がる。
複数アプリあるときは選択が必要なので、これもキーボードorマウス必要。
アプリケーションを切り替えるには、ESCキーを押す。
押すだけだと、ロゴ画面に戻るけど、もう一度押すとアプリセレクタが出る。
なんか反応鈍いのはわざとか?
キーボードだけだとカーソルで選択するにはtabキーを押す。
マウスがあったほうが便利だな。
ANRもあるようだ。
あれ?こっちか。
繋がれたひよこ on Twitter: "ハードウェア制御してるから、別のアプリでハード触ろうとすると、前のプロセスでドライバ握ってるから落ちるん…"
https://twitter.com/tomo_watanabe/status/809244204492689408
なんか究極の無駄遣いしている感じがする。
なんでLチカするだけに、こんだけのリソースを使わねばならないのか...
この先にあるものが見えない。
ブレットボードと必要な部品は、そろえてきたのだけど、配線する元気もなくなった。
Weave待ちだな。
DaydreamとCardboardがGoogleVRとしてまとめられているように、Google IoTとして、ThingsとWeaveがまとめられている。
Google Internet of Things | Google's Internet of Things Solutions | Google Developers
https://developers.google.com/iot/
きっと、今後連携もあるんだろう。
音声だけで応答できるデバイスを自前で作れるようになるなら、Androidのメリット出るし、きっと面白くなると思う。
そうなったら、weaveで音声応答できるリモコンデバイス作りたいとこですね。「ちょっと寒くね?」「室温を二度上げときました。まだ寒かったら言ってください」的なの。
何が面白いのかピンとこないので、識者の発言をまとめてみた(けどわかんないまま)
Atsushi Eno on Twitter: "androidthings-0.1-devpreview.jarのバインディングはclone()を
https://twitter.com/atsushieno/status/808790209215107073
ymst on Twitter: "デバイスドライバがJavaで書かれているの相当面白い(が、あまり伝わらないかw) https://t.co/tIydEIobm5"
https://twitter.com/yyaammaa/status/808825797385457664
ymst on Twitter: "OTAとかも面倒みてくれるならかなり良いのではと思ったが、どうなんだろう"
https://twitter.com/yyaammaa/status/808822121061195778
ymst on Twitter: "JavaでI2CやUARTのデータ送受信するのあついなw https://t.co/diqPZFbMDB"
https://twitter.com/yyaammaa/status/808824407598583810
Tatsuo Nagamatsu on Twitter: "Android Thingsのポイントは Androidの開発環境にて Java + 一部の Google services (Firebase)を利用して IoTデバイスを構築できるところかな。Weaveは含まれず #androidthings"
https://twitter.com/nagamatu/status/808949154244239361
明日鍵 on Twitter: "GPIOがAndroid Frameworkから使えるようになってる / GPIO | Android Things https://t.co/VmO1nRTs6F"
https://twitter.com/tomorrowkey/status/808816954802774018