BLE-STICK補足説明書
型番：BLE-STICK

REV.1.00

BLE-STICKのピン配置と機能

RN-4020搭載
Bluetooth Low Energy(BLE)スティックボード(C)2016

RN-4020モジュール(トレースパターン型アンテナ)

マイクロテクニカ

補足説明書
本マニュアルは、BLE-STICKの補足マニュアルです。本製品は、マイク

WAKE及びMLDP設定パッド

ロチップ社製BLEモジュール、RN-4020を使っており各種コマンドなどの使い方はRN-4020に準じます。RN-4020のデータシートも併せ

動作確認用LEDてご参照ください。
インターフェイスパッド■インターフェイスパッド※上図左から順に

番号

ピン名

1

GND

電源GND

機

能

2
3

3V3
RTS

3.3V電源UART RTS信号

4

CTS

UART

CTS信号

5
6

TX
RX

UART
UART

TXデータ （送信データ）
RXデータ （受信データ）

UART信号のロジック電圧レベルは、0V-3.3Vです。
※5V系の回路とは直結できません。レベル変換が必要です。
UART信号のデフォルト設定は下記の通りです。
・通信速度:

115200bps

BLE-STICKは、マイクロチップ社製のBluetooth(R) Low Energy(B・データビット:・パリティ:

8なしLE)モジュールのRN-4020を使いやすいスティックにしたモジュールです。

・ストップビット：・フロー制御：1なし

BLE-STICKについて（RTS、CTSピンは使いません→開放）

BLE通信を非同期式シリアル通信(UART)で行うことができます。シ
リアルコマンドだけで動作します。本モジュールは、RN-4020をシリア
ルコマンドを使うときに必要なピンのみを使いやすい2.54mmピッチに

電源は3.3Vです。電流はスリープ時は約5.5uA程度、ウェイクしてアドバタイジング時が3.5mA程度、接続後は約4.8mA程度になります。

して取り出せます。

20mA程度は流れる電源をご用意ください。

電源は+3.3Vです。WAKEピンやMLDP(※)を使うためのピンもジャンパーピンが取り付けられるように設計されていますので、外部回路を■動作確認用LED

最低限にすることができます。
その他、ウェイクアップ中を知らせるLED(青)と、BLEでコネクション
したことを知らせるLED(赤)が実装されているため、動作状況の視認が

表示名

内 容
RN-4020モジュールがウェイクしていることを示しま

簡単です。

WAKE

す。WAKEが点灯している時のみモジュールは使用できます。WAKEピンをジャンパーすることで点灯します。
他のBLEデバイとと接続された時に点灯します。

RN-4020は日本国内で使用できる技術基準適合認証（工事設計認CONN証）を取得済みです。その他、FCC, IC, CE, QDIDの認証も取得しています。

接続が切断されると消灯します。
接続確認に使えます。

※輝度が高いLEDを使用していますので、直視しないようご注意ください。

※技術基準適合証明番号：201-140392※RN-4020については、マイクロチップ社からリリースされている日
本語データシートも併せてご参照ください。

1

■WAKE及びMLDP設定パッドに「セントラル側」はパソコンやスマートフォンになります．

RN-4020をウェイクさせるWAKEピンと、RN-4020同士を接続し一方で，データを送るセンサー側，例えば温度センサーや加速度センサてあたかも有線で接続されているかのように透過的なシリアル通信が可能なMLDPモード(Microchip Low-energy Data Profile)に移行するーなどは「ペリフェラル側」になります．

MLDPピンが簡単にジャンパー設定できるパッドです。

【GATTの仕組み】

当方出荷時には何も接続されていませんが、2.54mmピッチのヘッダピンを実装したり、外部のマイコン等と接続する場合に使用できます。

ところで，このようにデバイス間で通信をする場合，相互のデータは互換性が確保されていなければなりません．そうでないと，片方のデータ

パッドの片側は3.3Vに接続されており、ジャンパーソケットでジャンパ
ーすれば、プルアップできます。

が読めなくなったりして，通信が成り立たなくなるからです．そのたのBL
Eのすべてのサービスは，GATT(Generic ATTribute Profile)に基づいて作成されています． そして，GATTはさらにその中にある，キャラクタリス
ティックと呼ばれる属性へのアクセス方法を定義しています．

上側2つは3.3Vです。
Device Information
Service

Battery Service

Characteristic
Characteristic
Characteristic
Characteristic

表示名

内

容

RN-4020のWAKE_SWピンと接続されています。
W

CMD

では実際のデータのやりとりはというと，このキャラクタリスティック

3.3Vと接続してHighにするとディープスリープから復帰します。ウェイクすると"WAKE"LEDが点灯します。

に対して値を書いたり，その値を読んだりすることで行われます．
「データを送信する」という従来のBluetooth通信の感覚より，「キャラクMLDP機能を有効にします。

タリスティックにデータを書き込む」→「その結果データが送信される」

3.3Vと接続してHighにするとMLDP機能が有効になります。使用しない場合にはオープンにします。

という感じになります．
どんなサービスがあって，その中にどんなキャラクタリスティックがあるかということについては，あらかじめBluetooth SIGによって標準的なものが定義されています．また，互換性について問わなければユーザ

Bluetooth Low Energyについて

ーが独自に定義を作ることもできます．
■BLEとは？
【ノティファイで通知を受け取る】

Bluetooth Low Energy(BLEと記載)は，その名の通り低消費電力

なお，このキャラクタリスティックが書き換えられて，値が変更されたを実現しながらBluetooth通信を行うための新しい規格です．従来からあるBluetooth Ver.1.1/1.2/2.0/3.0とは互換性がなく，新しい規格として作られました．Ver4.0となっています．

時にその通知を受け取れる仕組みをノティファイ(Notify)と呼びます．データが変化するかを常に監視しておくのでは省電力なプログラムを作

Bluetooth Smartというロゴが着いた物は，BLEのみの使用が可能で従来のBluetooth機器との通信はできません．しかし，Bluetooth Smart

