RN4020のBLEモジュールをいじってみます(スクリプト編)

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


 前前ページでRN4020の基本情報と、主なコマンド一覧にPCと接続してシリアル端末("TeraTerm")で、
動作させる方法を記述していますので基本の話は前前ページを見ましょう。
このページでは、RN4020のスクリプトを使って動作をさせてみます、これを使えば簡単なデバイスなら
マイコンを使わないで作成する事が出来る様です。
尚、スクリプトのコマンド仕様は、モジュールユーザガイドこちら(日本語)を参照下さい。
又このページでは、前ページまでの記事を読んでいる者として記事を少し端折って記載しています。

《タグもどき》

 RN4020のスクリプトを使ってタグのデバイスもどきを作成し、携帯を持っていないので
セントラル側をESP32で行います(PCのMyツール"skBLEtool.py"でも動作可能)。

RN4020の回路

RN4020の作成写真
使っている部品は、こちら又はこちらの”電子ブザー”です。
発振回路内蔵なのでぇ電池に接続するだけですぐ鳴ります、但し、+-の極性有です。
尚、ブザー出力はRN4020のPIO2ピンに配線しています。
USBシリアル(UART)変換モジュールは"TerTerm"操作用で初期のコマンド設定時に必要です。
"RN4020-BLE通信モジュール" を乗せる為のXBee用2.54mmピッチ変換基板を利用しています。
電源は、設定時のみUSB出力5Vを使っています、
後はRN4020を設定完了後に電池駆動させたい場合は、”別途電源(5V)”が必要です。

RN4020の設定とスクリプト書込み

@ USBシリアル変換モジュールで"TerTerm"に接続し、ペリフェラルの設定とスクリプト書き込みを
  行います。下記の如く入力しましょう、RN4020の返答は記述無しです。
   SF,1                // 工場出荷時の規定値にリセット
   PZ                  // プライベートの全設定データをクリア
   WC                  // 全スクリプトをクリア
   S-,TAG              // デバイスの名前を設定
   R,1

   SR,00000000         //ペリフェラル
   SS,00000001         // ユーザ定義のプライベートサービス
   PS,4e234e525309435ba3fee6da3c1379ee        // プライベートサービスのUUID
   PC,39fb230966404dc5a2cf4b5c25b7ac35,04,01  // キャラクタりスティックUUID(PIO2)
   R,1

   D                   // デバイスのアドレスと名前を調べて記録しておく
   LS                  // ハンドル番号を調べる(下で入力する)

   WW                  // スクリプト書き込みモード開始
   @PW_ON # 電源ON
   |0,02,%000E # PIO2をハンドル番号'000E'と紐づける為の登録
   この行で[ESC]キーを押してスクリプト入力モードを終了させます。
   SR,21000000 //ペリフェラルとスクリプト実行と自動アドバタイズ    R,1
   長い入力はコピッペしましょう、"TerTerm"は[コピー]したらマウスの右ボタンで[ペー]です。
  ピンクの文字列部分がスクリプトです、[コピー]しましょう。
  これは、電源が入ったら実行されるイベント発生の記述です。
  PIO2にブザーを配線し。ESP32側がハンドル番号'000E'にデータ"0x02"を書き込んだら
  ブザーが鳴る様にしています、でぇ、"0x00"を書き込めばブザー停止です。
  尚、次回電源起動時はこの入力は必要なく立ち上がります。
  又、スクリプト実行時は殆どコマンドを受け付けません、"WP"コマンドでスクリプト停止。

  起動すると、"RN4020-BLE通信モジュール" のLEDが点灯します、接続されれば消灯します。

skBLEtool操作

 ESP32で操作の前に、"skBLEtool"を使ってブザーを鳴らしてみます。
"skBLEtool.py(自作)"のダウンロードと使い方はこちらをご覧ください。
この"skBLEtool.py"では、pythonのbleakモジュールを使い"BLE通信"を行っています。

