昔、モルフィー企画さんのUSB-IOが出た時にPCとUSBで接続してマイコンの手足をPC側から制御できるということで、かなり人気があったように思います。また当時、それまで汎用I/Oのように活用されていた?パラレルポートがなくなりかけたこと、さらにUSBマイコンがあまり一般市場に無かったことも、人気に拍車をかけたように思います。
これは、PCと接続するとまずはHID(Human Interface Device)として認識し、その後規定のデータ列を送信することで、任意の基板の端子のI/Oの出力状態を変更したり、基板の先に接続したセンサー等の状態を取得したりできるということでした。
当時は興味はあったものの、手出ししてなかったので読んだ記事ですけどね。これのおかげで、マイコン側のプログラムは書き換えずにPC等からUSB-IOと焦電センサーつないで人が来たことを検知したりなど、どっかで記事をみたりした記憶あります。
ADKの議論が神戸支部でなされた時に、そんなUSB-IOをADKで出来ないか?という話をしました。ADKでもMicrobridgeでも実現できそうです。
今、Andyドロイド君で規定したプロトコルをベースに寺園さんがAndyTank/AndyLibアプリを実装されているのですが、このプロトコルにコマンドの追加を行い、そこにIOの入出力設定と出力値、入力値の設定取得のI/Fを設ければ出来そうです。
ADKだけでなく、Microbridge/PICでも全く同じコマンド体系をインプリし、同じような枠組みで通信出来れば、Android端末のバージョンも限定的にはならないので非常に使いやすくなりますね。
さて、先日Microbridge/PICの実験でAndroid側のシェルを眺めてました。
/proc仮想ファイルシステムの内容にMicrobridgeからアクセスし、取得したLinux内部の情報で外部機器を動かせないかなというものだったのですが、その過程で見つけたのがamというコマンドです。シェルから、インテントが飛ばせるようなのです。
amでぐぐってみると、TechBoosterさんの記事にもありました。間違いなく欲しいコマンドです。
TechBooster : ターミナルからIntentを投げる
http://techbooster.jpn.org/andriod/environment/6031/
というわけでamというプロセスのlaunchをMicrobridge/PICで行い、所定のアプリをインテントから起動させて、その後そのアプリからtcpの通信をさせれば良いというように考えて、実験してみました。
ADKでは接続時、Android側が自動的にインテントを発行してくれるのですが、見かけ上同等のことが実現できたら良いなと思いまして。
ソフトでは、Microbridge/PICで以下のようにコネクションを張れば良いです。本家MicrobridgeでもAPIは少し異なりますが(本家はC++ですし)同様で出来るはず。
Connection* c;
c = ADB_addConnection("shell:am start -n jp.yishii.gpio_tester/.MainActivity",false);
while (1){
ADB_poll(c);
}
jp.yishii.gpio_testerのMainActivityがAndroid USB-IOのテストプログラム(作りかけ)です。
で、うまくいきました!
以下動画です。
IS01とPIC ADK MiniBoard + MicroBridge/PIC + USB-IOファーム作りかけの構成から、Android側のUSB-IOテストアプリ作りかけをlaunchしてます。
Panasonic USB対応モバイル電源パック リチウムイオン5400 ホワイト QE-PL201-W
posted with amazlet at 11.08.12
パナソニック (2011-06-24)
売り上げランキング: 186
売り上げランキング: 186
Android NDKネイティブプログラミング―Native Development Kit
posted with amazlet at 11.08.02
出村 成和
秀和システム
売り上げランキング: 725
秀和システム
売り上げランキング: 725