12月 192017
 
■各メソッド内部の処理について

ここでは、スクリプトのソースファイルを見ながら、各クラスのコンストラクタと提供メソッド内の
処理の流れについて説明していきます。

■モジュールのインポート


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製品画像
REX-SEEK2 Bluetooth+LE対応 紛失防止タグ

RAL-KCM3MB1製品画像
RAL-KCM3MB1 - Raspberry Pi CM3対応キャリアボード

REX-USB60F製品画像
REX-USB60F - USBシリアルコンバータ

REX-BT60製品画像
REX-BT60 - Bluetooth RS-232C変換アダプター


REX-USB70 - USB to RS-485 Converter

 返信する

以下のHTML タグと属性が利用できます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(必須)

(必須)

*