りにくくなります．BLEはとにかく，省電力を意識しており，変化があった時にだけ，ちょこっと必要最小限のデータをやりとりして通信を終え，ノReadyというロゴの付いたものはBLEによる省電力通信と共に，従来のBluetooth機器との接続も可能になっています．

ティファイによって「変化がありましたよ」ということを通知することでB

さて，BLEとは何か，単に消費電力が小さいだけというわけではありません．スマートフォンをターゲットに据えている点が大きな特長です．A【UUIDでサービスやキャラクタリスティックを識別する】

LEモジュールもそれをコントロールするマイコンも省電力で使える，という仕組みになっているのです．

ndroid端末もiOSの端末もBLEを搭載しているものがほとんどで，連携GATTでは色々なサービスがあり，さらに複数のキャラクタリスティッ
クがあることを解説しました．これらを識別するには，UUIDという値をした機器を作りやすいという特長があります．
また1対1の通信だけでなく，複数の端末にブロードキャストして一斉使います．UUIDは，Universally Unique IDentifierの略で，16バイトの値です．しかし16バイトはデータとして長く，省電力化という意味でも相応

配信するようなこともできます．

しくないので，実際には短縮した2バイト版や4バイト版を使います．なお

BLEはあまり大量のデータを，高速で伝送するような使い方には不向きです．一方でセンサーから取得したデータを一定間隔で，速度がそこれはどういうことかと言うと，れほど要求されないような環境で長時間運用するような目的にはぴったりです．「近距離」で「通信速度は遅く」「通信距離が短く」てもよいがxxxxxxxx-0000-1000-00805F9B34FB「消費電力をなるべく小さく」した機器を作りたいというような用途にとなっている16バイトのUUIDのxxxxxxxxの部分だけを取ったものとい使うのがBLEです．

うことです．xxxxxxxxは4バイト版の時，2バイト版の時は，0000xxxxとな■BLEの最も基礎的な知識と通信手順

ります．なお，なぜわざわざ16バイトのUUIDを紹介するのかというと，4バイト版や2バイト版はBluetooth SIGであらかじめ定義されたものを【セントラルとペリフェラル】

使う場合のみ使えるためです．SIGで定義されていないオリジナルのUUI
Dを作る場合には，必ず16バイトのUUIDを使わなければいけないことになっています．この16バイトのUUIDは，UUID generatorという公開さBLEでは通信する際の役割分担が明確になっています．一方は「セントラル」，もう片方は「ペリフェラル」です．

れているツールで生成することができます．

セントラルは，名前の通りで中央側です．ペリフェラルは周辺側です．こ※この辺りのことは実際の通信プログラムを作ることで理解が早まりの辺りは，USBのホスト機器とクライアント機器の関係に似ています．主ます．
2

【BLEの通信手順】
では実際の通信手順を見てみましょう．BLEで大切なのは通信の開始は「ペリフェラル側」からという点です．手順は一般的に次のようにな

クライアントとサーバー

ります．

BLEでは「セントラル」「ペリフェラル」という用語が出てきますが，同①アドバタイズ（ペリフェラル→セントラル）

時に「クライアント」「サーバー」という用語も出てきます．
混同しそうですのでここでまとめておきます．

最初の一歩．まずペリフェラル側は自機の存在をセントラルに知ってもらうためデータを定期的に送信し続けます．この動作をアドバタイジ

これらの用語を理解するには，BLEのプロトコルスタックを見ると早ングと言います．このデータは31バイトと決まっていて，サービスの種類

そうです．

やタイムアウト時間などが含まれます．31バイトに達しない場合には0x00で埋めます．またこのデータのことをペイロードと呼んでいます．
②検出（セントラル）①の結果，セントラルはペリフェラルの存在を知り，検出します．
③アドバタイジングの終了（ペリフェラル）
自機の存在をセントラル側に知ってもらったため，ペリフェラルはアドバタイジングを終了します．
④ペリフェラルの調査（セントラル→ペリフェラル）

出典:http://www.mdpi.com/

セントラル側はペリフェラルがどのような通信をするデバイスなのかを調査します．

上図はBLEのプロトコルスタックです．ここで注目なのは，上位層のG
APとGATTです．

⑤プロファイル情報の送信（ペリフェラル→セントラル）
調査されるペリフェラルは，自機がどんなサービスを持つデバイスな

GAPは，BLEが通信をする時のアドバタイジングや接続を制御するプのを示すプロファイル情報をセントラル側に送ります．さらにサービス
情報と共にデータを含めます．サービスに関わる情報をデータとして含ロトコルです．ポイントはアドバタイジング．

めておくことで，「ペリフェラルはどんなサービスを，どのようなデータでこの周辺BLEから送信されるアドバタイジングを検知して接続を開セントラルに送る装置なのか」ということを定義します．
実はこのプロファイルは自由に決めることができるのですが，そうし始し，そのBLE機器をネットワークに加えるかどうかの判定をするのが，「セントラル」．ペリフェラルは，このアドバタイジングパケットを周た場合，勝手に決めたプロファイルでは他の機器との接続性が確保さ囲に送信する側が「ペリフェラル」です．

れません．よってプロファイルはBluetooth規格によって定められた物の中から使用することが望ましいと言えます．

なおアドバタイジングは，日本語で広告という意味です．広告=宣伝を⑥データ要求（セントラル→ペリフェラル）

出す側がペリフェラル．ペリフェラルはセントラルに，自機を宣伝しセントラルがペリフェラルに接続できるようにしているのです．

セントラル側がペリフェラル側にデータを送るよう要求します．
データは，どんなデータでもいいわけではなく，⑤のプロファイルにあるデータを送ります．

一方「クライアント」や「サーバー」という位置関係はGATT上での話です．GATTは機器が提供するサービスとキャラクタリスティックを決めるものです．ここで登場するのが，クライアントとサーバー．

⑦データ送信（ペリフェラル→セントラル）
セントラルの要求に従い，ペリフェラルはデータを送ります．

クライアントは，GATTにおいてサービスを利用するデバイス．サーバ
ーはサービスを提供するデバイスです．

