TOPシステム開発> 【新・言語進化論】アレで使われている言語って何?> 第5回:Wiiリモコン+PCのアプリケーション開発 (2/3)




【新・言語進化論】アレで使われている言語って何?

【新・言語進化論】アレで使われている言語って何?

第5回:Wiiリモコン+PCのアプリケーション開発

著者:tokkyo

公開日:2007/11/30(金)

プロトコルの詳細と開発について

では、実際にWindowとWiiリモコンを接続するケースを例として、どのような通信が行われているかについて説明する。

前述の通り、BluetoothでWiiリモコンとPCを接続すると、WiiリモコンがHIDデバイスとして認識される。HIDというのは、キーボードやマウスなど、パソコンの入力装置として使用するデバイスのことである。キーボードやマウスであれば規格が統一されており、通常の場合はPCに接続するだけでOS標準のドライバを読み込んで使用できるようになる。

しかしWiiリモコンは、そもそもPCに接続して利用することを想定していないため、そのようなドライバが存在しない。つまりWiiリモコンとの通信部分は自前で実装する必要があるのだ。

まず、WiiリモコンとPCを接続するには、Bluetoothのアダプタが必要だ。最近のノートパソコンには最初から内蔵されているケースもあるが、もし内蔵されていない場合にはUSB接続タイプのアダプタを用意する必要がある。製品によってBluetoothの管理ソフトが異なるが、筆者の利用している「bluesoleil」では接続されると図2のように表示される。

図2:Bluetoothで接続したWiiリモコンはこうみえる
図2:Bluetoothで接続したWiiリモコンはこうみえる
(画像をクリックすると別ウィンドウに拡大図を表示します)

リスト1:Cで記述したボタン判定の例
if (buttonBytes2 & 0x01) {
  //1ボタンが押されている
} else {
  //1ボタンが押されていない
}

接続された後は、まずVENDOR_IDとPRODUCT_IDを指定して、WiiリモコンにHIDとしてアクセスする。さらにこの状態でWiiリモコンに特殊なデータを送信し、センサの値を取得できるようポーリング作業を行う。そして最後にWiiリモコンから送られてくる生のデータを加工し、使いたい機能に合わせて利用するといった流れとなる。

実際にWiiリモコンから送られてくるデータは「22 48 86 8a a5 ff ff ff ff ff ff ff ff ff ff ff ff ff」といった値になっている。このデータの先頭2バイト「22 48」がボタンの値、続く3バイト「86 8a a5」が加速度センサから得られた各軸の加速度の値である。

ボタンの状態はビットマスク演算を行うことにより得られ、1ボタンは「0x001」、2ボタンは「0x0002」、Bボタンは「0x0004」といった形になっている。例えば、1ボタンと2ボタンが押されている場合、先頭2バイトは「00 03」となる。

これを利用してCによるボタン判定方法を記述する場合、リスト1のようなものが考えられる。

HIDとしてアクセスする際、筆者はDelphi6で利用できる「TJvHidDeviceController」というコンポーネントを利用している。なお有志によって、VC++や.netの各言語からも利用できるようにするライブラリがWiiLi.orgの「Wiimote/Drivers(http://www.wiili.org/index.php/Wiimote_driver)」ページにて多数製作・公開されている。

これらのライブラリはWiiリモコンから得られた生データを、ボタンの情報に変換するといった機能を備えている。自作のソフトをWiiリモコンに対応させたい場合、このようなライブラリを利用すると便利であろう。 次のページ




tokkyo
著者プロフィール
tokkyo
1983年ノルウェー王国生まれ。2006年早稲田大学理工学部情報学科卒。現在は東アジアを拠点に、おなかすいた族の族長として人類総おなかすいた族計画を遂行中。お問い合わせはお近くのおなかすいた族まで。
http://onakasuita.org


INDEX
第5回:Wiiリモコン+PCのアプリケーション開発
  Wiiリモコンのすごさとプロトコル
プロトコルの詳細と開発について
  実際のアプリケーションの説明と今後の可能性