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 レポートディスクリプタ
char ReportDescriptor[34] = {
0x05, 0x0c, // USAGE_PAGE (Consumer Devices)
0x0a, 0x08, 0x01, // USAGE (Police Alarm)
0xa1, 0x01, // COLLECTION (Application)
0x09, 0x86, // USAGE (Channel)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x08, // REPORT_COUNT (8)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x09, 0x01, // USAGE (Consumer Control)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x08, // REPORT_COUNT (8)
0x91, 0x02, // OUTPUT (Data,Var,Abs)
0xc0 // END_COLLECTION
};
セキュリティーに関する機能
ロバスト性に関する機能