モノ創りで国造りを

ハード/ソフト問わず知見をまとめてます

BLEモジュールRN4870/71の使い方まとめ

BLE通信モジュール RN4870/71

RN4870/71はMicrochip社製のBLEモジュール。
f:id:yuji2yuji:20190712105309p:plainf:id:yuji2yuji:20190712105327p:plain
技適取得済のモジュールなので、機器に埋め込んで使用できる。
RN4870/71はGPIO、ADC、I2C、UART、SPIが使用可能。
加えてスクリプトモードでスタンドアローンに動作できる。
スクリプトモードは、事前に動作させたい内容をBLEモジュールに記録することで、
例えば電源ON後や通信接続後などに実行したい操作を自動で行わせられる。
この機能を使用することで、簡単な操作であれば、Hostコントローラーが不要になる。 ブロック図は以下。
f:id:yuji2yuji:20190712105441p:plain

モジュールによって使用可能な機能とピン数が異なる。以下の通り。

機能 RN4870 RN4871
GPIO 4 2
ADC 5 2
I2C 1 1
UART 1 1
SPI 1 0

*GPIO、ADC、I2Cのピンは兼用。

RN4870は多機能だがサイズが大きい。RN4871はサイズは小さいが機能が少ない。
目的に応じて選びましょう。

RN4870 RN4871
サイズmm 12 x 22 9 x 11.5

とにかく簡単に使う

Bluetoothは生活になじみ深いので、使い方も把握しているつもりだったが、
いざモジュールを使うとなると、
GAP、GATT、Advertisement、UUIDなどなど
前提知識が色々必要でちんぷんかんぷん。

各用語は他人様の記事で勉強するとして、
ここではデフォルト状態の2つのRN4871モジュールを通信させるための
必要最小限の手順を書く。

実現したいこと:
CentralモジュールをPCで操作して、PeripheralモジュールのAD値を取得する。
* 通信モジュールはCentralとPeripheralに分類される。
* いわゆるMasterとSlave、HostとClientの関係。

手順の概要

必要な手順は以下の通り。

  1. PeripheralのMACアドレスを把握する
  2. Peripheralが自分の存在を周囲に発信する(Advertisement)
  3. Centralが特定のMACアドレスを持つPeripheralをスキャンする
  4. 接続後、Centralをリモートコマンドモードに変更
  5. PeripheralのAD値を取得する

PeripheralのMACアドレスを把握する

  • PeripheralとPCをUART接続する。
  • コマンドモードへ移行するため $$$と入力する。
  • ECHOをONにするため+と入力する(やらなくてもよい)。
  • 詳細情報を取得するため、Dと入力する。
  • BTA=xxxxxxxxと表示されるので、このxxxxxxxxをメモする。

Peripheralが自分の存在を周囲に発信する(Advertisement)

  • 電源を接続すると自動で実行される。
  • Interval時間や送信強度などを変更することで電力を抑制できるが、
  • ここでは割愛。

Centralが特定のMACアドレスを持つPeripheralをスキャンする

  • CentralとPCをUART接続する。
  • $$$と入力しコマンドモードに移行する。
  • +でECHOをON。
  • C,0,xxxxxxxxと、先ほどメモしたMACアドレスを入力し特定のモジュールをスキャンする。
  • 接続されたら再び$$$でコマンドモードにする。
  • Bと入力し接続をSecureにする。

接続後、Centralをリモートコマンドモードに変更

  • SS,C0を入力し、UART Transparentモードに移行する。
  • !,1と入力し、リモートコマンドモードへ移行。これでCentralへのコマンドが全てPeripheralへ送信されるようになる。

PeripheralのAD値を取得する

  • @,4でPeripheralモジュールの消費電流のADC値を取得する。
  • @,5でPeripheralモジュールの温度センサのADC値を取得する。