RN4020のBLEモジュールをいじってみます(基本編)

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


 RN4020はマイクロチップ社のBluetooth Low Energy(BLE)通信モジュールです。
UART(シリアル通信)で接続したターミナルエミュレーターやマイコン等からコマンドを送る事により、
簡単にBLE通信が出来る(簡単にBLEデバイスが作れる)と言う品物です。

 RN4020は、Bluetooth SIG(Special Interest Group)が承認済みの13のパブリックプロファイルと
17のパブリックサービスをサポートしていて、ユーザのプライベートプロファイも定義可能です。
更に、セントラルとペリフェラル何方かのロール(デバイス)として動作させる事が出来ます。
又、2つのRN4020間でシリアルデータ通信が可能な、MLDP(Microchip Low-energy Data Profile)を
サポートしております。(1個しかないので今回未実験)
・RN4020 Bluetooth Low Energy モジュール 仕様書はこちら(日本語)を参照下さい。
・RN4020 Bluetooth Low Energy モジュールユーザガイドはこちら(日本語)を参照下さい。

RN4020 BLE モジュール 私が購入した物は、秋月通商のこちらです。
これはRN4020をXBeeピッチ基板に変換した物で、
XBee USBインターフェースボードキットに乗せた
写真です、以降の実験はこの組合わせで行います。

尚、XBeeピッチ基板ではPIO7(19)ピンは配線無し。
又、JP1/JP2のジャンパーピンは別途ピンヘッダを
半田付けする必要が有ります。

RN4020-BLE通信モジュールのピン配列は、秋月通商の取扱説明書を見ましょう。
注意は、USBインターフェースボードの外部電源には接続しない事だと思います。

主なコマンド一覧、その他はユーザガイドを参照しましょう。
記述)コマンド、パラメータ・・・
 例)SHW,000F,63   // 基本は16進入力で0xは付けない、又、スペースは開けない

コマンド パラメータ 内 容
システム
  エコー、タイプした文字が全て出力にエコーバックします。
V   ファームウェアのバージョン
例)MCHP BTLE v1.33.4 BEC 11/24/2015
D   デバイスの状態表示
例)
BTA=6827190AF0A9    // アドレス
Name=RNF0A9
Connected=no
Bonded=no
Server Service=80000000 // SS:サポートするサービス
Features=00000000    // SR:デバイスの機能
TxPower=4
SF 基本設定を工場出荷時に戻す(初期化)
デバイス名、デバイス情報、スクリプト、プライベート サービス等は残ります。
  全設定を工場出荷時に戻す
R 再起動、モジュールを再起動すると、変更した設定内容が全て有効になります。
ロール
SR 0x80000000 セントラル
  0x00000000 ペリフェラル
  0x20000000 デバイスはパワーサイクル・再起動・切断後にアドバタイズを自動で開始します。
('A'コマンドは必要なし、実行すると"ERR"です)
N xxxx ブロードキャスタ
xxxx:25バイト以下の16 進数値でアドバタイズ内容を設定する為に使います。
J X オブザーバロールを開始又は終了します。
x:開始=1 終了=0
アドバタイズ
A xxx,yyy アドバタイズを手動で開始(接続待ち)
xxx:アドバタイズ間隔ms(既定値は100ms)
yyy:全体のアドバタイズ期間ms(既定値は無期限)
Y   アドバタイズを停止します。
接続
K   リンクを切断する為に使います。
F xxx,yyy セントラル又はオブザーバロールのデバイスのみで、スキャンを開始します。
xxx:スキャン間隔ms(既定値は375ms)
yyy:スキャン時間ms(既定値は250ms)
ペリフェラルデバイスを問い合わせる為に使います。
オブザーバロール時、これはブロードキャストメッセージの受信に使います。
E X,aaaa セントラルが、ペリフェラル デバイスとの接続確立のプロセスを開始します。
x:アドレスタイプ、パブリックアドレスの場合=0、
  ランダムアドレスの場合=1です。
aaaa:6 バイトのMAC アドレス
ST(T) xxx,yyy,zzz 次回以降の接続に使う初期接続パラメータ(16進数の16ビット値)を設定します。
xxx:interval、接続した2 つのデバイス間の通信の時間間隔(単位:1.25ms)
      0x0006 〜 0x0C80 (規定値:0006:7.5ms)
yyy:latency、ペリフェラルがセントラルと通信しないイベントの連続回数
      0x0000〜0x01F3(規定値:0回) (timeout * 10 /interval * 1.25 - 1)回以下
zzz:timeout、応答ない場合に接続が失われたと判断する最大時間(単位:10ms)
      0x000A 〜 0x0C80  (規定値:0064:640ms)
