RN4020のBLEモジュールをいじってみます(セントラル編)

[基本編] [ペリフェラル編]   [スクリプト編] 〔マイコンのトップに戻る〕


 前前ページでRN4020の基本情報と、主なコマンド一覧にPCと接続してシリアル端末("TeraTerm")で、
動作させる方法を記述していますので基本の話は前前ページを見ましょう。
このページでは、RN4020をセントラル(クライアント)デバイスとして動作させてみます。
尚、ペリフェラル(サーバ)デバイス機器は"ESP32-WROOM-32E"+MicroPythonを利用します。

《mpy-uart》

 "mpy-uart"は、UARTペリフェラル機器を示しデータの送信と受信を行うサンプルです。
この"mpy-uart"は、こちらのページと同じ様な事を行っています。
但し、"ble_advertising.py"と"ble_simple_peripheral.py"ファイルはここからダウンロードした物を
使いましょう、RN4020用に"read"と"write"のみのプロファイルに変更しています。

ESP32の準備

@ "ble_advertising.py"ファイルを"PyCharm(MicroPythonエディター)"の
  プロジェクトディレクトリ(ここでは"esp32Test"を作成している)へコピーします。
A ESP32-WROOM-32EボードをUSBでPCに繋ぎます。
B "PyCharm"を起動させ、作成してあるプロジェクトを開きましょう。
  こちらのCを操作する必要が有ります。(起動時最初のみ設定)
C "main.py"を新規登録して"ble_simple_peripheral.py"のコードを"main.py"に貼り付けましょう。
  (登録済みなら上書き貼り付けでも行いましょう)
D ESP32-WROOM-32Eに書き込みます
  ・左側プロジェクトウインドウから"ble_advertising.py"の文字を右クリックをして、
   [実行(U)'Flash ble_advertising.py']をクリックします。
  ・左側プロジェクトウインドウから"main.py"の文字を右クリックをして、
   [実行(U)'Flash main.py']をクリックします。
E 書き込めたら"REPL"を起動しましょう。
  メニューバーから[ツール]->[MicroPython]->[MicroPython REPL]と順番にクリックし起動します。
  ">>>"が表示されたら、[CTRL]+[D]キーを押します (尚、[CTRL]+[C]はプログラム停止です)。
  ”Starting advertising”が表示されアドバタイズを行っています(REPLは起動したままです)。

ESP32→RN4020(read)

 ESP32ペリフェラル側は、接続されたら約3秒毎にread属性(キャラクタリスティック)に繰り返し
書き込んでいます、書き込んでいる内容は、"xxx_"でxxxは0から1づつインクリメントされます。

@ RN4020でセントラル側の設定を行います、下記の様にコマンドを入力します。

TeraTerm(セントラ操作)
黄色い網掛け部分が入力ヶ所で、他はデバイスの応答です。
次回モジュールを起動させる場合は、'F’コマンドから初めます。

'F’コマンド
このコマンドで表示される内容は次の如くです。
【デバイスのMACアドレス、アドレスタイプ、デバイスの名前、UUID、電波強度】

'E’コマンド
セントラルが、ペリフェラル デバイスとの接続確立のプロセスを開始します。
 E,x,aaaa
  x  :アドレスタイプ、パブリックアドレスの場合=0、ランダムアドレスの場合=1です。
  aaaa:6 バイトのMAC アドレス

A "TeraTerm"で"LC"を入力し、サーバの属性(キャラクタリスティック)を表示します。
  表示された内容からread属性のハンドル番号(0015)にかつもくせよ。
B "TeraTerm"で"CHR,0015"を入力します。

TeraTerm(CHR,read操作)
"34325F(42_):右側"が表示されました。

ESP32←RN4020(write)

 今度は、RN4020のセントラル側からデータを送ってみます。

C "TeraTerm"で"LC"を入力し、サーバの属性(キャラクタリスティック)を表示します。
  表示された内容からwrite属性のハンドル番号(0017)にかつもくせよ。
D "TeraTerm"で"CHW,0017,48656C6C6F21"を入力します。

TeraTerm(CHW,write操作)
ESP32(左側)へ"48656C6C6F21(Hello!)"が送信されていますね。


《mpy-temp》

 "mpy-temp"は、単純な温度センサー周辺機器を示し温度値はランダム値でダミーデータとなります。
この"mpy-temp"は、こちらのページと同じ様な事を行っています。
"ble_advertising.py"と"ble_temperature.py"ファイルはここからダウンロード出来ます。

ESP32の準備

@ "ble_advertising.py"ファイルを"PyCharm(MicroPythonエディター)"の
  プロジェクトディレクトリ(ここでは"esp32Test"を作成している)へコピーします。
  ("ble_advertising.py"がESP32へ書き込まれているならこの操作は必要ありません)
A ESP32-WROOM-32EボードをUSBでPCに繋ぎます。
B "PyCharm"を起動させ、作成してあるプロジェクトを開きましょう。
  こちらのCを操作する必要が有ります。(起動時最初のみ設定)
C "main.py"を新規登録して"ble_temperature.py"のコードを"main.py"に貼り付けましょう。
  (登録済みなら上書き貼り付けでも行いましょう)
D ESP32-WROOM-32Eに書き込みます
  ・左側プロジェクトウインドウから"ble_advertising.py"の文字を右クリックをして、
   [実行(U)'Flash ble_advertising.py']をクリックします。
  ・左側プロジェクトウインドウから"main.py"の文字を右クリックをして、
   [実行(U)'Flash main.py']をクリックします。
E 書き込めたら"REPL"を起動しましょう。
  メニューバーから[ツール]->[MicroPython]->[MicroPython REPL]と順番にクリックし起動します。
  ">>>"が表示されたら、[CTRL]+[D]キーを押します (尚、[CTRL]+[C]はプログラム停止です)。
  ”Starting advertising”が表示されアドバタイズを行っています(REPLは起動したままです)。

F "mpy-uart"での操作で、「ESP32→RN4020(read)」項の@コマンド入力を行いましょう。
G 接続を開始させると、下記の様に表示されます。

TeraTermとREPL(mpy-uart操作)
1秒毎にESP32(ペリフェラル:左側)からデータを通知していますので、
RN4020(セントラル:右側)には受信データが表示されます。


《オブザーバ》

 ブロードキャスタは、ESP32でこちらの内容と同じ物をアドバタイジングしました。
でぇ、RN4020をオブザーバとして実験を行ったのですがぁ...、何だかぁ受信データがおかしいです。

TeraTerm(オブザーバ操作)
こんな感じでぇ、送った内容らしきデータが見当たらない。

こちらこちらのページにそれらしき事が記載されています。
アドバタイズパケットの”Event_Type”を”Non connectable”に設定を行えば良いらしい。
こちらの"アドバタイズパケット"の"Header"部分に当たります、ここを[0010]にすれば良さそう。
だが、ESP32は設定変更が出来ない様です、
尚、ESP32の"ubluetooth"Micropythonモジュールのアドバタイザーを行う関数で"gap_advertise()"が
有ります、ここのパラメータに"connectable=True OR False"が設定できるが、"False"にしても変わらず
でした。因みに、"False"にしたらMyツールの"skBLEtool.py"では接続が出来なくなりました。



[ペリフェラル編へ] [ページ上へ] [スクリプト編へ]


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