2013/03/10

[n7]Bluetoothのペアリング

Bluetooth機器は、ペアリングというものをしないと使えない。
そこまではわかるのだが、いつも何となくペアリングを行い、何となく失敗したり成功したりしている。
これは、理屈がわかっていないからそうなるのだ。

わからないものは、調べるしかない。

なお、うちにあるBluetooth機器は3つ。

  • デスクトップPC (Windows7 64bit) + USBドングル
  • ノートPC (Windows8 32bit) + 内蔵
  • Nexus7 (Android 4.2.2) + 内蔵

PC側のBluetoothはMicrosoftが提供しているドライバを使っている。
BUFFALOのBluetoothドングルで、東芝のドライバがついていたのだが、Windows7をインストールするときには何もしていない。

image


Microsoftの説明
http://windows.microsoft.com/ja-jp/windows7/add-a-bluetooth-enabled-device-to-your-computer

片方を「私を見つけて!」の状態にして、もう片方が「私が見つけてあげよう」という状態にしてやればいいようだ。

 

これは、周囲にBluetoothデバイスがなくて、Nexus7も見つけられないようにしている状態。

image

 

ここで、デスクトップPCを「私を見つけて!」にする。
SHIRANAMI、というのがデスクトップPCだ(うちのPC名は、焼酎銘柄)。

image

なお、使用可能なデバイスが更新されるタイミングは、AndroidのBluetoothをOFFからONにしたときや、右上にある「デバイスの検索」を押したときのようだ。
では、ノートPCも「私を見つけて!」にしてみよう。

image

どっちかといえば、Windows側の設定をやる方がわかりづらそうだ。

image

この「発見」はデフォルトでチェックされていない。知らないうちに知らない人に見つけられたらいかん、というわけだ。
じゃあ、PCを2台ともチェックを外して、Nexus7でデバイスの検索をするとどうなるかというと、しばらく探しに行くものの、一覧から消えはしなかった。
一度Bluetooth自体をOFFにして、またONにすると一覧から消えた。
そういうものらしい。


では、Nexus7をPCに見つけてもらいたい場合はどうするかというと、「他のBluetoothには非表示」というところをタッチする。
そうすると、2分のカウントダウンが始まり、その間は検索できるようになっている。

その間に、PC側で「デバイスの追加」を選ぶ。
image


image

Nexus7を選択すると、次に進むようになる。

image

 

次に進むと、画面が出てきた。

image

と同時に、Nexus7側にも画面が!

image

 

どど、どっちを先に処理したらいいんだ??

Nexus7を「ペア設定」を先にやったが、それだけではAndroid側にはまだSHIRANAMIが追加されず、PC側を次に進めると「ペアリングされたデバイス」としてSHIRANAMIが出てきた。

Android側
image

 

PC側
image

 

PC側の「デバイスとプリンター」
image

 

なお、PC側の設定を先に次に進めても、Android側の設定も進めない限りは追加されないようだった。
つまり「どっちを先に処理してもよい」ということだ。


デバイスの削除は、PCだと右クリックして「デバイスの削除」でよい。

image

PCだけ削除してもAndroid側には残っている。
こっちは、ペアリングしたデバイス名の右側にあるアイコン(たぶん、スライドさせるつまみが3つ並んだ絵なのだろう)をタッチする。

image

こんな画面が出てくるので「ペアを解除」をタッチすると、「ペアリングされたデバイス」から「使用可能なデバイス」に格下げ(?)となる。

この状態で、Androidの「SHIRANAMI」をタッチすると、ペアリングを使用とし始める。

image

クリックすると、また「ペアリングコードの比較」ダイアログが出てくるので、あとは好きにすればよい。
この場合は「私を見つけて!」としなくても、よいようだ。
一度通路が開いたから、直接やりとりできるのだろう。

それが嫌だったら、AndroidのBluetoothを一端OFFにすればよい。


では、PC側を「私を見つけて!」にすると、どうなるだろうか。

Microsoftドライバの場合は、発見してもらうための時間制限はないようだ。
東芝のはあったような気がするが・・・忘れた。

image

そうしておいてからAndroidで「デバイスの検索」をやると、「使用可能なデバイス」としてPC名が出てくる。
そのPC名をタッチするとペアリングしようとするのだが、一度ペアリングしたことがあるデバイスと、そうでないデバイスとで、ちょっと動きが違うみたいだ。

一度ペアリングしたデバイスだと、「xxxxというパスキーが相手にも表示されてますか?」みたいな問い合わせと、PC側にもパスキーの設定要求が出てくる。
それ以降は、PCからデバイス検索した場合と同じだ。

 

はじめての場合、パスキーを入力する画面がAndroid側に表示された。

image

入力してOKとすると、KIRISHIMA側にトーストが出てきた。
Windows8だからトースト表示だったが、Windows7とかならタスクトレイ表示なのだろう。

image

タッチすると、Windowsストアアプリのデバイス設定画面が開いた。
画面が大きいので、スクリーンショットは無しだ。

Windows7の場合は、一度ペアリングしていると「私を見つけて!」としていなくてもペアリングを再開できたのだが、Windows8の場合にはだめなようだ。
そして、Androidでペアキーを入力させる画面も毎回表示されるようだ。
まあ、それはそれでいいと思う。


さて、ここまでわかったところで、ようやく本番だ。

やり方はわかったが、やっぱり面倒なので、NFCタグを作ってしまいたい。
Androidとスピーカーがペアリングする、という商品があるくらいだから、なんかできるんだろう。

 

まずは、NFC ForumのBluetooth Handoverに関する資料を読む。
NegotiatedとStaticの2種類がある。
今回の用途なら、Static Handoverでいいんじゃなかろうか。

そうなると、やることはWi-FiのStatic Handoverで作ったのとあまり変わらない中身になる。
OOB (Out-of Band) Dataの中身が違うくらいだ。

BluetoothのOOB Dataは、BluetoothのMAC値と、EIRという値(Extended Inquiry Response)がBluetooth SIGによって決められているデータ組だけである。

  • Local Name
  • Simple Pairing Hash C
  • Simple Paring Randomizer R
  • Service Class UUID
  • Class of Device

Static Handoverでは、青文字にした3タイプだけ使うみたいである。

以前SDK for NFC Starter Kitで作ったWi-Fi用データを書き込むソフトを改造して、Bluetooth用のデータを書き込むようにした。
Androidでやってしまえるようになりたいが、まあそれは今週の課題だ。
PCを「私を見つけて!」状態にしてから書き込んだNDEFのタグをAndroidにかざすと・・・ペアリングするかどうかの画面が出てきた。

image

やった!と思ったのもここまで。
あとは、やっぱりペアキーを入力する画面が出てきた。。。
(ちなみに、Windows7でやると、何も聞かれなかった。やっぱりOSの違い?)


今日はここまでだ。

AndroidではHandoverManager.javaあたりでOOBをさばいているようだけど、パスキーがどういう扱いなのかまだわかっていないので、調べんといかんのだろうな。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。