デバイス情報プロファイルの設定
SS 0xbbbbbbbb デバイスがサーバロールでサポートするサービスを設定(32 ビットのビットパターン)します。例えば、"SS,40000000"ならバッテリーサービス
既存値は"80000000"のデバイス情報サービスです。
パブリック サービス
LS   サーバ側サービスとそのキャラクタリスティックをリスト表示します。
出力例)
180F       // プライマリ サービスUUID
2A19,001A,02   // キャラクタリスティックUUID、ハンドル、プロパティ値
2A19,001B,10     // キャラクタリスティックUUID、ハンドル、プロパティ値
LC   クライアント側サービスとそのキャラクタリスティックをリスト表示します。
CHR xxxx ハンドルでアドレス指定してペリフェラル デバイスからキャラクタリスティックの内容を読み出します(セントラルread)。
xxxx:ハンドルで16ビット16進数値
CHW xxxx,yyyy ハンドルでアドレス指定してペリフェラル デバイスのキャラクタリスティックへ内容を書き込みます(セントラルwrite)。
xxxx:ハンドルで16ビット16進数値
yyyy:キャラクタリスティックに書き込む内容
CURC
(CURV)
xxxx UUID でアドレス指定してペリフェラル デバイスからキャラクタリスティックの内容を読み出します(セントラルread)。
CURCはノーティフィケーション又は、インディケーションのキャラクタリスティックのみです。CURCは設定値読み出し、CURVは値データ読み出し。
xxxx:UUIDで16ビット16進数値又は128 ビット
CUWC
(CUWV)
xxxx,yyy UUIDでアドレス指定してペリフェラル デバイスのキャラクタリスティックへ内容を書き込みます(セントラルwrite)。
CUWCは設定値書き込み、CUWVは値データ書き込み
xxxx:UUIDで16ビット16進数値又は128 ビット
yyy :キャラクタリスティックに書き込む内容(CUWV)
        0=ノーティフィケーション又は、インディケーションを終了(CUWC)
        1=ノーティフィケーション又は、インディケーションを開始(CUWC)
SHR xxxx ハンドルでアドレス指定してサーバ サービスのキャラクタリスティックの内容を読み出します(ペリフェラルread)。
xxxx:ハンドルで16ビット16進数値
SHW xxxx,yyyy ハンドルでアドレス指定してサーバ サービスのキャラクタリスティックの内容を書込みます(ペリフェラルwrite)。セントラル側で"read"と"notify"読出し可能。
xxxx:ハンドルで16ビット16進数値
yyyy:キャラクタリスティックに書き込む内容
SUR xxxx UUIDでアドレス指定してサーバ サービスのキャラクタリスティックの内容を読み出します(ペリフェラルread)。
xxxx:UUIDで16ビット16進数値又は128 ビット
SUW xxxx,yyyy UUIDでアドレス指定してサーバ サービスのキャラクタリスティックの内容を書込みます(ペリフェラルwrite)。セントラル側で"read"と"notify"読出し可能。
xxxx:UUIDで16ビット16進数値又は128 ビット
yyyy:キャラクタリスティックに書き込む内容
アナログI/O
@O X,yyy アナログポート出力電圧を設定します。
x :0、1、2 のいずれかでアナログポート番号を指定
yyy:出力電圧をmv単位で設定、レンジは0x0000(0V)〜0x0514(1.3V)です。
@I xxx 入力電圧を取得します(0V - 1.3V)。
デジタルI/O
  |O xxx,yyy デジタルI/O ピン(PIO1-PIO6) の出力を設定します。
xxx:使用するピンのビットパターンを指定
   01 PIO1  (モジュールのLEDと配線され起動時点灯、"01"出力で消灯)
         (デバイスと接続されると消灯、外付けLEDは"01"出力で点灯)
   02 PIO2 
   04 PIO3  (起動時にHIGH出力)
   08 PIO7  (未配線)
   10 PIO6 
   20 PIO5 
   ?? PIO4 (動作不可?、スクリプト時のピンイベントで使用するようだ)
yyy:HIGHを出力するビットパターンを指定
   例)GPIO3、GPI01を出力する場合、|O,05,05です。
 |I  xxx 入力を取得します。
得られる値はピンのビットパターンです、"1"のパターンがHIGHです。
xxx:入力するピンのビットパターンを指定
      例)GP06を入力する場合、|I,10とする、HIGIであれば"10"が返されます。
なぜかぁ、PIO1は読み出しが常に"01"の様な気がするがぁ...(このピンは
使わない方が良いかも?)

《PCと接続》

@ XBee USBインターフェースボードキットをUSBケーブルでPCと接続します。
A ターミナルエミュレーター(TeraTermで説明)を起動させます。
  ア) 接続画面で"シリアル"を選び、通信ポートを選びます(ここでは"COM7"、各々異なりますよ)。
  イ) [OK]をクリックします。
B メニューバーより[設定]->[シリアルポート]を順番に選択し、設定画面からボーレートの"115200"を
  選び、[OK]をクリックします。
C メニューバーより[設定]->[端末]を順番に選択し、設定画面で"ローカルエコー"をチェックして、
  改行コードの送信を"CR+LF"に設定したら[OK]をクリックします。
  ('+’コマンドでエコーバック可能ですが、この設定の方が見やすいです)
D 動作確認でファームウェアのバージョンを表示して見ます。
  'V’コマンドを入力し、[ENTER]キーを押します。

TeraTerm(Vコマンド)
こんな感じぃ
おめでとう、(゚∀゚ノノ" 動作しました。




[ページ上へ] [ペリフェラル編へ]


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