さてWCA-009(WT32)を使えばヌンチャクをBluetooth HDIマウス/キーボード化することは簡単にできます。今回製作したボードの構成は次のようになっています。
マイコンのソフトでは、I2Cでヌンチャクからのデータを読み取り、その内容に応じて適切な疑似マウス/キーボードのイベントをHIDのレポート形式で送信してやるだけです。マイコンからはUARTを使ってデータを送信してやれば、あとはWT32がBluetooth無線化してくれます。パソコン側では、Windows XP, Windows 7, MacOSいずれもBluetooth HIDのドライバはあらかじめ用意されていますので、追加でドライバをインストール必要もありません。
それでは実際にどのようなアプリを使うかですが、わたしがやってみたかったのはGoogle Earthです。PC向けゲームソフトとか持っていないので、他にジョイスティックがあれば便利そうなアプリを思いつかないだけのことなのですけど。老眼と乱視の影響かゲームのような動きの激しい画面を見続けていると、酔ってしまい頭痛が襲ってきます。時には気持ち悪くなって横になりたくなるくらいです。これが眼精疲労ってやつでしょうか? Google Earthでも20分くらい遊んでいると頭痛がしてくるので要注意です。
Google Earthにはフライトシュミレーターの機能もあり、マウスやジョイスティックで操作することができるようになっています。しかし、慣れないわたしはうまく操縦できません。ゆっくりと動かして景色みたりするのであれば、普通にGoogle Earthを使うだけの方が良さそうです。
今回はジョイスティックではなくマウス/キーボードを疑似することになりますので、ヌンチャクの操作に応じて、適切なマウスあるいはキーボード操作に対応するHIDのレポートを出力する処理が必要となります。HIDの規格ではキーボードに対応するModifierやUsage IDが規定されていますので、キーの押下を表現するには対応するUsage IDを含むレポートを送出することになります。実際のヌンチャクの操作とGoogle Earthの動作の対応付けと、それに伴いHIDで送信する内容は、次のようにすることにしました。
まず、動作モードとしてマウス・モードとナビ・モードの2つを設けます。マウス・モードでは1ボタンのマウスの動作を疑似し、HIDマウスのレポートを生成/送信します。
Cボタンを押すとモードが変わります。ナビ・モードではGoogle Earthの3Dナビゲーション制御に必要なキー操作を疑似するためのHIDキーボードのレポートを生成/送信します。
ナビ・モードではキーボードを疑似しているので、上下左右の方向キーに対応するキーコードを生成することで移動はできても、斜め方向に移動することができないのが使いづらいところです。斜め移動のためには、マウスモードに遷移してグラブ動作(Zボタンを押しながらスティック操作)が必要となります。
こうして用意した疑似マウス/キーボードのデータは、つぎのフォーマットでWT32に送信してやることでBluetoothで無線化されます。
最初の0x9fで以降のデータがレポート形式で示されるRawデータであることを示します。その次のバイトはデータ長を示しています。0xa1の次の1バイトがマウスとキーボードを識別するレポートIDになっているようです。キーボードでは最大6つのキー状態変化を送信することができます。シフトキーの状態は、Modifierバイトの該当ビットで通知します。
上の写真ではWCA-009の下側にLEDが3つありますが、これらは現在の動作状況を表すのに用いています。
調べてみると同じような機能を提供できる製品としてはZeemoteというものがあるようです。ざっと見たところではSPPを使ってAndroidスマホでゲームする人を意識した様子。HIDも使えるので疑似マウス、キーボードもできるようですがあらかじめ用意された動作モードにはGoogle Earth向きのモードは無いように思われます。ジョイスティックを疑似するモードではSPPを使っておりHIDではないので、「PC用」と言わずに「スマホ用」としているのでしょうか?
計画していた動作はできるようになりました。写真ではわかりにくいので、動画を用意するつもりです。
マイコンのソフトでは、I2Cでヌンチャクからのデータを読み取り、その内容に応じて適切な疑似マウス/キーボードのイベントをHIDのレポート形式で送信してやるだけです。マイコンからはUARTを使ってデータを送信してやれば、あとはWT32がBluetooth無線化してくれます。パソコン側では、Windows XP, Windows 7, MacOSいずれもBluetooth HIDのドライバはあらかじめ用意されていますので、追加でドライバをインストール必要もありません。
それでは実際にどのようなアプリを使うかですが、わたしがやってみたかったのはGoogle Earthです。PC向けゲームソフトとか持っていないので、他にジョイスティックがあれば便利そうなアプリを思いつかないだけのことなのですけど。老眼と乱視の影響かゲームのような動きの激しい画面を見続けていると、酔ってしまい頭痛が襲ってきます。時には気持ち悪くなって横になりたくなるくらいです。これが眼精疲労ってやつでしょうか? Google Earthでも20分くらい遊んでいると頭痛がしてくるので要注意です。
Google Earthにはフライトシュミレーターの機能もあり、マウスやジョイスティックで操作することができるようになっています。しかし、慣れないわたしはうまく操縦できません。ゆっくりと動かして景色みたりするのであれば、普通にGoogle Earthを使うだけの方が良さそうです。
今回はジョイスティックではなくマウス/キーボードを疑似することになりますので、ヌンチャクの操作に応じて、適切なマウスあるいはキーボード操作に対応するHIDのレポートを出力する処理が必要となります。HIDの規格ではキーボードに対応するModifierやUsage IDが規定されていますので、キーの押下を表現するには対応するUsage IDを含むレポートを送出することになります。実際のヌンチャクの操作とGoogle Earthの動作の対応付けと、それに伴いHIDで送信する内容は、次のようにすることにしました。
まず、動作モードとしてマウス・モードとナビ・モードの2つを設けます。マウス・モードでは1ボタンのマウスの動作を疑似し、HIDマウスのレポートを生成/送信します。
ヌンチャク操作 | マウス動作 | HID動作 |
---|---|---|
スティック上 | カーソル上へ移動 | Y-step(正) |
スティック下 | カーソル下へ移動 | Y-step(負) |
スティック左 | カーソル左へ移動 | X-step(負) |
スティック右 | カーソル右へ移動 | X-step(正) | Zボタン | 左ボタン | 左ボタン |
Cボタン | ナビ・モードに遷移 | N/A |
Cボタンを押すとモードが変わります。ナビ・モードではGoogle Earthの3Dナビゲーション制御に必要なキー操作を疑似するためのHIDキーボードのレポートを生成/送信します。
ヌンチャク操作 | Google Earth動作 | HID動作 |
---|---|---|
スティック上 | 上へ移動 | UpArrow (0x52) |
スティック下 | 下へ移動 | DownArrow (0x51) |
スティック左 | 左へ移動 | LeftArrow (0x50) |
スティック右 | 右へ移動 | RightArrow (0x4f) | Zボタン+スティック上 | 下に傾斜 | Left Shift+UpArrow (0x52) |
Zボタン+スティック下 | 上に傾斜 | Left Shift+DownArrow (0x51) |
Zボタン+スティック左 | 時計回りに回転 | Left Shift+LeftArrow (0x50) |
Zボタン+スティック右 | 反時計回りに回転 | Left Shift+RightArrow (0x4f) |
下へ傾ける | ズームイン | PageUp (0x4b) |
上へ傾ける | ズームアウト | PageDown (0x4e) |
Cボタン | マウスモードに遷移 | N/A |
ナビ・モードではキーボードを疑似しているので、上下左右の方向キーに対応するキーコードを生成することで移動はできても、斜め方向に移動することができないのが使いづらいところです。斜め移動のためには、マウスモードに遷移してグラブ動作(Zボタンを押しながらスティック操作)が必要となります。
こうして用意した疑似マウス/キーボードのデータは、つぎのフォーマットでWT32に送信してやることでBluetoothで無線化されます。
最初の0x9fで以降のデータがレポート形式で示されるRawデータであることを示します。その次のバイトはデータ長を示しています。0xa1の次の1バイトがマウスとキーボードを識別するレポートIDになっているようです。キーボードでは最大6つのキー状態変化を送信することができます。シフトキーの状態は、Modifierバイトの該当ビットで通知します。
上の写真ではWCA-009の下側にLEDが3つありますが、これらは現在の動作状況を表すのに用いています。
- 緑LED -- 未使用
- 赤色LED -- ナビ・モードで点灯
- 青色LED -- Bluetooth接続されると点灯
調べてみると同じような機能を提供できる製品としてはZeemoteというものがあるようです。ざっと見たところではSPPを使ってAndroidスマホでゲームする人を意識した様子。HIDも使えるので疑似マウス、キーボードもできるようですがあらかじめ用意された動作モードにはGoogle Earth向きのモードは無いように思われます。ジョイスティックを疑似するモードではSPPを使っておりHIDではないので、「PC用」と言わずに「スマホ用」としているのでしょうか?
iBUFFALO Bluetooth2.1対応スマートフォン用ゲームコントローラーブルー/ブラック「ZeemoteJS1」 BSGPJS1 | |
バッファロー | |
バッファロー |
計画していた動作はできるようになりました。写真ではわかりにくいので、動画を用意するつもりです。