なおここで大切なことは，その送信するデータがどんな種類のデータなのか，ということを識別するための番号があらかじめ決められていると

通常この2つの関係だと，GAPの「ペリフェラル」が GATTの「サーバいう点です．この番号のことをUUID(ユニバーサル固有識別番号)といー」になり，GAPの「セントラル」が GATTの「クライアント」になりまい，Bluetooth規格の中で「このデータはこの番号！」というように決められています．通常は16ビット長です．

す．例えば，スマホとBLE-STICKの関係を見たとき，この辺りが従来のBluetoothをシリアル通信でそのまま伝送するSPPと違い，ちょっとBLEを分かりにくくしている部分です．
⑧接続の切断（セントラル）
データを受信し終わると，セントラル側が接続を切ります．これで一連の流れは終了です．

GAP→ペリフェラル側
GATT→サーバー側
GAP→セントラル側
GATT→クライアント側

なお，①～⑧のような手順を踏むことが一般的ですが，BLEにはビーコンという使い方があります．ビーコンは先の手順①だけを繰り返して実行するもので，ペリフェラルが一方的にアドバタイジングをするだけの使い方をします．アドバタイジングにデータを入れておき，それを一方

このような関係になっていることが多いです．
ただし，これは決定事項ではなくその逆になることもあります．

的に配信するというものです．よってセントラルとペリフェラルは接続されることはありません．ちょっとテレビのリモコンにも似ています．
3

RN-4020を使ってみる

当方で販売している30R700と接続する場合には、メスーメスジャン～基礎編～

パーケーブルで接続すると便利です。
いますので本書ではとにかくRN-4020を使って通信をしてみてその使30R700側のロジック電圧レベル設定ピン(JP2)は「VIO-3.3」側にジャンパーソケットをセットしてロジック電圧レベルを0V-3.3Vにしてい方やBLEの特徴を理解してみましょう。

ください。本モジュールの電源電圧は3.3Vです。30R700の電源給電

BLE規格については，大量に書籍が出版され分かりやすく解説されてピンは3V3ピンをご使用ください。(5Vピンは使用しません)
フロー制御しない場合には、RTS/CTSのピンはオープンでかまいま

本書ではBLE-STICKに搭載のRN-4020とスマートフォン間で通信せん。

をしてみます．Bluetooth SIGで定義されているサービスを使う方法と独自サービスを定義して通信する方法を解説しています。
またBLE-STICK同士で通信する方法も紹介します。
BLE-STICKに搭載のRN-4020については，メーカーのマイクロチッ
プ社から日本語マニュアルがリリースされていますので併せてお読みく
ださい。
コマンドは色々なものが用意されていますが，本書ではよく使う代表的なものをご紹介しています。
シリアル通信にあたり，次のように配線を行います．ここではBLE-ST
ICKとパソコンをRS232Cで接続しパソコンのシリアルターミナルから
各種コマンドを送信して制御します。当方ではBLE-STICKを簡単に接続できるUSB-UART変換アダプタ(型式33R700)をご用意しております。ピン配置がセットになっているため、フラットケーブル等で接続すればすぐに利用可能です。電源もUSBバスパワーから3.3Vを作っていますので、BLE-STICK側に給電できます。ぜひご検討ください。
33R700本体■ジャンパーピンのセット
RN-4020を使用するには、本体をウェイクアップさせておく必要があります。BLE-STICK基板上の"W"ジャンパーをショートするとRN-4
020はウェイクアップします。

BLE-STICKに接続■モジュールの配線
BLE-STICKを使うための基本的な配線をします。
配線は+3.3Vの電源とUART信号線のTX及びRX線です。CTS及びRTSのフロー制御ピンは、デフォルト設定では使用しませんのでオープンにしておきます。
UART信号線はBLE-STICKを制御するUARTホスト機器がパソコン
か、マイコンかによって変わります。下図はマイコンと接続した場合の一例です．

ウェイクアップで点灯します
ショートでウェイクアップ
RN-4020がディープスリープからウェイクアップして使用可能にな
ると、"WAKE"LEDが点灯します。
※配線や電源の接続には必ず日本語データシートを参照して確認をお願い致します．誤った配線は本体の故障につながります．

マイコン側のロジック電圧レベルは0V-3.3Vとします。(+5Vは印加
しないでください。5V系回路と接続する場合には電圧レベル変換をしてください。)

4

■通信設定

ここでは，Batteryサービスをサポートすることにします．

BLE-STICKに搭載のRN-4020のUART側通信設定は下記の通りです。
・通信速度:

115200bps

Batteryサービスは，バッテリーの値を通信するためのサービスです
が，必ずバッテリーのためだけに使わなければいけないということ

・データビット:

8ではなく，「バッテリーの値通知に適している」というだけです．

・パリティ:
・ストップビット：なし
1"SS,40000000"を送信します．値をいくつにしたらよいかについて・フロー制御：なし（デフォルト設定）

は，RN-4020データシートのSSコマンドページに記載があります．

■通信の決まり事

正しく完了すると，"AOK"が返ります．

①シリアルコマンドは必ずキャリッジリターン(0Dh)で終端します．CRが4 続いてRN-4020の「立場」を設定します．

ないと，RN-4020はコマンドの最後であると認識しないため，いつまでここでは，RN-4020はペリフェラルに設定します．BLEにおいてペリもコマンドが実行されません。必ずコマンドはCRで終端するようにします。RN-4020からの戻り値はCRとLF(0Ah)で終端されています。

フェラルは，①定期的にアドバタイズを行い，②セントラルによるキャラクタリスティックの操作を受け付ける，デバイスです．

②RN-4020は処理が正しく完了した場合などに，ACKを返します．この"SR,00000000"を送信します．

ACKは，"AOK"という3バイトの文字列です。
正しく完了すると，"AOK"が返ります．
■Battery Serviceで通信してみる
5 ここまでの設定を有効にするため，一度RN-4020を再起動します．
※コマンドや，UARTで送信する文字列は，"(ダブルクォーテーション)で囲んで記載しています。

