Wiiコントローラで遊ぼう
まずは実験
まずは試しにどんな風に動作するか見てみましょう.
ここからWiiYourself!の最新版をダウンロードしてきましょう. ちなみに現在(2010/07/12)の最新版は, Ver.1.15です.
ダウンロードしたファイルを適当なディレクトリに解凍し, Wiiコントローラの1ボタンと2ボタンを同時押しします[1]. この間にPCのBluetooth接続[2]を行います. 方法は使用するPCのBluetooth接続用のソフト[3]で様々ですから, ここでは特に解説しません.
さて, WiiYourself!のDemoフォルダのDemo.exeを実行しましょう. ピーっというビープ音が鳴って, Connectedと表示されれば成功です. 振ったり, 色んなボタンを押してみましょう. ただしHOMEボタンを押すと, 終了してしまうので気をつけてください.
WiiYourself!はC++言語用のお手軽なライブラリです. このライブラリを使ってプログラムを作っていきましょう. コンパイラはVisual Studio 2008のVisual C++ 2008 Express Editionを使うものとして話を進めます.
準備しよう
このライブラリをコンパイルするためには, コンパイラの他にMicrosoftのドライバ開発用キットであるDriver Development Kit(DDK)が必要です. 現在(2010/07/12)入手が可能なのはWindows Driver Kit(WDK)[4]に変わっています. これをダウンロードしてインストールしましょう.
インストール後にVisual Studioに設定することとして次のことがあります.
  • [メニュー]→[ツール]→[オプション]をクリックし, [プロジェクトおよびソリューション]→[VC++ディレクトリ]のライブラリファイルに"WDKをインストールしたディレクトリ"/lib/wxp/i386を追加
追加したディレクトリ名を見れば想像がつくと思いますが, この方法はWindowsXPでやる方法です. Windows7用のwin7というフォルダが有るので, Windows7の人はそちらを使ってください. また, win7フォルダにはCPUに応じてフォルダが存在する[5]のでそちらも別個で指定してください.
これで準備完了です.
使ってみよう
Visual C++ 2008で新しくプロジェクトを作りましょう. そしてプロジェクトを作った後, 次のように設定を行いましょう.
  • [メニュー]→[プロジェクト]→[〜のプロパティ]をクリックし, プロパティを以下に変更.
    • [構成プロパティ]→[C/C++]の"追加のインクルードディレクトリ"に
      "$(VCInstallDir)include";"WDKをインストールしたディレクトリ"/inc/api;
      "WDKをインストールしたディレクトリ"/inc/ddkと追加する
これでようやくコンパイルするときにWDKを使えるようになりました. 適当なプログラムにwiimote.hをインクルードすれば使えるようになるはずですが, 私が実行したときは何故か上手く行かず, 試しにクッション用のファイルを分けると上手くいくということがおきました.
そのソースコードは, wii_controler.zipmywiimote.cppmywiimote.hですから, ファイルを直接見てください.
このプログラムは, 一旦このソースがcWiiRemoteから情報を受け取り, WIISTATE型のグローバル変数であるWiistateに渡すということを行っています. 面倒なようですが, 私の環境では上手く行っているようなので使い続けています.
この2つのソースコードと共にWiiYourself!のフォルダの中に有る4つのソースコードwiimote.cpp, wiimote.h, wiimote_common.h, wiimote_state.hをプロジェクトのディレクトリにコピーしてプログラムを作成しましょう. といっても, いろいろ面倒だと思うのでDXライブラリを使ったサンプルコードを載せます. DXライブラリの導入方法は, ここなどを参考にしてください.
サンプルコードは, wii_controler.ziptest.cppです.
このサンプルではボタンの状態取得, バッテリー残量チェック, LEDの設定, 振動の設定のみ行っています. 作成したコードは加速度センサーや赤外線センサーの状態取得にも対応しているので, そういったことを使ったプログラムの作成も面白いです. むしろWiiコントローラでは, そちらが重要なのでどうやってそういったものを組み込むかを考えてみてください.
ちなみに, このサンプルコードや使用したmywiimote.cppmywiimote.hは自由に使っていただいて結構です. こんなクッションを挟まなくても上手くいっただとか, グローバル変数を使いたくないだとか, こんな無駄なコードいらないなんて人はそこら辺に捨ててもらって構いません.
補足
  1. これをするとWiiコントローラが接続モードになり, 信号を出し続ける状態になります.この信号を使ってPCと接続するのです.
  2. ペアリングと言います.
  3. スタックと言います.余談ですが, 私は東芝製スタックを使っています.
  4. 私はバージョン7600.16385.1を使っています.
  5. 従来の32bitCPU用のi386, 64bitCPU用のia64とamd64(x64)というフォルダが有ります.ia64は従来のCPUと互換性を捨てたプロセッサだったため, 現在はintelも従来のx86と互換性の有るAMD64を採用し, Intel64(x86_64)としています.ですから, Core2DuoやCore2Quodなどもamd64と考えて良いでしょう