Takayuki Okazaki's Weblog
ブログ: 岡崎 - Okazaki's blog
20080205 2008年 2月 05日 火曜日
JavaとWiiリモコンをBluetoothでつなげてみよう
English Translation: (Yahoo!) / (Google)
R0024444
この間のJJUG 第 4 回 クロスコミュニティ Web アプリケーションサーバ Vol. 2の際にデモとしてご紹介させていただいた、Wiiリモコンを使ってブラウザの画面をCometで動かす。というデモですが、そのときのソースを公開しようと思っているのですが、うまく行かないケースが多いのでもう少し安定して動くように調整してから公開したいと思います。あ、でも完璧に調整するのは難しいので調整できなかったら今週中には1月25日バージョンをそのまま公開させていただきます。
さて、このデモのポイントはいくつかあって、技術的には
  • WiiリモコンとJavaアプリケーションをつなぐ
  • Java Web StartでJavaスタンドアロンアプリケーションと、アプリケーション・クライアント・コンテナ(ACC)を使ってEJBと通信する
  • Cometでブラウザに対して情報をプッシュする
といったところがあげられます。これらのうち後者2つはThe Aquariumを熱心に購読されている方はすでにご存知かもしれませんが、GlassFishコミュニティーから既にデモ等も提供されています。あと、前者のWiiリモコンとJavaをつなぐ方法もそれほどマイナーな話ではなく検索すればいくらでも関連記事が出てくるというところですが、一応制作時の苦労話を含めてご紹介してみます。
Wiiリモコンはご存知の方も多いかもしれませんが、Bluetoothのデバイスです。なので、パソコン側にBluetoothが受信できる機能がついていれば、Wiiリモコンの信号を受信することができます。ちなみにJavaはJSR 82: Java APIs for Bluetoothという仕様があり、Bluetoothを使うための標準APIが決まっています。つまりJSR 82の実装を使えば、Wiiリモコンと会話ができてしまう訳です。
jsr82
Wiiリモコンと会話、といってもWiiリモコンの操作自体が標準化されている訳ではないのでWiiリモコンから送られてくるパケットを解析して、どういった信号なのかを認識したり、Wiiリモコンにとって意味のあるパケットを送信するといったプロトコルのサポートが無ければ扱うのは難しい訳ですが、既にこの辺りは十分に解析が進んでいてWeb上を探せばかなりの技術的なドキュメントが見つかりますし、しかも幸運なことにJava用のライブラリさえ存在します。
さて今回はライブラリとして以下の2つを使いました。
  • JSR 82のオープンソース実装の一つ: bluecove
  • WiiプロトコルのJavaライブラリ: WiiremoteJ
他にも選択肢はあると思いますがまあ今回はこれで。ちなみに準備はこの2つぐらいがあればよく、bluecove-2.0.2.jarにはWindowsやMac OS X用のドライバも含まれているのでこの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リモコン側のスピーカーから音を鳴らしたり、赤外線カメラを使ったり)。ご興味のある方はぜひ。


投稿されたコメント:

★ お名前を空欄にするとIPアドレスが、お名前欄に記入されます。
コメント
コメントは無効になっています。
過去の記事
« 10月 2009
    
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
       
今日
Click me to subscribe このブログを購読(RSS)
検索

このブログ著者について
ソフトウエア・インフラストラクチャー・ソリューション本部のソリューション・アーキテクトでした(2008年8月退職)。 本業はSOAソリューションならびにSun Java CAPSによるソリューションのプリセールスをお手伝いするエンジニア、とJavaエバンジェリストグループに参加してセミナーに行ったり、趣味のプログラミング・ネタをこのブログで紹介したりしていました。現在は、ふらふらとwatermint.orgで活動中〜。
リンク
 
SunホットトピックPodcast - SunホットトピックPodcast
 


 

Today's Page Hits: 867