再起動は"R,1"コマンドで行います．
再起動が完了すると"CMD"という文字列が返りますので，この文字列を必ず待ってから次のコマンドを発行します．

※記載しているコマンドにはキャリッジリターンは記載していませんが，実際はCRで終端してください。

6 続いてRN-4020がサーバーの役割として，サポートしている現在の※コマンド中の,(カンマ)は，2Chです。

サービス及びキャラクタリスティックをリスト表示させます．
表示には"LS"コマンドを使います．

1 "+"コマンド(2Bh)をUARTホストから送信してエコーを有効にしてみます．エコーを有効にすると，RN-4020は受信したデータをそのLSコマンドの1行目はプライマリサービスUUID，2行目は先頭に2つのスペース(20h)があり，続いてキャラクタリスティックUUID，ハンドままエコーバックします．

ル，ハンドル値を示す"V"又は設定のハンドルであることを示す"C"

正しくコマンドが実行されると，"Echo On"という文字列が返ります．
通信状態をオシロスコープで観察した図は下記の通りです．

が続きます．
LSコマンドを送信してみましょう．現在の設定の場合，次のように表示されるはずです．
180F
2A19,000B,V
2A19,000C,C
END

1行目の180Fhは，Battery ServiceのUUIDです．
なお，サービスUUIDの一覧は下記からご覧いただけます．

https://developer.bluetooth.org/gatt/services/Pages/
ServicesHome.aspx

マイコンやパソコン等から，2Bhと0Dhの2バイトをBLE-STICKに送信しても戻り値がない場合には，正しくBLE-STICKのRXピンに，データが入力されているかオシロスコープやロジックアナライザで確認してください．

次の行の，2A19hはBattery LevelのUUIDです．

基本的にデータの入出力状態は，実際にオシロスコープで波形としこの行の最後は"V"となっていますので，000Bhは値を示すハンドルということです．

て観察しない限り正しいかどうかを判断することはできません．
期待通りの動作をしない場合には必ずオシロスコープで波形を観ハンドルとは，クライアント側がサーバー側の個々のデータにアクセスする時，このハンドル値を指定します．
UUIDは必ずハンドルを持っていることを覚えておいてください．

察するようにしてください．
2 続いて本体を工場出荷時の状態に一度リセットします．

次の行は，同じUUIDで最後が"C"となっています．Cは設定のハンドルであることを示しています．

"SF,1"を送信します．正しく完了すると，"AOK"が返ります．
3 続いてモジュールがどのサービスをサポートするかを指定します．R

ここで得られたリスト情報は実際の通信でデータをやりとりする際

N-4020では18個のサービスがあります．
5

に必要となりますので記録しておきます．

10 プロパティを見てみましょう．

マイコン等で制御している場合には，この戻り値をメモリーに保存す"Read"と"Notify"となっています．これは，この端末が使えるのはこのるなどして利用することになります．

2つであることを意味しています．
すなわち，スマホ側(クライアント側)は，Battery Levelの値は読み出

7 では実際の通信を行ってみましょう．BLE通信ができるスマホやタす(Read)だけで，変更(Write)できないことがわかります．

ブレットをご用意ください．なお，通信はiOSでも可能ですが，本書では，Android OSを搭載した端末での例を紹介します．

"Battery Level"をタップすると画面下に値が表示される部分が表

Android OSではPlayストアから多種多様なBLEツールが配布され示されます．試しに，"READ"ボタンをタップしてみてください．
値が表示されます．

ています．ここでは，"B-BLE(BLE4.0 Scan)"(BillyLeung配布)を使

下図の例だと，現在の値は00hとなっています．

用した例を紹介します．
※本書ではこのソフトのことを「BLEターミナル」と記載します．
最初に本モジュールを見つけてもらうために，本モジュールはアドバタイズを開始する必要があります．
"A"コマンドを送信すると，アドバタイズを開始します．
Aコマンド送信後，"AOK"が返ることを確認してください．
なお引数を指定しない場合，100ms間隔で無期限にアドバタイズを行います．
8 BLEターミナルを起動しすると，本機が発見されます．
発見されない場合には，BLEターミナルの"SCAN"をタップしてスキャンしてください．

この値を変えてみましょう．
11 BLE-STICK側で"SUW"コマンドを使ってキャラクタリスティックの値を書き込みます．キャラクタリスティックの値を書き込むということは，値が変更されるということです．
"SUW,2A19,0A"

を発行してみましょう．

発見されたデバイスをタップして接続します．
※表示されるデバイス名は上記と異なることがあります。

発行後，"AOK"が返ればOKです．
SUWコマンドは，UUIDでアドレスを指定して，ローカルデバイスへサーバーサービスのキャラクタリスティックの内容を書き込むコマン

9 コネクトできると下記のような文字列が返ります．

ドです．
2A19hは，Battery LevelのUUIDでしたので，これを指定しました．

Connected

0Ahは書き込む値です．
BLEターミナルでは，サポートされているサービスが表示されます．
ここでは，"Battery Service"をタップします．"BATTERY SERVICE"

12 再度，BLEターミナルの"READ"ボタンをタップしてみましょう．

のUUIDは，180Fhとなっていることがわかります．

HEXの値が0Ahになっていることが確認できます．

続いて，"Battery Level"をタップします．
UUIDが2A19hとなっていることがわかります．

なお，現在の設定では，Notufy(通知)が無効なので，値が更新されても，通知されず表示は自動的に更新されません．
そこで，BLEターミナルの"NOTIFY"をタップして通知を有効にしてみましょう．

6

RN-4020を使ってみる
タップすると，BLE-STICK側では，"WC,000C,0100"～基礎編2～が返ります．
この意味は，「ハンドル000Chに2バイトの値，0001hを書き込んだ」スターしているものとして解説しています．基礎編2では，既存のサービということになります．0001hはリトルエンディアン表記で，0100とスではなく，独自サービスを使って自由度の高い通信をしてみます．

