2008年 2月 05日 火曜日 |
JavaとWiiリモコンをBluetoothでつなげてみよう English Translation: (Yahoo!) / (Google)
この間のJJUG 第 4 回 クロスコミュニティ Web アプリケーションサーバ Vol. 2の際にデモとしてご紹介させていただいた、Wiiリモコンを使ってブラウザの画面をCometで動かす。というデモですが、そのときのソースを公開しようと思っているのですが、うまく行かないケースが多いのでもう少し安定して動くように調整してから公開したいと思います。あ、でも完璧に調整するのは難しいので調整できなかったら今週中には1月25日バージョンをそのまま公開させていただきます。 さて、このデモのポイントはいくつかあって、技術的には
Wiiリモコンはご存知の方も多いかもしれませんが、Bluetoothのデバイスです。なので、パソコン側にBluetoothが受信できる機能がついていれば、Wiiリモコンの信号を受信することができます。ちなみにJavaはJSR 82: Java APIs for Bluetoothという仕様があり、Bluetoothを使うための標準APIが決まっています。つまりJSR 82の実装を使えば、Wiiリモコンと会話ができてしまう訳です。
Wiiリモコンと会話、といってもWiiリモコンの操作自体が標準化されている訳ではないのでWiiリモコンから送られてくるパケットを解析して、どういった信号なのかを認識したり、Wiiリモコンにとって意味のあるパケットを送信するといったプロトコルのサポートが無ければ扱うのは難しい訳ですが、既にこの辺りは十分に解析が進んでいてWeb上を探せばかなりの技術的なドキュメントが見つかりますし、しかも幸運なことにJava用のライブラリさえ存在します。 さて今回はライブラリとして以下の2つを使いました。
WiiremoteJはJSR 82を使ってWiiリモコンを探すところから各種プロトコル変換までやってくれるので大変らくちんです。 wiiremotej.WiiRemote wiiremote = wiiremotej.WiiRemoteJ.findRemote();この一行でWiiリモコンを1台探して、そのリモコンと会話をしてくれるオブジェクトwiiremoteが得られます。ただ、難しいところは電波の具合とか、Bluetoothの具合によって突然コネクションが切断されるということです。WiiRemoteクラスのインスタンスにはリスナが設定でき、切断されたことを検出するイベントもあるのですが、経験的に1/3ぐらいの確率でリスナを設定する前にコネクションが切断されており、そもそもリスナの設定に失敗するとか、WiiRemoteJ#findRemote()もたまにnullを返すなどという問題があります。 1月25日のデモのときにはこの辺りのエラー対処をきちんと作り込むほど十分な時間がなかったので、デモの起動確率はおおよそ1/3のままやりました。以上、長々と書きましたがエラー対処の難しさをのぞけばWiiRemoteJやJSR82を使うことでかなり簡単にWiiリモコンを操作できます(バイブレータをon/offしたり、Wiiリモコン側のスピーカーから音を鳴らしたり、赤外線カメラを使ったり)。ご興味のある方はぜひ。 うちの本棚, その2 English Translation: (Yahoo!) / (Google) すこし片付きましたので本棚紹介その2。
うちにある洋書は10〜20冊程度をのぞきブックオフにて100円ぐらいで投げ売りされていたものです。その手の本に限って読みません。買わなきゃいいのに・・・。それ以外の洋書は出張に行ったときに買ってきたり、アマゾンで買ったものです。ちなみにこの中で一番お気に入りの本は左端の赤い「安全の手引き」という本です。大学の時にもらった本ですが、実験中の災害に対する対処法が細かく載っています。情報系の学科だったので実際にこの中で関連しそうな内容はVDT作業に対する注意書きくらいでした。 |
Today's Page Hits: 96 |