masato-ka's diary

日々思ったこととか、やったことの備忘録。

RN4020をBLEセントラルとして利用する。

この記事について

この記事ではRN4020をBLEセントラルデバイスとして利用し、BLEのペリフェラルバイスとやりとりするための方法を紹介します。これまではRN4020をペリフェラルバイスとして利用してきましたが、RN4020自信はセントラルとしても動作することが可能です。

masato-ka.hatenablog.com

RN4020のセントラルとしての利用方法

セントラルとして活用するには以下の方法で行います。

1. セントラル動作モードの設定

RN4020をセントラルとして活用するためにはSRコマンドで動作モードを変更するだけで利用できます。

SR,80000000
R,1

以上でRN4020がセントラルデバイスとして動作始めます。

2. デバイスの検索

続いて、ペリフェラルバイスの検索を行い、接続したいデバイスを発見します。今回は接続対象のデバイスとしてWx2Beaconを利用します。Wx2Beaconの詳細については以下の記事を確認してください。

masato-ka.hatenablog.com

ペリフェラルバイスの検索を行うためにはFコマンドを実行します。以下のように結果が表示されます。

F
62CEEEEE4D99,1,,,-4E
579E9EEEE4DB,0,,11111101C75C5666666A678911111111,-52
E6E4B1DA83BC,1,,,-14
FEA458B80011,1,,,-43

データは「,」区切りのデータとして出力れます。先頭がデバイスのUUIDとなります。また、2つ目はアドレスの種類を表します。接続のために必要になるためこの2つを控えておきます。一番最後がRSSI(電波強度)となります。目的のデバイスをRN4020に最も近づけておき、一番値が大きい(ここでは-14)デバイスを探すとわかりやすいです。今回は「E6E4B1DA83BC,1」を値として記録しておきます。

目的のデバイスが見つかったらXコマンドを使いスキャンを停止します。

3. デバイスへの接続 

目的のデバイスが見つかったらEコマンドを使い接続します。デバイスの検索で記録した「E6E4B1DA83BC,1」を使い接続します。

E,1,E6E4B1DA83BC
AOK
Connected
ConnParam:0028,0004,0190

バイス検索時とは逆に入力します。接続を切断する場合はKを実行します。

K
Connection End

4. キャラクタリスティックの操作

サービス又はキャラクタリスティックの検索はペリフェラルとして利用するのと同様LS又はLCを利用します。ペリフェラルとして利用するときは自身に設定されたサービスとキャラクタリスティックを表示していましたが、セントラルとして動作する場合は接続先デバイスのサービスとキャラクタリスティックを表示します。  今回の場合は以下のように表示されます。

LC
180A
  2A29,000E,02
  2A24,0010,02
  2A25,0012,02
  2A27,0014,02
  2A26,0016,02
0C4C3000770046F4AA96D5E974E32A54
  0C4C3001770046F4AA96D5E974E32A54,0019,02
  0C4C3001770046F4AA96D5E974E32A54,001A,10
  0C4C3002770046F4AA96D5E974E32A54,001C,02
  0C4C3003770046F4AA96D5E974E32A54,001E,0A
  0C4C3004770046F4AA96D5E974E32A54,0020,02
  0C4C3005770046F4AA96D5E974E32A54,0022,02
  0C4C3006770046F4AA96D5E974E32A54,0024,02
  0C4C3006770046F4AA96D5E974E32A54,0025,10
END

WxBeacon2の場合は 0C4C3001770046F4AA96D5E974E32A54,0019,02センサデータを読み出すことができます。先頭からUUID,HandleID,パーミッション(0x02はRead)となっています。このキャラクタリスティックに対してCHRコマンドでデータを読み出します。UUIDではなく、HandleIDを使うことに注意してください。

CHR, 0019
R,038C081D14070002007127420D7D1A5907650B.

対象のデータが取れました。これをデコードすることでWxBeacon2のセンサ情報を取得できます。Arduinoなどのマイコンを使うことで簡単にBLEセントラルデバイスを構築できそうです。