Phidgets: 2005年12月アーカイブ
ちょこっと作ってみた。
XMLソケットで自室に設置したPhidgetsの温度センサーを読みにいっている。
久々すぎて、Phidgets云々よりもBINDの設定にとまどった。
詳細はまた今度。
Phidget本家とは別に、いつもRFIDのアンテナの記事などためになる情報を公開してくれる塚田さんも、phidgetsをTCP/IP越しに使うようにできるサーバーを作っていた。
前々回のエントリーでいじってみたPhidgetRFIDのサンプルをいじって
RFIDのあるなし、ある場合はIDを表示というAction Scriptを書いてみた。
ソース
/*
PhidgetRFIDをPhidgetFLASHAPIを通して使うサンプル
@author hatayan
http://www.hatayan.org
2005/12/06
*/
var rfid:PhidgetRFID;
var idcheck:String = "";
var count = 0;
rfid = new PhidgetRFID ();
rfid.onAttach = function (phid:Phidget) {
trace ("Attach Event: " + phid.getDeviceType ());
//デバイスタイプの表示
rfid.setOutputState (3, true);
//RFIDの読み取りを許可する
rfid.setOutputState (2, false);
//内蔵LEDを消す
};
rfid.onDetach = function (phid:Phidget) {
trace ("Detach Event: " + phid.getDeviceType ());
};
rfid.onError = function (desc:String, code:Number) {
trace ("Error Event: " + desc);
};
rfid.onTag = function (tag:String) {
if (idcheck != tag)
{
//もし読んだタグと記憶しているタグが違っていたら
//trace ("タグ発見このタグは: " + tag+"です");
rfid.setOutputState (2, true);
//内蔵LEDを光らす
exist_txt.text = "タグあり";
//タグありの表示をする。
idcheck = tag;
//タグを記憶する。
tag_txt.text = tag;
//タグIDを表示する。
}
else
{
//trace ("同じタグを読んでいます。");
if (count < 2)
{
count++;
//countが0より大きい場合はタグがあるとする。
}
}
};
rfid.openRemoteIP ("localhost", 5001, -1, "hoge");
onEnterFrame = function () {
if (count > 0)
{
count--;
//onEnterFrameが実行されるたびにカウントを減らす。
}
else
{
//もしカウントが0より小さかったら
rfid.setOutputState (2, false);
//内蔵LEDを消す
exist_txt.text = "タグなし";
//タグなしと表示
idcheck = "";
//記憶したIDをクリア
tag_txt.text = "";
//タグIDのテキスト表示をクリア
}
};
Phidget Flash Library(ASファイルがたくさん入ってるやつ)とおなじディレクトリでコンパイルしないとエラーが出るので注意。
母の見舞いから帰ってきて一息ついたので昼間やったことの更新つづき。
いちいちコマンドプロンプトを立ち上げてPhidgetWebService.exeを起動させるのがだるかったのでバッチファイルを書いた。
わざわざWEBに載せることではないのだけど自分で忘れるので以下覚え書き。
バッチファイルの中身
rem PhidgetWebService.exeを起動するバッチファイル
rem パスワードはhoge
PhidgetWebService.exe hoge -v
このバッチファイルをPhidgetWebService.exeと同じディレクトリ(僕の場合は"C:\Program Files\Phidgets\")においてバッチファイルのショートカットをディスクトップに作れば起動が楽ちんになる。
前回のエントリーで書いたリファレンスを参考にライブラリ、ドライバのインストールを行う
僕はWINDOWS XPでインストールしているので、他のOSの人はそれぞれのマニュアルを参考にしてください。
1.Phidgets Inc. -- Downloads betaにある Phidget Flash Library Version: 1.0.0 と Phidget.msi Version: 2.0.8をダウンロードする。
Description: Installs libraries on your Windows 2000 or XP computer. This includes the COM Library, C API Library, .NET Library, and the PhidgetWebService.
とPhidget.msiのところにあるので、前回試したときにはC#とJAVAのドライバが違ったがすでに統合されてわざわざ言語を変えるたびに再インストールしなくてもよくなったみたいだ。
2.Phidget.msiをダブルクリックしてインストールする。
僕はdefaultの"C:\Program Files\Phidgets\"にインストールした。
インストールがおわると"C:\Program Files\Phidgets\"以下に
PHIDGET.dll PhidgetsNET.dll PhidgetWebService.exeの三つのファイルが出来る。このうちPhidgetWebService.exeがflash API を使うためには必要なプログラム。
3.サーバーの実行
FLASH API manualに
PhidgetWebService requires you, at minimum, to specify a password that will be used to authenticate any clients; such as your .NET application
とあるのでパスワードを引数に入れないといけない。
実行の例(全部 PhidgetWebService.exeと同じディレクトリでコマンドプロンプトを実行していると仮定してください。)
例えばパスワードが"hoge"の場合:
PhidgetWebService.exe hoge
と入力する。
また、末尾に -vと引数をつけるとデバッグモードになる。
例えば:
PhidgetWebService.exe hoge -v
とつければよい。
デフォルトではサーバーのPortは5001 serialnumberは0となっている。
任意に設定したい場合は
PhidgetWebcervice.exe "パスワード" "serialnumber" "Port"
と入力すればいいので
例えばパスワードがhoge serialnumberが1000 ポートが5002の場合:
PhidgetWebcervice.exe hoge 1000 5002
と入力すればよい。
※PhidgetWebService.exeを実行するとNorton Antivirus のインターネットワーム防止が騒いだので、僕の場合は以下のように、インターネットワーム防止でPhidgetWebService.exeを許可する設定をした。
4.FLASHで実際に動くかテスト
ダウンロードしてほったらかしていたPhidgetsFlash.zipを任意の場所に解凍する。
すると大量のASファイルが入ったディレクトリが展開されるのでその中のtest.flaを開く。
デフォルトではサーボモーターのスクリプトが実行されるようになっているので自分が持っているphidgetsプロダクトのところのコメントアウトをはずし、サーボモーターのスクリプトをコメントアウトする。
僕の場合はPhidgets RFIDでテストしたいのでvar rfid:PhidgetRFID;~のところのコメントアウトをはずした。
ここで自分のPhidgetWebcerviceの実行環境にスクリプトを合わせる。
僕の場合はサーバーを"PhidgetWebservice hoge 1000 5001 -v"と起動したので
ローカルのswfファイルでPhidgetWebcerviceに接続するには、
rfid.openRemoteIP("localhost",5001,1000,"hoge");
とすればいいはずだがなぜか、
rfid.openRemoteIP("localhost",5001,-1,"hoge");
としなければつながらなかった。バグだろうか?
ともあれこれでちゃんと動くことが確認できたので今日はこれでおしまい。
最後のserialnumberで手こずったけど後は楽だった。
長らく放置していたPhidgets関連ですが、HCI at Stanford University: d.toolsとかにも使われてるしphidgetsあいかわらず盛り上がっているみたいですね。このエントリーにコメントが来たのを切っ掛けに久しぶりにサイトをみたら、FLASHAPIが追加されていた。
原理的にはWEBサーバーをローカルにたててそれ経由でFlashからPhidgtesにアクセスしている感じ。
なんかこれどっかでみたことあるやり方だがプロダクトの名前を忘れた。
奥出研のだれかがすでにいじりまくっていると思うが、ドキュメントがないので洗濯機が回っている間に少しいじってみることにする。
リファレンス:
・How to Make a Flash Movie Interact with a Phidget-PDF
・Flash API manual-PDF