@ ツールを起動させます。(方法はこちら)
A デバイスを検出します。
B デバイスの全サービスを調べます。
C 操作できる属性(キャラクタリスティック)を調べます。

skBLEtool.py(検出画面)
こんな感じで表示されるでしょう。
以下の操作を行う為に、上記の様に青い部分のキャラクタリスティックを選択して置きましょう。

write操作

D ツールのメニューバーより[表示]->[コンソール]を表示させます。
E ツールのコンソールから"0x02"+[ENTER]を入力します、ブザーが鳴るでしょう。

skBLEtool.py(コンソール:write)
この様に送信されます。
ブザーを止めるのは"0x00"です。
尚、RN4020のPIO2にBZを配線なので0x02、他に配線を変えたらデータも変更します。

ESP32の回路

ESP32の回路図
電源はUSBからで、モジュール出力の3.3Vです。
LEDは、ESP32のピン15番(GPIO15)に配線しています。
スイッチは、ピン5番(GPIO5)に配線しています。
尚、スイッチにはチャタリング防止回路を施しています。
チャタリング防止回路については、こちらを参照。

ESP32の準備

↓ここからこのセクションで使うファイルをダウンロードしましょう。
[ble_tag.zip]

@ "ble_advertising.py"ファイルを"PyCharm(MicroPythonエディター)"の
  プロジェクトディレクトリ(ここでは"esp32Test"を作成している)へコピーします。
A ESP32-WROOM-32EボードをUSBでPCに繋ぎます。
B "PyCharm"を起動させ、作成してあるプロジェクトを開きましょう。
  こちらのCを操作する必要が有ります。(起動時最初のみ設定)
C "main.py"を新規登録して"ble_tag_central.py"のコードを"main.py"に貼り付けましょう。
  (登録済みなら上書き貼り付けでも行いましょう)
D デバイス名"TAGF0A9 (私のRN4020時)"が記述して有ります、自分の物に合わせて書換えましょう。
  (上記で記録していましたね!)
E ESP32-WROOM-32Eに書き込みます
  ・左側プロジェクトウインドウから"ble_advertising.py"の文字を右クリックをして、
   [実行(U)'Flash ble_advertising.py']をクリックします。
  ・左側プロジェクトウインドウから"main.py"の文字を右クリックをして、
   [実行(U)'Flash main.py']をクリックします。
F 動作は約3.1秒毎にスキャンを行い、BLE機器の【タグサービス】を見つけて接続します。
  接続したらLEDが点灯します("RN4020-BLE通信モジュール" のLEDは消灯)。
  この間スイッチを押せば機器側のブザーが鳴り、更に押せばブザーは止まります。
  接続中に、機器が離れれば接続が切れるのでLEDが消灯し、再度3.1秒毎にスキャンを行います。

  "REPL"を起動すればprint文により動きが更に理解できるかもぉ?。
  メニューバーから[ツール]->[MicroPython]->[MicroPython REPL]と順番にクリックし起動します。
  ">>>"が表示されたら、[CTRL]+[D]キーを押します (尚、[CTRL]+[C]はプログラム停止です)。

REPL画面(未検出時の表示出力)
未検出時は、この様に表示され検出するまで3.1秒毎に繰り返します。

REPL画面(検出時の表示出力)
検出時は、この様に表示し接続されます。
スイッチを押してみて下さい、ブザーが鳴ると思います。
後は、EN4020のペリフェラルを離してみて下さい、
10m程離れると接続が切れてLEDが消灯する事でしょう。
成功を祈ります。(>人<;)

タグもどきのその他

ペリフェラル側にスイッチを付けてセントラル側にブザーを付けてぇ....
止めました...皆さんの宿題にして置きます。
これで、皆さんの大事な財布に入れてぇ \(-.-;)って、おい、入るわけないだろ
じゃぁ、家のニャーの首に取り付けてぇ (-""-;)いい加減にしろよ!



[セントラル編へ] [ページ上へ]


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