基礎編1を完了して，ある程度BLE-STICKの使い方やコマンドをマなっているだけです．
独自サービスでは，SSコマンドでBluetooth SIGで定められた値を設
ハンドル000Chとは何か，というと手順6で実行したLSコマンドで示されています．LSコマンドでは，「2A19,000C,C」という戻り値が定せず00000001を指定することになります．次の手順でBLE-STICKの設定を始めましょう．

ありました．これは，「Battery LevelキャラクタリスティックUUIDの2

スマホ側は別のターミナルを使うことにします．Playストアから"BLE
Reader"で検索すると翁柏杰氏が公開しているアプリがあるのでインA19hの，設定ハンドル(C)は，000Chである」という内容でした．

ストールします．
13 再度SUWコマンドで値を書き込んでみます．
"SUW,2A19,63"を発行してみましょう．

今度は，BLE-STICK側でSUWコマンドが実行されると，すぐに表示の値が更新されることがわかります．
※更新された値は"NOTIFY VALUES"の下に順番に表示されてい通信の内容としては2つのキャラクタリスティックを作り，1つは10文字のASCIIデータ(10バイトのデータ)を通信し，もう1つは単純に2バイ

きます。

トの読み書きだけができるキャラクタリスティックとします．

14 なお，UUIDではなくハンドルでアドレスを指定して，キャラクタリステ

1 "+"コマンドでエコーをONにします．

ィックに値を書き込むコマンドもあります．
それがSHWコマンドです．
ハンドルとキャラクタリスティックUUIDの関係は，手順6で実行した

SF,1 で本体をリセットします．

LSコマンドで把握できます．手順6のLSコマンドでの戻り値は下記の通りでした．

2 独自サービスを実行するため，"SS,00000001"を送信します．

180F

3 BLE-STICKの機能をSRコマンドで設定します．

2A19,000B,V

基礎編1ではAコマンドでアドバタイズを開始しましたが，ここでは2A19,000C,C
END

再起動，切断後にアドバタイズを開始する設定にします．
また既にボンディング(セキュアにリンクしたペアリング)済みであっこのことから，ハンドルは000Bhであることがわかります．

ても不特定多数にアドバタイズをするように設定します．

SHW,000B,00

SR,24000000

を発行してみてください．

BLEターミナルで，値が0になることが確認できます．

4 ここで一度，独自サービスとそれに付随する独自キャラクタリスティ
ックの全設定をクリアします．クリアはPZコマンドで行います．

これで，ひとまずBLEによる通信を体験しました．最も簡単なBattery

PZ実行後、R,1で再起動してください。

Serviceを使った例で概要がわかったところで，独自サービスを使ってもう少し自由度の高い通信を体験してみましょう．

PZ
R,1
5 独自サービスを使うためには，開発者が自らサービスのUUIDを決めることになります．設定はPSコマンドで行いますが，UUIDはどのよ
うに決めたらよいでしょうか．
UUIDは128ビットの値です．この値は自由に決めることができます
が，値が重複した場合，競合が発生して通信ができなくなります．よって，ユニバーサルサービス(予めBluetooth SIGが定めているサービス)以外を使う場合には，一意のUUIDが望まれます．インターネットには便利なツールがあり，時刻や使用しているパソコンのMACアド
レスからUUIDを生成してくれるサービスがあります．今回はこれを利用してみましょう．
下記のサイトを表示します．

https://www.uuidgenerator.net/
7

サイトの「Version 1 UUID Generator」を使います．

10 では早速，キャラクタリスティックに値を書き込んでそれが反映さ

今回は，独自サービスに1つのUUID，独自キャラクタリスティックに2れ，さらにスマホ側で通知されることを確認してみましょう．

つのUUID，合計3つのUUIDを使います．「How Many?」のボックスに3 と入力して，"Generate"をクリックします．

BLEターミナルを起動すると，すぐにBLE-STICKが見つかります．タ
ップして，接続します．

3つのUUIDが生成されました．今回はこの3つを使います．
11 "Unknow Service"をタップして展開すると2つの"Unknow Charact
istic"が表示されます．片方のプロパティが"Read Write Notify"と6 最初に独自サービスのUUID設定です．設定はPSコマンドを使います．手順5で生成したUUIDの1つを指定します．
なお，手順5のサイトでは，ハイフン(-)が入っていますがPSコマンド

なっており，もう片方は"Read Write"となっています．
最初に，"Read Write Notify"側をタップします．

ではハイフンは入れずに入力します．
PS,a7bc7ee8・・・・
7 続いてこのサービスに追加するキャラクタリスティックのUUIDを追加します．キャラクタリスティックUUIDの追加は，PCコマンドで行います．PCコマンドには引数が3つあります．
1つ目はキャラクタリスティックのUUID，
2つ目はキャラクタリスティックのプロパティ，
3つ目はこのキャラクタリスティックが保持する最大データサイズ
タップすると，ターミナル画面が表示されここでデータの書き込み，です．データサイズはバイト単位で最大値は20です．プロパティ値はRN-4020データシートの14ページに表が掲載されています．

読み込みの様子が表示されます．
12 SHWコマンドでヘッダコード000Bhにデータを書き込んでみましょ1つ目のキャラクタリスティックは，書き込み(Write=0b1000)と読み出し(Read=0b10)ができて，Notify(通知=0b10000)が可能な1う．ここでは，"HELLO BLE" と書き込んでみます．

0バイトサイズとします．※0bは2進数を示します．
よってプロパティ値は，1Ahとなります．サイズは10バイトなので0Ah

SHW,000B,48454C4C4F20424C45を指定します．

上記コマンドをUARTで送信してみてください．BLEターミナルに，"HELLO BLE"と表示されたことを確認します．

PC,a7bc824e・・・・・,1A,0A
続いて2つ目のキャラクタリスティックです．通知なしで，読み書きだ
けできればよいので，プロパティ値は06h，サイズは2となります．
PC,a7bc8406・・・・・,06,02
これで，1つの独自サービスに2つのキャラクタリスティックが追加されたモデルができあがりました．
12 続いてBLEターミナル側から文字列を書き込んでみましょう．
※本モジュールは最大で10個のキャラクタリスティックを追加できます．

