ブルートゥースのBLE通信試験ツール

〔ソフトウエアーのトップに戻る〕


 ”ブルートゥースのBLE通信試験ツール”は、pythonのbleak(BLEのみ対応らしぃ)モジュールを
使用して作成しています。
通信相手のペリフェラル機器は、"ESP32-WROOM-32E"を使いMicropythonで行っていますので、
他のデバイスやC言語での動作は不明です。著作権をPublic Domain Softwareとしますので動作する
様に御自身で改良してください。
又、PC側のブルートゥースは"BLE"に対応している必要があると考えます、未対応な場合は、
USB-ブルートゥース(BLE対応)のドングルを使えば良いでしょう(私はこれで実験しています)。

ダウンロード

 ↓ここからダウンロードしてください。
[BLEtool.zip] Ver 1.00
[BLEtool.zip] Ver 1.10 notify/readの表示型式変更 *1)
[BLEtool.zip] Ver 1.20 HEXデータでもwrite出来る様に改良しました *2)

ファイルの構成
skBLEtoo.py ・・・・・・・・ ツールのメインスクリプト
skBLEtool.ico ・・・・・・・ アイコンファイル
skBLEsub.py ・・・・・・・・ コンソール画面を表示させる為のスクリプト
skDICT.py ・・・・・・・・・・・ 辞書データを作成してファイルとして読み書きするスクリプト

pythonファイルの実行方法
@ 先ずは、"skBLEtoo.py"ファイルをマウスで[ツンツン]して見ます。
  python環境が整っていれば起動します。
A ダメな場合は、コマンドプロンプトで操作します、こちらを参照しましょう。
  (注意1 "$ python --version"とかなっていますが、windowsは"$"は無しです)
  (注意2 画面に"C:\Users\user>"と表示されていれば上記ファイルをその場所に移動させます)

このツールでデバックしたペリフェラルデバイス
ESP32-WROOM-32E+Micropython 記事はここ
RN4020 BLE モジュール      記事はここ *1)

操作方法

 操作は、デバイスの検出を行いデバイスが持つサービスを検索し、使用するサービス内から属性の
キャラクタリスティックとディスクリプタを検索したら接続準備完了です。

先ずは、PCのタスクバー下右側の通知アイコンをクリックし、[接続]ボタンをクリックします。
次に下側の”他の種類のデバイスを探す”をクリックし、「Bluetoothとその他のデバイス」パネルを開きます
そこにある、Bluetoothを"オン"して置きます。それとぉペアリングは行わないでください。

ペリフェラル機器の電源を入れましょう。
(ここでは、"mpy-uart(ble_simple_peripheral.py)"を使っています。)

〔検出〕

@ ツールのメニューバーより、[デバイス]->[検出]と順番にクリックします。
  周辺に在る全てのペリフェラル機器が検出されるでしょう。
  (タイムオーバー等で検出されない場合が有ります、その時はもう一度リトライアゲイン)

通知操作
こんな感じぃ
ここでの例は、"mpy-uart"ですクリック選択を行っておきましょう。

〔サービス〕

@ ツールのメニューバーより、[デバイス]->[接続]->[サービス]と順番にクリックします。
  選択したペリフェラル機器に接続して全サービスを調べて接続を切ります。

サービス操作
こんな感じぃ
使用するサービス"Nordic UART Service"にクリック選択を行っておきましょう。

〔キャラクタリスティック〕

@ ツールのメニューバーより、[デバイス]->[接続]->[Characteristics]と順番にクリックします。
  選択されたサービスの操作可能な、キャラクタリスティックとディスクリプタが表示されます。
  操作する属性(キャラクタリスティック)を選択する事になります。

キャラクタリスティック操作
こんな感じぃ
これでPCとペリフェラル機器間で送受信可能な情報を得ました。
typeが"char"は、キャラクタリスティックの属性です。
typeが"desc"は、ディスクリプタの属性です。


〔通知〕

 ペリフェラル機器がデータを通知します、そのデータを受信("notify"の属性のみです)して表示します。
尚、"bleak"モジュールには、[INDICATEの属性]返答要求は出来ない様です。

@ キャラクタリスティックリストからハンドル番号"20"にクリック選択を行います。
A コンソール画面を表示させます。
  ツールのメニューバーから[表示]->[コンソール]と順番にクリックします。
B 通知(Notify)を受けられ様に"有効"操作を行います。
  ツールのメニューバーから[デバイス]->[接続]->[通知]と順番にクリックします。

