月別アーカイブ: 2008年1月

Bluetooth が便利なこと

・キーボードがつながる
・マウスがつながる
・携帯電話をモデムにしてネット接続できる
・オーディオアダプタがつながって音楽再生
・PDA の同期ができる(ActiveSync)
・WiiリモコンやバランスWiiボードがつながる
・PDA や携帯電話のファイル転送ができる

その他試していないけど

・ヘッドセットがつながる
・GPSユニットがつながる

などなど。

早い話、USBでできることのワイヤレス版、と思えばほぼイメージに近いです。

ワイヤレスマウスやキーボードも、それぞれ専用のレシーバーを使う
必要がなくなります。PCに内蔵されていればそれで済むし、
アダプタをつける場合も1個でできます。

さらに A2DP では Bluetooth 自体が PC 上の音源として認識されます。
USB 音源のようなもので、対応受信機さえあれば PC に音源が無くても
ヘッドホンやスピーカーが鳴らせます。

欠点は接続時にペアリングが必要なこと。
 ケーブル抜き差しだけで済むUSBよりも最初に若干手間がかかります。

それと通信速度が遅いこと。
 ストレージ系など大容量のデータ転送は苦手です。

また対応機器の選択の幅が狭く、それぞれ結構な値段がすること。

そして bluetooth stack によって対応プロファイルの違いがあって、
結果として使えたり使えなかったり、相性の問題が生じてしまうことでしょうか。
操作方法もソフトによって異なっています。

これまで EM・ONE のダイヤルアップ接続と Keyboard くらいにしか
使っていませんでしたが、bluetooth のプログラム作ったり調べたり
していたらすっかりはまってました。

 ノートPC(Windows)
 マウス
 外部キーボード
 ネット回線 (EM・ONE)
 ヘッドホン
 ゲームコントローラ (Wiiリモコン等)

が全部無線でつながってしまいました。PCから伸びているケーブルは無し!
(それぞれバッテリーが持つ間だけ)

USB の Bluetooth アダプタは3種類試しましたが、基本的には Windows XP
でも Vista でも標準のドライバで使うことができました。x64 でも大丈夫です。

ただし Windows 標準の bluetooth stack では A2DP 等のオーディオ系
プロファイルが使えず、必要な場合はアダプタ付属の bluetooth stack や
他のソフトに頼ることになります。

このときアダプタ付属の bluetooth stack は、Vista や x64 未対応の
場合もあるため注意が必要です。

また API の違いもあるので、すべてに対応する場合プログラム側の工夫も
必要でした。プログラムによっては bluetooth stack の種類に依存する
可能性があります。
Toshiba bluetooth stack と Bluesoleil 対応

結局 Bluesoleil 5 を購入しました。Windows の stack と異なり
A2DP は使えるようになったものの、代わりに bluetooth による
WM 端末の ActiveSync 接続が使えなくなりました。悩ましいところです。

まとめ
・bluetooth stack によってプロファイルが異なる
・bluetooth stack によって API が異なる
・bluetooth stack によって OS に対応していないことがある

Bluetooth 動作確認など

Windows XP SP2 (x86 32bit) と Windows XP SP2 (x64) で動作確認しました。
どちらも Windows 標準の bluetooth stack で、アダプタ付属のドライバを
使用せずに認識できました。

Windows bluetooth stack の場合、通信時に何らかの理由で timeout すると
WriteFile() に切り替わってしまう問題があったので修正しました。

ここ数日一番悩んだ問題が、使っていると突然 バランスWiiボードの 通信が
切れてしまうというもの。電池交換しても変わらず、プログラム側の負荷が
高いせいかと、かなり悩んだのですが・・。

ふと切れた直後にボードの電源ランプが点滅していることを発見。
比較的長時間点滅が続くので、どうやら sync 待ち状態っぽい。

さらに左下、電池ボックス上の特定の一点に力をかけると点滅が始ることを
突き止めた。
sync ボタンが押されてしまっているらしい。

壊してしまったのかと分解してみると、sync ボタンは基板から電池ボックス
まで長い棒が伸びている。これ、垂直に押さなくても軽く倒しただけでも
スイッチが入るらしい。

どうも圧力で電池ボックス周辺がゆがんで、sync ボタンのスイッチが倒れて
押されているようだ。

電池ボックスの sync ボタンの穴を削って、干渉しないように広げたら
再発しなくなりました。

他のボードでは全く発生しないので、個体差か単に酷使しすぎてへたった
だけだと思います。

