■プログラム(Python)での確認
ここまで確認したことをPythonスクリプトに展開します。REX-SEEK2のボタン押下を検出してメッセージを表示する単純なPythonスクリプト(seek2notify.py)を作成しました。
このスクリプトは以下の2つ処理で構成されています。
処理1:メイン処理
前処理 | 通知イベント発生したときに処理するための通知イベント処理を登録します。 ボタン押下の通知イベントを有効にします。 |
モニター処理 | 通知イベントを待ちます。このときタイムアウト10秒に設定します。 上記でタイムアウトが発生したら、メイン処理を抜けて後処理行います |
後処理 | 通知イベントを無効にして、プログラムを終了します。 |
処理2:通知イベント処理
通知イベント処理 | イベントのハンドルがボタン押下イベントのハンドル 0x19 かチェックします。 ハンドル 0x19 であれば、ボタン押下されたことを表示します。 |
サンプルスクリプト(seek2notify.py)はこちらからダウンロードできます。
※ e2eStore会員ログインが必要です。(非会員の方は会員登録が必要です。)
■プログラム(Python)からBluetoothアクセスするための準備
PythonでBluetoothを使用するにはBluettooth用ライブラリのインストールが必要です。
Rasberry Piで使えるBluetooth用ライブラリはいくつか提供されていますが、今回のプログラムでは [bluepy] を使用します。
>>[bluepy] についてはこちら⇒[bleupyについて]
また、glib-2.0 も内部で使用しているため [libglib2.0-dev] のインストールを最初に行います。
sudo apt-get install libglib2.0-dev
次に[bluepy]をインストールします。
sudo pip3 install bluepy
以上でプログラム(Python)からBluetoothアクセスするための準備ができました。
それでは、サンプルスクリプト [seek2notify.py] を実行してみましょう。
■サンプルスクリプトの実行
コマンドラインから以下のように入力します。
引数に対象となるREX-SEEK2のBluetoothアドレスを指定します。
(入力例)
sudo python3 seek2notify.py C5:E6:B7:56:05:42
開始されると以下のメッセージを表示して
コマンドラインの引数で指定されたデバイスアドレスのREX-SEEK2を検索します。
seek2notify start
REX-SEEK2 を検出し接続に成功すると以下のメッセージが表示されます。
20170-10-11 02:19:01,231: Seek2 connected ! SEEK2 found C5:E6:B7:56:05:42 2017-10-11 02:19:01, 237: Notification enabled 2017-10-11 02:19:01, 237: Waiting for button pushed 10 second
指定したアドレスのREX-SEEK2 を検出できなかった場合や接続に失敗した場合は、
以下のメッセージを表示してプログラムを終了します。
2017-10-11 02:19:01, 237: Connecttion to Seek2 failed ! [C5:E6:B7:56:05:42]
それでは、REX-SEEK2のボタンを押してみましょう。
REX-SEEK2のボタンを押すと、その都度以下のメッセージが表示されます。
Button push detected !!!
ボタンを押さずに10秒が経過すると、以下のメッセージを表示してプログラムを終了します。
2017-10-11 02:30:14, 013: Notification timeout 2017-10-11 02:30:14, 013: Notification disabled
■サンプルスクリプトの説明
ここでは、サンプルスクリプト[seek2notify.py]の内容を見ながら具体的に説明していきます。
>>サンプルスクリプトの全体はこちら⇒[別ウィンドウでサンプルスクリプト全体を表示]
また、今回のプログラムでは、PythonからBLEデバイスを制御するためのライブラリとして
[bluepy] を使用しています。
>>[bluepy] についてはこちら⇒[bleupyについて]
■スクリプトの構成について
このスクリプトは、REX-SEEK2を制御するクラス(ControlSeek2クラス)と通知イベンを処理するクラス(NotificationDelegateクラス)の2つのクラスで構成され、各クラスで以下のメソッドを提供しています。
ControlSeek2クラス
REX-SEEK2を制御するクラスで以下のメソッドを提供します。
メソッド | 機能 |
_enableNotification | REX-SEEK2からのボタン押下の通知イベントを有効にする。 |
_disableNotification | REX-SEEK2からのボタン押下の通知イベントを無効にする。 |
monitorSeek2 | REX-SEEK2から ボタン押下イベントの通知を有効にして、その通知をタイムアウト付きで待つ |
disconnect | REX-SEEK2へのBluetooth接続の切断 |
NotificationDelegateクラス
通知イベントを処理するための以下のメソッドを提供します。
メソッド | 機能 |
handleNotification | 通知イベントがボタン押下イベントかをチェックする。 ボタン押下の場合のみボタン押下の検出を表示、違う場合はハンドル番号を表示する。 |