書き込む文字列は， "This is BLE" とします．
BLEターミナルの最下部に入力ボックスがありますので，"This isBLE"と入力して「Send」ボタンを押してください．

8 再起動してすべての設定を有効にします．
BLE-STICKが，下記のような文字列をUART側で出力します．
R,1
WV,000B,5468697320697320424C45
9 再起動が完了したら，LSコマンドで正しく設定されているか確認し↓てみましょう．
ヘッダーコード，000Chはノティフィケーション用です．

"This is BLE"

実際には，000Bhと，000Ehの2つを使います．

ヘッダコード000BにThis is BLEが書き込まれたことがわかります．
8

13 同様にして，もう1つのNotifyのない2バイトのキャラクタリスティッ■モジュール①(セントラル)の設定

クも試してみてください．

最初にモジュール①をセントラルに設定しましょう．

こちらは，NotifyがないためSHWコマンドで書き込みをしてもBLEタ
ーミナル側では何も変化がありません．

次の手順でモジュール①を設定します．

画面最下部の・・マークボタンを押して「Read」ボタンをタップすると，キャラクタリスティックが保持している値を読み出すことができます．

1 "+"コマンドでエコーをONにします．
2 SF,1 で本体をリセットします．
3 再起動してすべての設定を有効にします．
"R,1"を送信します．
4 デバイスの状態を確認します． 確認は"D"コマンドで行えます．
"D"を送信します．

これをタップしてからこちらをタップ

BTA=001EC01Dxxxx
Name=RN4020_xxxx

独自サービスを使った場合，BLEにてある程度自由度のある通信がRole=Central
Connected=noできるようになります．
BLEはもともと長いシリアルデータ通信をするような規格ではない
ため，1つのキャラクタリスティックが保持できる最大データサイズ

Bonded=noServer Service=80000000

は20バイトと少ないのも特徴です．その代わり消費電流を極力抑える仕様にしています．
センサーの数値やスイッチのON/OFFといった，ごく小さなデータを"Role"がCentralになっていることを確認します．

やりとりするには十分な規格である一方，シリアル通信を無線化しなおBTA=のところの文字列が自機のMACアドレスです．

て遠隔地のデバイスと通信したいというような用途には，従来のBlu
etooth3.0以前の規格がむいています．

RN-4020を使ってみる

5 セントラルになっていない場合には次のコマンドで強制的にセントラルに設定します．
"SR,80000000"を送信します．

～応用編1～

再度"D"コマンドでセントラルになっているか確認してください．
R,1 で再起動してください。

基礎編では，スマホをセントラル，本モジュールをペリフェラルとして動作の確認をしましたが，本項では2台のBLE-STICKを使ってモジュール同士で通信を行ってみましょう．
このモジュールの便利なところは，2台のモジュール間で通信する場
合の特殊なプロファイル，MLDP(Microchip Low-energy Data Profil■モジュール②(ペリフェラル)の設定
続いてペリフェラル側の設定です．サービスは，もちろんBluetooth SIe)が使えるということです．
このMLDPは，2台のモジュール同士のシリアル通信を，SPP(Serial P

Gで定義されているパブリックサービスも使えますが，ここでは，先の基礎編2と同じく独自サービスを使うことにします．独自サービスのUUID

ort Profile)で行うもので，シリアル通信を無線化するとても便利な方法です．これは，モジュール間通信用のプロファイルなので，パソコンとのシ及びキャラクタリスティックのUUIDは，基礎編2でご紹介したUUID生成
サービスをご利用ください．UUIDは3つ使用します．

リアル通信の無線化には利用できませんが，低消費電力でモジュール
1 "+"コマンドでエコーをONにします．

間シリアル通信が無線化できるのは大変魅力です．

※CLICK-32MXをご使用の場合には、エコーをOFFにします。
応用編1では，2つのモジュールを独自サービスで通信する方法を紹
2 SF,1 で本体をリセットします．

介します．応用編2ではその状態からMLDPを実行して通信する例をご紹介します．

3 独自サービスを実行するための設定にします．
モジュール①"SS,00000001"を送信します．

モジュール②

4 デバイスをペリフェラルとして設定し，MLDPを有効にします．また，自動アドバタイズを有効にします．
"SR,32000000"を送信します．

GAP→セントラル側
GATT→クライアント側

5 独自サービスとそれに付随する独自キャラクタリスティックの全設定をクリアします

GAP→ペリフェラル側
GATT→サーバー側"PZ"を送信します．
2台のBLE-STICKを使うということは，上図のように1台はセントラ
6 UUIDは3つ使います．UUID生成サイトで3つのUUIDを発行してくだ

ルに，片方はペリフェラルに設定する必要があります．まずは2台のBLE-STICKを設定することから始めます．

さい．最初に独自サービスのUUID設定です．
"PS,xxxxxxx・・・・・"
xxxxxxxxx・・・には発行したUUIDを入力してください．

9

7 サービスに追加するキャラクタリスティックのUUIDを追加します．
1つ目のUUID→"PC,xxxxxxx・・・・・,1A,10"

2つ目のUUID→"PC,xxxxxxx・・・・・,06,02"■サービスの確認
両デバイス間で接続が完了したら，サービスの確認をしてみましょう．
1 セントラル側デバイス(モジュール①)で"LS"コマンドを実行してくだxxxxxxxxx・・・には発行したUUIDを入力してください．

さい．

8 再起動してすべての設定を有効にします．

2 サーバー側の提供しているサービスの一覧が表示されます．

"R,1"を送信します．

180A
2A25,000B,V
2A27,000D,V

9 Dコマンドを実行して状態を確認します．
BTA=001EC01Dxxxx

2A26,000F,V

Name=RN4020_xxxx
Role=Peripheral

2A28,0011,V
2A29,0013,V

Connected=noBonded=no

2A24,0015,V
END

Server Service=00000001
180Ahはデバイス情報サービスを示しています．
"Role"がペリフェラルになっていることを確認します．

以下，デバイス情報のキャラクタリスティックが列挙されています．