Toshiba bluetooth stack と Bluesoleil 対応

Toshiba bluetooth stack と Bluesoleil に対応できました。
より多くの Bluetooth アダプタ(ドライバ) で動作するようになりました。

WbalanceGE v1.20 (GoogleEarth を歩く)
WBHealthMeter v1.10 (バランスWiiボード 体重計)

あらかじめ接続してから上記プログラムを起動する必要あり。
ペアリングと接続はそれぞれ、個別の接続管理画面で行います。

●Toshiba bluetooth stack
・Bluetooth 設定で[新しい接続]を押す
  必要に応じて バランスWiiボード の Sync ボタンを押す。

・一度登録されたら、以後は Nintendo RVL_WBC-01 のアイコンを選んで
 メニューから[接続]するだけ。このときも Sync ボタンを押す必要あり。

●Bluesoleil
・バランスWiiボードの Sync を押して、検索画面でアイコンが表示されるのを待つ。
 バランスWiiボードのランプ点滅が止まったら Sync を押しておく。

・名前が確定したら、メニューから接続(Connect)を選ぶ
 やはり接続時も Sync ボタンを押しておく必要あり。

●Windows 標準
・これまでどおり、プログラム上から「バランスWiiボード登録」で可能。
 コントロールパネルから登録しても OK

コマンドの送信が原因でした。他の bluetooth stack では
HidD_SetOutputReport() が使えないようです。Toshiba 以外はエラーも
返らないので工夫が要ります。

まとめると下記のようになります。

WindowsVista bluetooth stack
 ○ HidD_SetOutputReport
 × WriteFile  (送信できない、エラーにならない)

Toshiba bluetooth stack v5.10.15
 × HidD_SetOutputReport (送信できない、エラーになる)
 ○ WriteFile

Bluesoleil v2.6.0.1 070402 (BT-MicroEDR2 付属)
 HID の認識でエラーのため列挙できない

Bluesoleil v5.0.5 64bit
 × HidD_SetOutputReport (送信できない、エラーにならない)
 ○ WriteFile

判定手順
 1. HidD_SetOutputReport() を使い、0x15 等の return のあるコマンドを送る
 2. もし 1. がエラーになったら WriteFile を選択する
 3. 結果が来たらそのまま、一定期間経っても結果がこなければ WriteFile を選択する

今回実験した組み合わせ
 Vista x86 + Princeton PTM-UBT3S + 付属 Toshiba stack
 Vista x86 + Princeton PTM-UBT3S + Windows stack
 Vista x64 + Planex BT-Mini2EDR + Windows stack
 Vista x64 + Planex BT-Mini2EDR + Bluesoleil 5
 Vista x64 + Planex BT-MicroEDR2 + Bluesoleil 2/5

関連エントリ
バランスWiiボードを使ったまじめな体重計 WBHealthMeter 1.00
バランスWiiボード で地球を歩く WbalanceGE v1.10

バランスWiiボードを使ったまじめな体重計 WBHealthMeter 1.00

体重測定のみに特化した、まじめな体重計を作ってみました。

WBHealthMeter v1.00 (バランスWiiボード 体重計)

アナログ針つき。

WBHealthMeter

●そのまま使う

 測定した体重値を常時リアルタイム表示します。
 アナログ針はデジタル表示よりもレスポンスが良いです。

 BMI と体重の対応表をリアルタイムに更新するので、
 特に身長を設定しなくても、自分の BMI 値がわかります。

●バランスボードのボタンを押してから乗る

 値の変動が収まったときの数値を今回の体重値とみなしてログに記録します。
 一般のデジタル体重計に近い動作です。

画面には過去8件分だけ表示しますが、ファイル上は特に制限無くすべての
結果書き込まれています。

追記 (2020/09/30): GitHub: WBHealthMeter

バランスWiiボード で地球を歩く WbalanceGE v1.10

方向転換時の判定にミスがあったので更新しました。

WbalanceGE v1.10 (GoogleEarth を歩く)

その他バグ修正と、方向転換時のパラメータも調整しています。

○補足など

上空からははっきり見えても、自分視点だと地面はかなりぼけぼけです。
メニューの「Camera切替」かスペースキーで上空視点になるので、
迷ったら切り替えてみてください。

比較的狭くて小さ目の建物が多いところ、地面のペイントが多いところがお勧め。

移動速度は歩幅の設定で調整可能です。カーソルキーでも変更できます。

残念ながら GoogleEarth には建物への当たり判定がありません。
地面の高低差には追従します。