コンソールの画面図(通知)
こんな感じにペリフェラル機器から送られてくるデータを10秒間表示します。
10秒後に通知を"無効"にし接続を切ります。尚、10秒は変更可能です。
("無効"時は、ペリフェラル機器が書き込んでも表示はされません)

〔write〕

 ペリフェラル機器へデータを送信("write"の属性のみです)します。
尚、1回で送信できる文字の長さは20文字です。

@ キャラクタリスティックリストからハンドル番号"23"にクリック選択を行います。
A コンソール画面を表示させます。
B コンソール画面で送信データを入力して[ENTER]キーを押します。
  ここでの例は、"ESP32 Hello!"としています。
  尚、送信後は接続が切断されます。

コンソールの画面図(送信)
"PyCharm"のREPL画面(ESP32側を起動中)にも"ESP32 Hello!"と表示されていますね。
ESP32側は接続されるとデータを送り続けますが、ツール側で通知を"有効"にしていないので
コンソール画面には表示されません。

  送信データをHEX値でも送る事が出来ます。 *2)
  "02H"を送りたい場合は、"0x02"と入力します。
  又数バイト送る場合は、"0x02ABFF・・・"と入力します。

〔read〕

 ペリフェラル機器から、ディスクリプタや"read"となっている属性は値を読み込めます。

@ キャラクタリスティックリストからハンドル番号"22"をクリック選択を行います。
A コンソール画面を表示させます。
B ツールのメニューバーから[デバイス]->[接続]->[read]と順番にクリックします。
  データを読んだ後は接続が切断されます。

コンソールの画面図(read)
こんな感じで読み込んだデータを表示します(Hello!文字は関係なしです)。
リストの値と同じですね、同じ内容を読んでいるのでぇ当たり前田のクラッカ。

複数readする

@ キャラクタリスティックリストから複数選択して"read"可能です。

キャラクタリスティックリストの画面図
例えばこんな感じで、"read"できる属性を複数選択できます。
因みに、複数選択時は[CTRL]キーを押しながらマウスで選択しますよ、老婆心ながら。

