2011年07月14日

AndroidでUSB-IOする(前編)ADKとMicrobridge/PIC

Android端末で外部機器連携をやってみたい、という話は過去なんども記事にしてましたが、基本的には外部機器にはArduinoなり、PICなり、mBedなどマイコンが必要で、マイコン側のファームも書き換えしなくちゃいけないので面倒って話もありそうです。

昔、モルフィー企画さんの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してます。





Android NDKネイティブプログラミング―Native Development Kit
出村 成和
秀和システム
売り上げランキング: 725



Arduino Uno
Arduino Uno
posted with amazlet at 11.08.02
スイッチサイエンス
売り上げランキング: 10101

posted by いしいっち at 07:36| Comment(1) | TrackBack(0) | Android開発関連 | このブログの読者になる | 更新情報をチェックする

2010年06月20日

P-WiFi Monitorアップデート

バージョン0.03Rを公開しました。

いろいろと機能やデザイン変更などを対応したいと思っていますが、それは基本的な部分を修正してからと思ってなかなか進んでません。

今回の修正版で特にそのまま問題なければ、上記のような可能拡充等に取り組んでみたいです。

変更点
・常駐サービス開始後、勝手に終了してしまう事に対する改善。
・非常駐でステータスを取得した際の表示項目を増やした。(3Gのオペレータ名、WiFiの端末接続数)

よろしくお願いいたします。
posted by いしいっち at 03:13| Comment(0) | TrackBack(0) | Android開発関連 | このブログの読者になる | 更新情報をチェックする

2010年05月09日

Android PocketWiFi電波レベルをチェックするアプリ

先日、予告していたアプリですが、とりあえず使えそうなので公開します。まだ叩き台みたいなもんかもしれませんが。


Android Marketからのダウンロードは以下からどうぞ
http://market.android.com/search?q=jp.yishii.pwifi_mon


Android Marketの「アプリケーション」→「通信」のカテゴリ内です!!無料です。

●イーモバイルのPocket Wifiと、Android端末とをWiFi接続している状態で、Pocket Wifi側の3Gのレベルを表示します。

起動すると、2つボタンが出ます。サービスとして常駐・常駐解除するボタンと、
常駐せず、ある瞬間の電波レベルを表示するボタンです。

device1.png

「P-WiFi監視サービス」とは、Pocket WiFiの電波レベルを、周期的に確認し、都度画面上部に赤色電波レベルアイコンとして表示するものです。


「現在状態をワンショット取得」とは、上述の監視サービスを使用せず、指定されたある瞬間の電波レベルを表示するものです。

device2.png

この2つのモードは排他的に使用できます。
ほんとは、押せないボタンをグレーにしたかったのですが(Windowsのボタンとか出来ますよね)、Buttonの押下のみ無効化してます。

●現在のバージョンでは、Pocket Wifi側のIPアドレスが初期値の192.168.1.1固定です。これは手抜きです^^;その内必要そうなら対応しようと思っています。


サービスが常駐すると、画面左側上のステータスバーに、4本バーが表示されます。

device3.png

本アプリの表示は、Pocket Wifi側のEL画面表示と異なるタイミングで動作しています。したがって、
それぞれの表示が、同一時刻において、一致しない場合があります。
またバー本数が4本になっていますから、本数も一致しないですね...。
わかりにくければ今後修正したほうが良いかもしれないですね。

本アプリとPocket Wifi本体表示との関係
PWifi-Monitor←本体表示
0本← 圏外
1本← 0本
2本← 1本
3本← 2本
4本← 3本
無計画に作成したデザインデータの問題です。^^;
その内修正させていただきます。

●対応Android OSバージョン
1.6以降

●動作確認機種
Nexus one
(Xperia、HT-03A、X06HTあたりで動くと良いのですけどね)

Pocket Wifi D25HW
(SoftbankのPocket Wifiや、Huawei E5830などでも動くかな?)

●最後に
デザイン力がないので、アイコンがかなりいけてません。今のPCに全然ツールがインストールされていないから、余計にひどくなっているというのもあります。
ごめんなさい。
例)


電波レベル

icon_level4.png


Pocket WiFiが応答しない場合(実は実機では潰れてまともに読めない)

icon_no_pwifi.png


WiFi自体がOFFの場合

icon_wifi_off.png

右端の、「Google Androidアプリケーション開発入門」とっても参考になりました。


posted by いしいっち at 19:29| Comment(1) | TrackBack(0) | Android開発関連 | このブログの読者になる | 更新情報をチェックする