■2つのBLE-STICKを接続する

3 続いて，ペリフェラル側が提供しているサービスを"LC"コマンドで表2つのモジュールの設定が終わりました．片方はセントラル，もう一方はペリフェラルになっています．ペリフェラル側は，自動アドバタイジング

示させましょう．
C7A5Bxxxx41211E5BF7FFEFF819CDC9Fを有効に設定しましたので，本体が再起動した時，または電源投入直後

C7A5Bxxxx41211E5BF7FFEFF819CDC9F,000B,0A

からアドバタイズを開始しています．よって，セントラル側はそれをスキャンして接続すればよいことになります．

C7A5Bxxxx41211E5BF7FFEFF819CDC9F,000C,10
C7A5Bxxxx41211E5BF7FFEFF819CDC9F,000E,06

下記の手順で接続をしてみましょう．

C7A5Bxxxx41211E5BF7FFEFF819CDC9F,000B,0A
C7A5Bxxxx41211E5BF7FFEFF819CDC9F,000C,10
C7A5Bxxxx41211E5BF7FFEFF819CDC9F,000E,06

1 セントラル側デバイス(モジュール①)で"F"コマンドを実行します．
Fコマンドは周囲のBLEデバイスをスキャンするコマンドです．
実行すると次のような戻り値が戻ります．

END

001EC01Dxxxx,0,-27

独自サービスのUUIDと，その下にキャラクタリスティック一覧が表示されます．またヘッダコードと，その右隣にプロパティ値が表示さこの値は，現在アドバタイジングをしているペリフェラルデバイスのMACアドレスが先頭に表示されています．続いて，MACアドレスタイ

れます．

プが表示されます．

なお，長いUUID一覧が列挙されるとわかりにくくなりますが，以降はヘッダコードを使いますので，ヘッダコードに注目してください．

2 セントラル側デバイス(モジュール①)で"X"コマンドを実行してスキャンを停止します．

000Bhは，読み書きのキャラクタリスティック，
000Chは，これのノティフィケーション用ヘッダコードです．

3 続いて，セントラル側デバイス(モジュール①)で"E"コマンドを実行して接続を行います．Eコマンドは指定したMACアドレスのデバイスとの接続を開始するコマンドです．

■セントラル側からデータを書き込む
では実際に通信ができるかどうかを確認してみましょう．
最初はセントラル側から，ペリフェラル側にデータを書き込んでみます．

Eコマンドには2つのパラメータがあり，1つ目はMACアドレスタイプ，2つ目がMACアドレスです．いずれの情報もFコマンドで取得できこの時に使用するコマンドが，"CHW"コマンドです．
CHWコマンドは，引数でハンドルを指定して，クライアント側のキャラていますので，これを指定して接続を試みます．

クタリスティックに内容を書き込むコマンドです．

"E,0,001EC01Dxxxx"コマンドを発行してください．

試しに，"HELLO BLE"と書き込んでみましょう．次のコマンドをセントラル側で実行します．

接続ができると，セントラル，ペリフェラル側両方で，"Connected"と表示されます．

CHW,000B,48454C4C4F20424C45

また，BLE-STICKの"CON"LEDが点灯します．
ペリフェラル側では次のように表示されたはずです．
WV,000B,48454C4C4F20424C45

10

■ペリフェラル側からデータを書き込む

試しにペリフェラル側で，000Bhの内容を "1234"に変更してみます．

次はペリフェラル側が自らのキャラクタリスティックにデータを書き込んでみましょう．もちろんセントラル側でその書き換わった内容は見ることができます．

SHW,000B,31323334

使うコマンドは，"SHW"コマンドです．指定ヘッダコードは同じく000B

上記を実行すると，直ちにセントラル側でhです．今度は，データとして "This is BLE" を書き込んでみます．
Notify,000B,31323334
SHW,000B,5468697320697320424C45と表示されることを確認できます．
実行しても何も変化がないように見えます．これは現在ノティフィケー
ションが有効ではないため，内容が変わってもセントラル側に通知がいかないためです．

RN-4020を使ってみる

まずは000Bhのデータをペリフェラル側，セントラル側双方で読んで～応用編2～

みてください．

最後に2つのBLE-STICKを接続して，シリアル通信を行うMLDPという動作モードをご紹介します．

セントラル側で読む→ CHR,000B
ペリフェラル側で読む→ SHR,000B

き込む，読み込む，その一連の操作によってデータの内容を見ていました．これは必要なときに必要なデータだけを更新して後はスリープしてBLEの性質上，これまではあくまでもキャラクタリスティックに値を書

省電力化・・というBLE最大の特徴でセンサー値の伝達には最適です．
いずれも今書き込んだ内容，"This is BLE"が読めたのではないでしょうか．

しかしもっとサイズの大きいデータをやりとりしたい場合や，シリアル
通信をダイレクトに送受信したい場合には不向きです．そこでこのBLE-STICKに搭載のRN-4020ではMLDPという独自機能が搭載されており，シリアル通信をダイレクトに送受信することができます．なおこのコマンドのポイント

シリアル信号をダイレクトに送受信できるモードのことを「トランスペア
レントモード」といいます．一方で，これまでのようにコマンドの送受信で制御するモードを「コマンドモード」と呼びます．

コマンドがたくさん出てきて，分かりにくいなと感じている方も多い

MLDPは，トランスペアレントモードを実行する機能です．

かと思います．
既にお気づきかもしれませんが，コマンドには規則性があります．
例えば， "CHR" これはClient側が，Header Codeで，Readするという意味です．セントラル側は，サービスについてはクライアントになって
います．

TX

RX

RX
続いて"SHR"ですが，ペリフェラル側はサーバー側なので，Server側
からHeader Codeで，Readするという意味です．

TX

上図は2つのマイコンをUARTで接続した例ですが，これは有線で配線した場合です．TXとRXをクロスすることでデータの送受信をしています．
BLE-STICKに搭載のRN-4020が提供するMLDPはこの有線部分を無線化するという機能です．

書き込むのならば，最後がWriteのWになるという感じです．

