Bluetooth機器は、ペアリングというものをしないと使えない。
そこまではわかるのだが、いつも何となくペアリングを行い、何となく失敗したり成功したりしている。
これは、理屈がわかっていないからそうなるのだ。
わからないものは、調べるしかない。
なお、うちにあるBluetooth機器は3つ。
- デスクトップPC (Windows7 64bit) + USBドングル
- ノートPC (Windows8 32bit) + 内蔵
- Nexus7 (Android 4.2.2) + 内蔵
PC側のBluetoothはMicrosoftが提供しているドライバを使っている。
BUFFALOのBluetoothドングルで、東芝のドライバがついていたのだが、Windows7をインストールするときには何もしていない。
Microsoftの説明
http://windows.microsoft.com/ja-jp/windows7/add-a-bluetooth-enabled-device-to-your-computer
片方を「私を見つけて!」の状態にして、もう片方が「私が見つけてあげよう」という状態にしてやればいいようだ。
これは、周囲にBluetoothデバイスがなくて、Nexus7も見つけられないようにしている状態。
ここで、デスクトップPCを「私を見つけて!」にする。
SHIRANAMI、というのがデスクトップPCだ(うちのPC名は、焼酎銘柄)。
なお、使用可能なデバイスが更新されるタイミングは、AndroidのBluetoothをOFFからONにしたときや、右上にある「デバイスの検索」を押したときのようだ。
では、ノートPCも「私を見つけて!」にしてみよう。
どっちかといえば、Windows側の設定をやる方がわかりづらそうだ。
この「発見」はデフォルトでチェックされていない。知らないうちに知らない人に見つけられたらいかん、というわけだ。
じゃあ、PCを2台ともチェックを外して、Nexus7でデバイスの検索をするとどうなるかというと、しばらく探しに行くものの、一覧から消えはしなかった。
一度Bluetooth自体をOFFにして、またONにすると一覧から消えた。
そういうものらしい。
では、Nexus7をPCに見つけてもらいたい場合はどうするかというと、「他のBluetoothには非表示」というところをタッチする。
そうすると、2分のカウントダウンが始まり、その間は検索できるようになっている。
Nexus7を選択すると、次に進むようになる。
次に進むと、画面が出てきた。
と同時に、Nexus7側にも画面が!
どど、どっちを先に処理したらいいんだ??
Nexus7を「ペア設定」を先にやったが、それだけではAndroid側にはまだSHIRANAMIが追加されず、PC側を次に進めると「ペアリングされたデバイス」としてSHIRANAMIが出てきた。
なお、PC側の設定を先に次に進めても、Android側の設定も進めない限りは追加されないようだった。
つまり「どっちを先に処理してもよい」ということだ。
デバイスの削除は、PCだと右クリックして「デバイスの削除」でよい。
PCだけ削除してもAndroid側には残っている。
こっちは、ペアリングしたデバイス名の右側にあるアイコン(たぶん、スライドさせるつまみが3つ並んだ絵なのだろう)をタッチする。
こんな画面が出てくるので「ペアを解除」をタッチすると、「ペアリングされたデバイス」から「使用可能なデバイス」に格下げ(?)となる。
この状態で、Androidの「SHIRANAMI」をタッチすると、ペアリングを使用とし始める。
クリックすると、また「ペアリングコードの比較」ダイアログが出てくるので、あとは好きにすればよい。
この場合は「私を見つけて!」としなくても、よいようだ。
一度通路が開いたから、直接やりとりできるのだろう。
それが嫌だったら、AndroidのBluetoothを一端OFFにすればよい。
では、PC側を「私を見つけて!」にすると、どうなるだろうか。
Microsoftドライバの場合は、発見してもらうための時間制限はないようだ。
東芝のはあったような気がするが・・・忘れた。
そうしておいてからAndroidで「デバイスの検索」をやると、「使用可能なデバイス」としてPC名が出てくる。
そのPC名をタッチするとペアリングしようとするのだが、一度ペアリングしたことがあるデバイスと、そうでないデバイスとで、ちょっと動きが違うみたいだ。
一度ペアリングしたデバイスだと、「xxxxというパスキーが相手にも表示されてますか?」みたいな問い合わせと、PC側にもパスキーの設定要求が出てくる。
それ以降は、PCからデバイス検索した場合と同じだ。
はじめての場合、パスキーを入力する画面がAndroid側に表示された。
入力してOKとすると、KIRISHIMA側にトーストが出てきた。
Windows8だからトースト表示だったが、Windows7とかならタスクトレイ表示なのだろう。
タッチすると、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にかざすと・・・ペアリングするかどうかの画面が出てきた。
やった!と思ったのもここまで。
あとは、やっぱりペアキーを入力する画面が出てきた。。。
(ちなみに、Windows7でやると、何も聞かれなかった。やっぱりOSの違い?)
今日はここまでだ。
AndroidではHandoverManager.javaあたりでOOBをさばいているようだけど、パスキーがどういう扱いなのかまだわかっていないので、調べんといかんのだろうな。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。