A コンソール画面を表示させます。
B ツールのメニューバーから[デバイス]->[[接続]->[read]と順番にクリックします。

コンソールの画面図(複数read)
するとぉ、こんな感じで読み込んだデータを表示します。
又、複数選択に対応しているのは"read"機能のみです、"通知"は不可です。


〔スキャン〕

 ペリフェラル機器をスキャン(接続はしない)できるかテストできます。

@ "検出"の操作を行って置きます。
  スキャンしたいペリフェラル機器を選択しましょう。
A ツールのメニューバーより、[デバイス]->[スキャン]と順番にクリックします。
B スキャンが正常に終了すれば、ステータスバーに"デバイスのスキャンが完了しました。"が
  表示されるでしょう。

〔オブザーバー〕

 ブロードキャスト周辺機器(ビーコン等)から送られてくるデータを表示します。

@ "検出"の操作を行って置きます。
  ブロードキャストを出している機器を選択しましょう。
A コンソール画面を表示させます。
B ツールのメニューバーから[デバイス]->[オブザーバー]と順番にクリックします。

オブザーバー操作画面図
ブロードキャストを出している機器は、名前やUUIDがなくて、
"製造元のデータが"有る機器だと思います、たぶん。
製造元のデータ構成は[ベンダーID:通知したいデータ]だと思います、たぶん。

〔機能〕

 何か他に欲しい機能が有れば"Scan - read"を参考に御自分で改造して下さい。

Scan - read

 "Scan - read"の機能は、スキャンとreadの処理を指定した間隔で"[停止]"させるまで続けます。
なのでぇ、アドバタイジング、通知(read)、スリープを繰り返すデバイスに最適だと思います。

@ "検出"・"サービス"・"キャラクタリスティック"の操作を行って置きます。
  (因みに"検出"のみ操作されている場合は、スキャンのみ実行されます)
A キャラクタリスティックリストから"read"の属性を選択(複数も可)して置きます。
B コンソール画面を表示させます。
C ツールのメニューバーから[機能]->[Scan-read]->[開始]と順番にクリックします。
D スキャンとreadの処理を行う間隔の時間を入力する画面が表示されます。
  指定時間は10秒単位で"6(1分)"がデフォルトです (最初のスキャンは1分後に始まります)。

コンソールの画面図(Scan - read)
ここでは、"mpy-sh31(blu_sh31.py)"を使っています、処理間隔は"1分"です。
デバイスは、"read"後切断されるので3分間のディープスリープに入ります。
スリープ中にはスキャンがされても応答出来ないので、存在しませんが2回発生ですね。
でぇ、デバイスが復帰したら"read"出来ていますね。


〔コンソール画面〕

・画面の[画面クリア]ボタンは、画面の表示を消します。
・ツール起動時からコンソール画面を表示させて置けば、エラー等が発生した時に 判り易いと思えます。

コンソールの画面図(エラー表示)
こんなあんばいです。

〔GATT設定情報〕

GATT設定情報画面の表示  GATT設定情報画面は、デバイスのアドレスやサービスのUUIDと
 キャラクタリスティックのUUIDリストで選択された項目の、
 情報表示やファイル(記録帳:BLEtool.pkl)保存に
 手動データ入力操作が行われる画面です。

 @ ツールのメニューバーから[表示]->[GATT設定情報]と順番に
   クリックします。左図の如く表示されます。
 
 画面に有る[][]ボタンは、キャラクタリスティックのUUID
 リストで複数選択した時に、他の選択項目を見たい場合等に
 使用できます。

通知待ちの有効時間(秒):
 通知操作を行うとデフォルトでは10秒間データを受信可能ですが、その時間を設定できる場所です。

デバイスのアドレス:
 デバイスのアドレスリストで選択された項目が表示されます。
 手動でアドレスを入力可能ですが、入力後の[ENTER]キーを忘れずに。
 macOSの"B9EA5233-37EF-4DD6-87A8-2A875E821C46"型式でもOKと思うが未実験です。

サービスのUUID:
 サービスのUUIDリストで選択された項目が表示されます。
 手動でUUIDを入力可能ですが、入力後の[ENTER]キーを忘れずに。

キャラクタリスティックのUUID:
 キャラクタリスティックのUUIDリストで選択された項目が表示されます。
 手動でUUIDを入力可能ですが、[type;UUID;handle]のフォーマットで入力します。
 例えば、[char;6E400003-B5A3-F393-E0A9-E50E24DCCA9E;20]みたいなぁ感じぃ。
 キャラクタリスティックなら"char"、ディスクリプタなら"desc"です。
 但し、入力は1件のみです。

[記録帳に登録]ボタン
 @ [記録帳に登録]ボタンをクリックします。下記図が表示されます。

記録帳に登録操作
登録名前を入力し[OK]ボタンをクリックします。

 A 下記図の様に表示され、ファイルにも保存されます。
   ファイル(BLEtool.pkl)は、自動的に作成されます。

記録帳の表示(登録後)

[記録帳を見る]ボタン
 @ [記録帳を見る]ボタンをクリックします。
   上と同じ一覧画面が表示されます。

”記録帳から削除”
 @ 記録帳一覧画面で削除したい項目を右クリックします。
 A 表示されたサブメニュより"記録帳から削除"をクリックします。

記録帳の表示(削除)

”設定情報へ読込む”
 @ 記録帳一覧画面で読み込みたい項目を右クリックします。
 A 表示されたサブメニュより"設定情報へ読込む"をクリックします。

記録帳の表示(読込む)

 B 下記図の様に表示されます。

ツールの画面


その他

・ペリフェラル機器に接続し操作中はツールの操作は出来ません、操作が終了するまで待ちましょう。
・検出とスキャン以外の操作はペリフェラル機器に接続します、その際必ず "ATT MTU交換" が
 実行されます。でもぉ、指定された長さのデータは読めますがぁ、
 その長さでデータが書き込めない(1回あたり20Byteでしか書き込めない)。
・bleakは"indicate"に対応していない様です、読み込めません。
・ディスクリプタに書き込む場合は、write属性を持っていなければ書き込めません。
・Wiresharkソフトと"nRF51822搭載 Bluefruit LE Sniffer"ツールデバイスを使ってBLE通信の
 プロトコル解析が出来るらしい、詳しくはこちらを参照しましょう。
 お金に余裕が出来たら買ってみたいです、如何なっているのかもつと良く解るでしょう。






[ページ上へ]

HEXデータでもwrite出来る様に改良しました(*2) 2021/07/17
notify/readの表示型式変更(*1) 2021/06/27


【きむ茶工房ガレージハウス】
Copyright (C) 2006-2021 Shigehiro Kimura All Rights Reserved.