■ノティフィケーションの設定
さて，この例ですとノティフィケーションが設定されていないため，ヘッ
ダコード000Bhの値が更新されても通知が飛びません．よってセントラ
ル側は値の変化を自らが読みに行くまで確認できないことになります．
UARTをBLEで無線化

ヘッダコード000Chはノティフィケーション用として使えます．ここの内容を変更してノティフィケーションを有効にします．ヘッダコード000
Chの現在値をセントラル側で確認しておきます．

BLEのベーシックな使い方はこれまでご紹介した通り，キャラクタリ
CHR,000C>R,0000

スティックにデータを書いたり，そこからデータを読んだりする方法でデータのやりとりをしていましたが，このMLDPではそのような手順はユ

戻り値は 0000 となっています．通知は無効のようです．

ーザーサイドからは意識しなくてもよいように隠蔽されており，単にUA
RTのシリアル通信を無線化する機能として使用できます．

次のコマンドで値を0100に設定します．
それでは早速使い方を見てみましょう．

CHW,000C,0100
これで，ノティフィケーションが有効になりました．ペリフェラル側でヘッダーコード000Bhの内容が書き換わると，セントラル側に通知が行きます．

11ここでは応用編1の続きとして，両デバイスがボンディング済みの状

このようにBLEで基本となる，キャラクタリスティックにデータを書態でMLDPを体験してみましょう．MLDPでは少しだけハードウエアもいき込んで，それを読み込んで・・という一連の方法ではなくなり，シリ

じることになります．

アル通信をそのままBLEで無線化するモードがMLDPモードです．

MLDPを実行するたには，最初にSRコマンドでMLDPを相互のデバイ

このトランスペアレントモードは，従来のBluetoothで使われているS

スで有効にしておき，Eコマンドで2つのデバイスをボンディングしておく必要があります．SRコマンドによって，MLDPが有効になっていないと，以PPと全く同じ動作ですが，BLEでは省電力で動作するというメリットがあります．

下の操作をしてもMLDPは実行できません．
なお，CMDピンをHレベルにするのは一方のデバイスだけでよく，そ
次の手順で操作してみましょう．

れセントラル側でもペリフェラル側でもどちらでもかまいません．

1 セントラル側デバイスで次のコマンドを実行します．

片側のデバイスがMLDPモードになると，もう一方のデバイスは自・SS,80000000
・SR,92000000
・R,1

動的にトランスペアレントモードに移行して送受信を行うようにな(MLDP有効，セントラル設定)

ります．
MLDPモードを終了するには，CMDピンをLレベルにします．(オープンだと内部プルダウン抵抗でLレベルになります．)

2 ペリフェラル側デバイスで次のコマンドを実行します．
・SS,00000001
・SR,32000000
・R,1（MLDP有効，ペリフェラル設定）

本製品の技術的なサポートについて
本製品の技術的なサポートはモジュール製造メーカーのマイクチップ社が直接行います．

3 先の「応用編1」を参考に2つのデバイスをEコマンドで接続してください．(P.8参照)

本製品は，マイクロチップ社のBLEモジュールRN-4020のピンピッ→相互のデバイスで"Connected"が出力されることを確認します．

チを変更した製品で基本的な機能，仕様はRN-4020の仕様及び取り扱い方法に準じます．

4 セントラル側デバイスの"CMD"ピンをジャンパーソケットでショート

技術的なサポートが必要な場合には，下記へ直接ご連絡頂きます．

します。
技術サポートは英文となります．日本語補足マニュアル及びFAQにつきましては，当方のサイトより最新の情報をご提供致します．
なお，サポートはいずれも技術者専門となっておりより技術的なご質
ジャンパーソケット等で問をするためのものとなっております．マニュアルに既に記載されていショートします。

る内容などについては回答が得られない場合がございます．

http://www.microchip.co.jp/support/tech-help.php
上記サイトから「お問い合わせ項目」のプルダウンで「USB， LIN， BT，PC周辺」を選択してください．「USサイト」のリンクをクリックしてUSサ※CMDピン内部で弱プルダウンされているので外部に抵抗によるプルアップは必要ありません．

イトに移動します．
検索ボックスに「How to submit a technical support case?」と入力して「Search」を押して検索します．検索結果から「How to submit a

5 セントラルデバイスは"MDLP"と"CMD"という文字列をUARTで返します．この文字列が送信された時点から，MLDPによるトランスペア

technical support case?」というリンクをクリックします．登録方法並
びに質問方法が記載されていますので，手順に従って質問します．

レントモードが実行されます．
なお，シリアル通信関係のご質問の場合には，必ず本製品とUARTホ
スト機器が通信している波形データの内容をオシロスコープやロジッ

UARTのデータは，すべて接続先のBLE-STICKに送信されます．

クアナライザで観察したデータが必要です．通信しているTx，Rx信号の
6 試しにセントラル側で，文字列 "123456" を送信してみてください．
ペリフェラル側デバイスでは，"MLDP"につづいて"123456"

オシロスコープ画像をご用意ください．それがない場合，信号が正しく入力されているかどうかを判断できないためサポートを受けられないこと表示されるはずです．

とがあります．

※ペリフェラル側は最初にトランスペアレントモードでデータを受

なおご質問事項はできるだけ簡潔にして頂き，使用環境，接続状況，エ

信した時のみ"MLDP"の文字を返し，続いて受信した値を出力します．

ラーコードの内容などは具体的にお書き下さい．
当方では，最新のFAQを下記サイトで公開しております．よくあるご質
問はFAQにまとめておりますので，予めこちらもご確認頂けますようお

7 逆に，ペリフェラル側で，文字列 "ABCDEFG"と送信してみてくだ

願い致します．

さい．セントラル側デバイスでは "ABCDEFG"と表示されるはず

http://www.microtechnica.tv/faq/faq.cgi

です．

12

マイクロテクニカ〒158-0094 東京都世田谷区玉川1-3-10
TEL: 03-3700-3535
FAX: 03-3700-3548(C)2017 Microtechnica All rights reserved
13