Bluetoothスイッチ基板の製作

Bluetoothドングルを使った無線通信実験(その2:HIDプロファイルの実装)の結果をうけて、スイッチ基板作成した。下の写真が、このスイッチ基板である。このような無線装置は、電波法などの定めにより技術基準適合証明が必要だが、使用しているBluetoothドングル自体がこの技術基準適合証明を取得しているのであらためてこの証明を取得する必要は無い。Bluetoothドングルを使った無線通信実験(その3:到達距離の測定)の結果では、見通しで190mの到達距離であった。

上:Bluetoothドングル(BT-MicroEDR1X)
左:ICSP(デバッガ、ライタ)
下:電源(DC5V)
右:RS232C(デバッグ用)
中央:マイコン(PIC24FJ64GB002) 
ボタン:リセット(RST)、ペアリング初期化(CLR)
LED:リンク確立(LNK)、警報スイッチ1(S1)、警報スイッチ2(S2)、受信信号強度(RSSI)

電源は安定化したDC5Vである。消費電流は、実測値で30−40mAだった。その多くはBluetoothドングルが消費している。単3アルカリ電池4本で連続で2日ぐらい使える。Bluetooth子機なので、最初だけ親機(PC)とのペアリングが必要となる。基板側のBluetoothドングルを変更した場合や親機側Bluetoothドングルを変更した場合、別の親機とペアリングする場合には、CLRボタンを押してペアリング情報を初期化してから再度ペアリングを実施する。リンクが確立し、BluetoothのHIDプロファイルによる通信が可能な状態になると、リンク確立のLED(LNK)がゆっくり点滅する。Msakoが動体を検知すると、2チャンネルの警報スイッチのLED(S1、S2)が点灯する。受信信号強度を示すLEDは次のように、RSSI値に応じて表示する。

LED表示○○○○○
RSSI値-10dB以上-10~-20dB-20~-30dB-30dB以下

この基板はBluetoothのHIDプロファイル仕様に準拠しているので、PC側に新たにドライバーをインストールする必要は無い。リンクが確立すると、OSにあらかじめ組み込まれているドライバが自動的にロードされる。

マイコン側のファームでCoD(Class Of Device)のMajor Device Class(主分類)をMiscellanous(その他)としているので、デバイスとプリンタの一覧中には次のように、素っ気無い四角い箱として表示される。Bluetoothの仕様で定義されているMajor Device Classは次のものしかなく、Msakoの警報装置にしっくりと当てはまるものが見当たらない。(;;)

HID レポートディスクリプタは次のとおり単純なものである。こちらはUSBの仕様の範疇であるが、USAGE_PAGE (Consumer Devices)、USAGE (Police Alarm)とMsakoの警報器が該当しそうな分類が定義されているので、これに決めた。USBのHIDに詳しい方ならお分かりだろうが、何もこだわらずUSAGE_PAGE (Vendor Defined Page 1)でかまわないところではある。USAGEもしかり。入力ディスクリプタ、出力ディスクリプタとも各1種類で各々8バイト長とした。

HID レポートディスクリプタ

  1. char ReportDescriptor[34] = {
  2. 0x05, 0x0c, // USAGE_PAGE (Consumer Devices)
  3. 0x0a, 0x08, 0x01, // USAGE (Police Alarm)
  4. 0xa1, 0x01, // COLLECTION (Application)
  5. 0x09, 0x86, // USAGE (Channel)
  6. 0x15, 0x00, // LOGICAL_MINIMUM (0)
  7. 0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
  8. 0x75, 0x08, // REPORT_SIZE (8)
  9. 0x95, 0x08, // REPORT_COUNT (8)
  10. 0x81, 0x02, // INPUT (Data,Var,Abs)
  11. 0x09, 0x01, // USAGE (Consumer Control)
  12. 0x15, 0x00, // LOGICAL_MINIMUM (0)
  13. 0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
  14. 0x75, 0x08, // REPORT_SIZE (8)
  15. 0x95, 0x08, // REPORT_COUNT (8)
  16. 0x91, 0x02, // OUTPUT (Data,Var,Abs)
  17. 0xc0 // END_COLLECTION
  18. };

セキュリティーに関する機能

  1. ペアリングに際して、PINコード(ペアリングコード、PINナンバー、ペアリングキー)を使用して認証しない。PINコードによる認証の脆弱性、操作性の観点からこうした。
  2. 盗聴による弊害は考えずらいので、暗号化は行わない。
  3. 他者が基板の制御を奪おうとする試みを防御するために、一度ペアリングするとCLRボタンによって初期化しない限り、もう一度ペアリングできないようにロックする。

ロバスト性に関する機能

  1. PCは、出力ディスクリプタを使って制御指令を基板へ送信する。制御指令を受信した基板は、入力ディスクリプタを使って応答メッセージをPCへ返信する。何らかの理由でこの指令が基板に届かなかった場合、PCは応答メッセージがタイムアウト時間内に基板から返信されてこないことによってそれを検知し、制御指令を再送信することによって、より確実に警報スイッチが入るようにした。
  2. PCと基板が接続中に、何らかの理由で、その一方または両方が停止した場合でも、再び起動すれば自動的に再接続される。
2010年09月08日