0

縦分割してgrepできるwebsocket client、あるいはADKのデバッグ方法

AndroidでADK開発している時に便利なツールを作った → http://dev.shokai.org/js/websocket-client/

ADKをAndroidに挿すと、1つしかないUSBポートが埋まってしまって、logcatでデバッグ情報を見れなくなってしまう。しかし、俺の使っているNexusSはネットワーク越しのADB(Android Debug Bridge)はrootを取らないと使えない。

素晴らしいことにブラウザからlogcatを見る – 明日の鍵で、「LogcatSocketServer」というlogcatを全てwebsocketに流してくれるサーバーを作ってくれていた。これは凄く良い。

俺は普段はlogcatを複数開いて、 ^[DE]/ やアプリ名などでgrepしてエラーだけを表示したりしている。LogcatSocketServerの出力を分割してそれぞれgrepできるしくみがあれば、普段と同じ快適なAndroidアプリ開発環境が手に入る・・・ので作った。



webブラウザでwebsocketを受信して、縦分割で複数表示し、それぞれgrepできる。(クリックで拡大)
「+」ボタンを押す毎に分割パネルが増える。
この例では4分割して、左から順に「全て表示」「IOIOに関するものだけ表示」「DebugとErrorだけ表示」「バッテリー情報を表示」している。

Androidのデバッグだけではなく普通のwebsocketを使ったwebアプリのテストにも使えるはず。



■LogcatSocketServerのインストール
ブラウザからlogcatを見る – 明日の鍵にあるLogcatSocketServerをAndroidにインストールする。


バイナリがあるのでダウンロードして、AndroidにUSBケーブルつないでインストール。

wget http://tomorrowkey.googlecode.com/svn/trunk/LogcatOnBrowser/LogcatSocketServer/bin/LogcatSocketServer.apk
adb install -r LogcatSocketServer.apk

起動させ、start serverボタンを押すとAndroidがwebsocketサーバーになる。



■webブラウザでlogcatを見る
http://dev.shokai.org/js/websocket-client/を開く。Google ChromeかSafariでしか動かない。

LogcatSocketServerの画面に表示されているIPアドレスとポート番号を、左上に入力してに接続する。
「+」ボタンを押すとパネルが増える。あとはgrep欄に正規表現を書けば表示をフィルタできる。

^[VEW]/アプリ名 とかでgrepしたりすると便利ですぞ。


ローカルで実行するならgithubに置いたのでどうぞ https://github.com/shokai/websocket-client
git clone git@github.com:shokai/websocket-client.git
open websocket-client/index.html


こういうGUIアプリ、VisualStudioとかで作ってたけど無名関数をばしばし使えるJavaScriptの方が作りやすいですね。

0

IOIO for AndroidでLEDピコピコ光らせる

IOIOのデジタル出力を使った。
作ったものはテストなのでどうでもいいとして、IOIOLibをimportして自分で1からAndroidアプリプロジェクトにするところと、Eclipseの設定でハマった事について書いておく。


■できたもの
コード https://github.com/shokai/android-ioio-study/tree/master/LED_Blink


Androidの画面上のボタンが3つあって、IOIOのLED3つと対応している。
1つ前の記事で作ったUSB給電ケーブルとeneloopで外でも動かせる。下の4つ目のボタンは気にするな。
R0016179

動画



■EclipseのCompiler Compliance Level
Eclipse->環境設定->Java->CompilerにあるCompiler Compliance Levelを1.6にする。
これをしないと後述のioio.lib.impl.*impl.java等で90個ぐらいのエラーが発生してビルド出来ない。

でもCompiler Compliance Levelを変更すると、Level 1.5等で作ったAndroidプロジェクトが今度はエラー表示を大量にだしてしまう。なのでIOIO用に新しいworkspaceを作ったほうが良いでしょう。


■最新のIOIOLibを使わない
IOIO for Android Beginners Guide – SparkFun ElectronicsにあるIOIOLib.zipを解凍して、Eclipseでworkspaceにimportする。

こうなればよし。

http://codaset.com/ytai/ioioに最新版のgitリポジトリがあって、毎日すごい勢いで実装されている。
だが、最新のIOIOLibでビルドして動かしてみるとLogcat上でもAndroidとIOIOが接続できているっぽい様子が見えるが、デジタル出力ができなかった。firmwareも修正しているのでプロトコルがupdateされているのかもしれない。とりあえずBeginners GuideのIOIOLibを使いましょう



■新規プロジェクト作成
まっさらからAndroidプロジェクトを作り、IOIOLibを使う方法。

