以下で、利用するための手順とその機能を解説します。

必要なモノ

WiiリモコンはWii本体との情報のやり取りにBluetoothという汎用の無線通信規格を利用しています。そのため、BluetoothアダプタとドライバさえあればPC上でも認識させることが可能です。ただしWoHを利用する場合では、BLUECOVEとの相性の問題なのか、今のところ「WIDCOMM」のドライバでしか動作確認がとれていません。

図2: Wiiリモコンの認識画面

編集部でMacBook Pro(15インチ、Mac OS X 10.5.3)を利用し確認したところ、問題なくWiiリモコンを認識できた

WoHの起動

ダウンロードしてきたWiimote-over-HTTP-0.6-executable.zip(Web アプリケーションサーバ同梱版)の展開後にできるlibディレクトリの下に、同様にダウンロードしてきたbluecove-2.0.2.jarを配置し、あとは startup.batを実行するだけです。8080番ポートでJettyベースのWebアプリケーションサーバが起動します。

図3: WoH起動画面

起動の確認後、「http://127.0.0.1:8080/WiimoteOverHTTP/」にアクセスするとWoHのコントロールパネルが表示されます。

図4: WoH コントロールパネル

WoHとWiiリモコンの接続

WoHのコントロールパネルで「[findWiimote] Wiiリモコン探索・接続」を実行するか、「http://127.0.0.1:8080/WiimoteOverHTTP/execute?method=findWiimote」にアクセスすることで、周辺にあるWiiリモコンの探索が開始されます。続けてWiiリモコンの[1]ボタンと[2]ボタンを同時に押すことで接続を確立します。Wiiリモコンが正しく認識されると、認識された順番により図5のようなパターンでLEDが点灯します(最大7台まで接続可能)。

図5: WiiリモコンのLED点灯パターン

Wiiリモコンの情報取得

接続が確認できたら、後は用意されている様々なメソッドを指定することで、Wiiリモコンの操作や情報の取得が行えます。例えば、1番目のWiiリモコンの傾きやボタンの押下状況を取得したい場合は、コントロールパネルで「wiimote」を「1」、「method」を「[getStatus] Wiiリモコン操作情報取得」として実行するか、「http://127.0.0.1:8080/WiimoteOverHTTP/execute?method=getStatus&wiimote=1」にアクセスします。

指定可能なパラメータとメソッドは以下の通りです。詳しくはWoHのWikiに掲載してあるAPIを参照してください。

パラメータ一覧

パラメータ 説明
method メソッドを指定(メソッド一覧参照)
wiimote Wiiリモコンの番号を指定
button Wiiリモコンのボタンを指定
time 実行時間をミリ秒で指定
light LEDの点灯パターンを指定
responseType レスポンスの形式を指定
callback JSONP形式のコールバック関数名を指定

メソッド一覧

メソッド 説明
findWiimote Wiiリモコン探索・接続
isConnected Wiiリモコン接続状況取得
setVibrate バイブレーション操作
isPressed ボタン押下状況取得
getStatus Wiiリモコン操作情報取得
getInfo Wiiリモコン情報取得
setLED LED点灯・消灯操作
releaseWiimote Wiiリモコン切断

以下は、メソッドを実行した際のレスポンスの例です。

リスト1: XMLの例

<?xml version="1.0" encoding="UTF-8" ?>
<response>
  <method>getStatus</method>
  <status>200</status>
  <data>
    <wiimote index="1">
      <xPos>-0.446601</xPos>
      <yPos>0.028301</yPos>
      <zPos>0.900990</zPos>
      <pitch>0.028305</pitch>
      <roll>-0.462963</roll>
      <a>0</a>
      <b>0</b>
      <one>0</one>
      <two>0</two>
      <minus>0</minus>
      <plus>0</plus>
      <home>0</home>
      <up>0</up>
      <down>0</down>
      <left>0</left>
      <right>0</right>
      <nunchuk>
          <xPos>0.0</xPos>
          <yPos>0.0</yPos>
          <zPos>0.0</zPos>
          <pitch>0.0</pitch>
          <roll>0.0</roll>
          <c>0</c>
          <z>0</z>
          <xVec>0.0</xVec>
          <yVec>0.0</yVec>
      </nunchuk>
    </wiimote>
  </data>
</response>

リスト2: JSONPの例

callback(
{"response":{
  "method":"getStatus",
  "status":"200",
  "data":{
    "wiimote":[
      {
        "@index":"1",
        "xPos":"-0.446601",
        "yPos":"0.028301",
        "zPos":"0.900990",
        "pitch":"0.028305",
        "roll":"-0.462963",
        "a":"0",
        "b":"0",
        "one":"0",
        "two":"0",
        "minus":"0",
        "plus":"0",
        "home":"0",
        "up":"0",
        "down":"0",
        "left":"0",
        "right":"0"
        "nunchuk":{
          "xPos":"0.0",
          "yPos":"0.0",
          "zPos":"0.0",
          "pitch":"0.0",
          "roll":"0.0",
          "c":"0",
          "z":"0",
          "xVec":"0.0",
          "yVec":"0.0"
        }
      }
    ]
  }
}}
);