■各メソッド内部の処理について
ここでは、スクリプトのソースファイルを見ながら、各クラスのコンストラクタと提供メソッド内の
処理の流れについて説明していきます。
■モジュールのインポート
PythonからBLEデバイスを制御するための[bluepy]ライブラリモジュールをインポートします。
■ControlSeek2クラスのコンストラクター
コンストラクターでは、REX-SEEK2へBluetooth接続を行い、通知イベント発生時の処理を登録します。
(1) REX-SEEK2へのBluetooth接続を行うために、[bluepy]のPeripheralメソッドを呼び出します。
[Peripheralメソッド]
書式 | Peripheral(deviceAddress, addrType) |
機能 | Peripheralクラスのオブジェクトの使用を開始するためのコンストラクタです。 deviceAddressで指定されたBluetoothアドレスで指定されたBLEデバイスへ接続します。 |
deviceAddress | “XX:XX:XX:XX:XX:XX”形式のBluetoothアドレス文字列 |
addrType | アドレスタイプを「ADDR_TYPE_PUBLIC」「ADDR_TYPE_RANDOM」のどちらかで指定 |
(2) ボタン押下イベントが通知されたときの処理としてNotificationDelegate()を登録するために、[bluepy]のsetDeligateメソッドを呼び出します。
[setDeligateメソッド]
書式 | setDelegate(delegate) |
機能 | 通知イベントが発生したときに呼び出されるDelegateオブジェクトを設定します。 |
delegate | 設定するDelegateオブジェクト |
戻り値 | Peripheralオブジェクト |
■ ControlSeek2 クラスの _enableNotificationメソッド
REX-SEEK2からのボタン押下の通知を有効にします。
REX-SEEk2からのボタン押下の通知イベントを有効にするために、[bluepy]のwriteCharacteristicメソッドを呼び出します。
ボタン押下イベントの通知許可のCCCDとしてハンドル値0x1c およびその設定値 0x0100 を指定します。
[writeCharacteristicメソッド]
書式 | writeCharacteristic(handle, val, withResponse) |
機能 | handleで指定したハンドルのCharacteristicにvalで指定した値を書き込みます。 withResponseにTrueを指定すると、デバイスへの書き込み成功の応答を待ちます。 |
handle | Characteristicのハンドル |
val | Characteristicに書き込む値 |
withResponse | TRUE:書き込み成功を待つ FALSE:待たない |
■ ControlSeek2 クラスの _disableNotificationメソッド
REX-SEEK2からのボタン押下の通知を無効にします。
REX-SEEk2からのボタン押下の通知イベントを無効にするために、[bluepy]のwriteCharacteristicメソッドを呼び出します。
ボタン押下イベントの通知禁止のCCCDとしてハンドル値0x1c およびその設定値 0x0000 を指定します。
■ ControlSeek2 クラスの monitorSeek2メソッド
REX-SEEK2からのボタン押下イベントの通知を有効にし、タイムアウト付きでボタン押下イベントを待ちます。
REX-SEEK2からのボタン押下イベントの通知を有効にするために、_enbleNotificationを呼び出します。
その後、ボタン押下イベントの通知をタイムアウト付きで待つために[bluepy]のwiatForNotificationメソッドを呼び出します。
タイムアウト時間は10秒を指定します。
[waitForNotificationsメソッド]
書式 | waitForNotifications(timeout) |
機能 | BLEデバイスからの通知を待ちます。 timeoutで指定した秒数が経過しても通知を受とらない場合は、エラーとなります。 |
timeout | タイムアウト時間(秒) |
戻り値 | True: BLEデバイスからの通知が発生した False: タイムアウトが発生した |
■ NotificationDelegate クラスの handleNotificationメソッド
REX-SEEK2から通知イベントを受取ったときの処理です。
ハンドル番号がボタン押下の通知である 0x1b の場合は、「Button event detected !!!」を表示し、それ以外の他のハンドル番号の場合はハンドル番号を表示します。
■ メインプログラム
スクリプトを開始するとすぐに実行される処理です。
REX-SEEK2からボタン押下イベントの通知を待ち、通知のタイムアウトによって終了します。
第一引数を対象とするREX-SEEK2のアドレスとして取得します。
対象のREX-SEEK2に接続し、ボタン押下イベントの処理を登録するために、ControlSeek2 クラスを
コンストラクトします。
対象とするREX-SEEK2のアドレスを引数とします。
REX-SEEK2からのボタン押下イベントの通知を有効にして、タイムアウト付きでボタン押下イベント
通知を待つために monitorSeek2メソッドを呼び出します。
monitorSeek2メソッドを終了(通知タイムアウト)により、このスクリプト全体を終了します。
以上が、サンプルスクリプト seek2notify.py の処理内容です。
今回は、REX-SEEK2のボタンが押されたことを検出する方法とそのサンプルスクリプトについて
紹介しました。
次回は、REX-SEEK2との距離を判定する方法について説明していきます。
ラズパイ対応製品の紹介
REX-SEEK2 Bluetooth+LE対応 紛失防止タグ
RAL-KCM3MB1 - Raspberry Pi CM3対応キャリアボード