マイコン工作実験日記

Microcontroller を用いての工作、実験記録

PAGEMODEとペアリング

2012-07-23 00:43:38 | WT32/BM20
WCA-009を購入いただいた方から質問を受けたので、きょうはペアリングに関連してPAGEMODEとPIN番号の設定について説明しておくことにします。

Bluetoothでは接続に先立って、通常接続するデバイスを互いに認証しておく必要があります。その手順はペアリングと呼ばれ、片方の側(デバイスA)からもう片方(デバイスB)へ接続をおこなうために、つぎのような一連の手順を踏みます。
  1. まずデバイスB側を他のデバイスから発見可能な状態に遷移させます。デバイスによってはペアリング受付可能状態とも呼ばれます。
  2. デバイスA側からデバイスの検索をかけます。近隣にある自分とつながりそうなデバイスとその名前を見つけます。
  3. 見つかったデバイスのリストのなかからデバイスBを選択して、ペアリングあるいは接続動作を試みます。
  4. デバイスB側からPIN番号の要求を受けるので、デバイスBの持つPIN番号をデバイスA側で入力します。
  5. ペアリングあるいは接続動作が終了します。
  6. 必要に応じてデバイスB側の発見可能な状態を解除。

それでは、これらの手順と対応するWT32の設定ならびに操作について説明していくことにします。最初に自分を他のBluetoothデバイスから発見可能な状態にせねばなりません。この設定は SET BT PAGEMODEコマンドでおこないます。WT32のディフォルトでは、
SET BT PAGEMODE 4 2000 1
となっています。この設定では、Bluetooth接続がない状態ではWT32は他のデバイスから発見可能な状態にありますが、接続ができると発見できない状態になります。単一デバイスとの接続であれば、ユーザにペアリング受付可能モードを意識させない都合の良いモード設定というところでしょうか。ただし、この設定ではいったんひとつのデバイスと接続されると、他のデバイスからの接続は受付ないようになります。したがって、音楽プレーヤと接続した状態で、携帯ともつなげようとしてもつながらないという問題が発生します。
SET BT PAGEMODE 3 2000 1
という設定に変更してやれば、常時発見可能/接続可能な状態になります。Bluetooth用語で言えば、Inquiry scanとpage scanの両方を行う状態です。しかし、この状態では常時見え見えの状態なので、セキュリティや消費電力の観点からは必ずしも好ましい状態ではありません。そこで、いったんペアリングができれば、以後は
SET BT PAGEMODE 2 2000 1
に設定変更するのが好ましい使い方と言えます。Bluetooth用語で言えば、Inquiry scanは行わないが、page scanは行うという設定です。この状態では発見はできませんが、すでにペアリングを終えBluetooth Device Addressを知っているデバイスからの接続受付は可能だからです。

近隣デバイスを検索するには、inquiryコマンドを用います。

このコマンドで近隣で発見可能なデバイスのBluetooth Address(BD ADDR)とそのClass of Device(COD)を知ることができます。またnameオプションを指定することで、対応するデバイス名を調べることができます。上述のように他のデバイスからのinquiryの要求を受け付けるためには、PAGEMODEを適切に設定しておく必要があります。CODの設定は、SET BT CLASSコマンドで設定することができます。装置によってはCODでフィルタをかけることで、特定のクラスに属するデバイスのみを検索して表示するものがあります。このような場合には、PAGEMODE設定で発見可能になっていても、CODが適切に設定されていないと発見してもらえないという現象が発生しますので、注意が必要です。

ペアリングには自動的にPIN番号を生成するSSP(Simple Secure Pairing)という機能も用意されていますが、ここでは静的にPIN番号を設定する方法について紹介しておきます。具体的には、
SET BT AUTH * 1234
とすることでPIN番号として1234を指定することができます。次に示すようにこの設定は、相手側から送られる自分のPIN番号確認にも使われますし、相手側に対して送出するPIN番号としても使われます。
  • ヘッドセットのようなデバイスを作る場合には、この設定だけで充分です。スマホやパソコンからデバイスの登録をおこなうと、PIN番号を聞かれますのでスマホ/パソコン側で設定した番号(ここの例では1234)を入力すればペアリングが完了します。
  • 音楽プレーヤのような装置を作る場合には、検索して見つけた相手デバイスに対してペアリング操作を行う必要があります。
    PAIR bdaddr
    とすることで指定したアドレスのデバイスとペアリングすることができます。この際に必要となるピン番号にはSET BT AUTHで指定してある番号が使用されます。
  • PAIRコマンドを用いて明示的にペアリングをおこなわなくても、CALLコマンドを使って相手側に接続を試みると、必要であれば自動的にペアリングをおこなってくれます。この時にもSET BT AUTHで指定したピン番号が使用されます。

それでは、ペアリング操作の実例を示しておきましょう。まずは、PAIRコマンドを使う例から。SET BT AUTHの設定がない状態でPAIRコマンドを発行しても相手に伝えるPIN番号情報がないので失敗します。SET BT AUTHでPIN番号設定してからPAIRコマンドを出すことで、ペアリングに成功しています。


次の例では、CALLコマンドで接続する際に自動的にペアリングできることを示しています。SET BT PAIR *でいったん全てのペアリングを解除しているのですが、その後のCALLコマンドで接続できているのは自動的にペアリング動作が行われているためです。


インタラクティブなペアリング
さて、上記の方法ではSET BT AUTHコマンドを使うことで、PIN番号を固定的に指定しています。しかし、オーディオ・プレーヤに複数のヘッドホンをペアリング登録したいような場合には、デバイス毎にPIN番号が異なっている可能性があります。このような用途では、コマンドで固定的にPIN番号を指定するのではなく、ペアリング操作時にインタラクティブに番号を指定できた方が便利です。WT32でもそのための機能が用意されています。以下に、その例を示します。


  • まず、SET CONTROL CONFIGコマンドで bit 11をセットすることにより、認証要求のイベントを表示するように設定しておきます。
  • すると、PAIRやCALLコマンドを出したときに、AUTHイベントが表示されるようになります。
  • AUTHコマンドを使って、相手側のPIN番号を返してやります。
  • SET CONTROL CONFIGコマンドでビット7がセットされていれば、ペアリング成功時にはPAIRイベントが表示されます。

上の例では1回目のピン番号の入力をわざと間違えてみました。その結果として、PAIRコマンドが失敗したことを示すイベントが出ていることに注意してください。正しいPIN番号を入れるためには、例のようにPAIRコマンドからやり直す必要があります。もちろん、CALLコマンドを使った場合にも同じようにAUTHコマンドでPINを入力することができます。