まず普通にAndroidプロジェクトを作る。どうも2.3.x以降じゃなくても動くらしい。http://codaset.com/ytai/ioioのサンプルもAndroid1.6用とかで作ってた。


プロジェクトを右クリックしてプロパティで、Android->Libraryに ../IOIOLib を追加する。workspaceのIOIOLibが読み込まれる。

Eclipse使ってない人は default.properties

android.library.reference.1=../IOIOLib
を追加する。


AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
を追加する。(どうもADKじゃなくて、debug bridgeを使って通信している様だ)

あとはAndroidアプリとしてごプログラムを書く


■IOIOのプログラムを書く
今回作ったMainActivity.java

まずioio.lib以下で必要な物をimportする。
MainActivityはandroid.app.Activityではなく、ioio.lib.util.AbstractIOIOActivityを継承する。
サンプルのHelloIOIOと同様に、クラス内クラスでAbstractIOIOActivity.IOIOThreadを作ってその中に関数setup()とloop()を作った。

そしてMainActivityからIOIOThreadを呼び出す。
@Override
protected AbstractIOIOActivity.IOIOThread createIOIOThread() {
return new IOIOThread();
}

あとはArduinoっぽく書ける

どうもActivityがアクティブの時しかIOIOは動かないらしい。Intentで画面遷移させるアプリから使う時どうなるか気になる。



■IOIOはADKじゃないっぽい
IOIOはADKで通信してるんだと思ってたら、debug bridgeを使って通信してるっぽい。http://codaset.com/ytai/ioio/wiki/IOIO-Over-OpenAccessory-BetaにADKとして動作させる方法が書いてある。



■logcatを見る
IOIOとAndroidを接続するのにUSBポートが塞がれるので、logcatができない。またNexusSはrootを取らないとWiFi経由でのadb logcatができないので、ブラウザからlogcatを見る – 明日の鍵にあるツールを使う。
wget http://tomorrowkey.googlecode.com/svn/trunk/LogcatOnBrowser/LogcatSocketServer/bin/LogcatSocketServer.apk
adb install -r LogcatSocketServer.apk
wget http://tomorrowkey.googlecode.com/svn/trunk/LogcatOnBrowser/Client/logcat.html
open logcat.html

grepしたいので、後でlogcat.htmlを改造しようと思う

Androidへのapkのインストールはhttpからできるので、https://gist.github.com/1090762でhttpdを動かしてUSBケーブルを抜き差ししなくてもapkをインストールしてlogcatを見る事はできる。多少面倒くさいのでこの辺どうにかしたい。

0

IOIO for Androidを動かした

sparkfunによるADK上に作られたphidgets的な環境であるIOIO for Androidのサンプルプログラムを動かした。
R0016173
ADKはAndroidとデバイスとの接続の仕様なのだが、Androidとマイコン両方のプログラムを書かなければならないので面倒くさい。
IOIOはADKのプロトコルの上で、Androidから出された命令に従ってIOを操作するマイコンボード。Javaのライブラリが提供されているので、Javaを書くだけでAndroidでハードウェアが制御できる。
IOIOのボード上にI2Cのポートがあるので、IOIOにさらに他のマイコンを接続する事もできる。


■買う
スイッチサイエンスで買った
スイッチサイエンス/商品詳細 IOIO for Android


■5V電源を作る
Read This Before Connectingを見ると、

・USBコネクタそばのVINに5〜15V入れるか、5Vピンに5Vちょうどを入れるかして電源を与える
・Androidから給電はできない(ADKの仕様)
・裏の黒丸がついてるピンだけ、5Vを入力できる。他のピンは3.3Vまで。それ以上やると死ぬ
と書いてある。


外に持って行ける電源が欲しかったので、USBケーブルを剥いて赤(VCC)と黒(GND)の線にピンヘッダを付けて5V電源を作った。
パソコンかエネループに接続すれば5VがIOIOに供給できる。
5V USB



■サンプルプログラムをAndroidにインストール
IOIO for Android Beginners Guide – SparkFun Electronicsにサンプルがある。
0番ピンに接続されている基板上のLEDを光らせるプログラム。


ビルドされたapkが入っているのでインストールする

wget https://www.sparkfun.com/tutorial/ioio/HelloIOIO.zip
unzip HelloIOIO.zip
cd HelloIOIO
adb install -r bin/HelloIOIO.apk



■Androidと接続する
USBケーブルでAndroidとIOIOを接続する。
IOIOのUSBコネクタ近くの可変抵抗をドライバーか何かで回して、Androidの画面の上のバーに「USBデバッグが接続されました」と表示されるように調節する。


■サンプルを動かす
Hello IOIOを起動して、ボタンを押すとLEDが光る。もう一度押すと消える。
R0016172