RN-42モジュールのコマンド

RN-42は、Bluetooth 2.1+EDRのモジュールです。電源は3.3V(3V~3.6V)で動きます。5V系のマイコンとつなぐ場合は、レベル変換を使いましょう。クラス２で通信距離は３０ｍ程度。Bluetoothは2.4GHz帯を使用し一般の多々にも開放された電波で、コードレス電話、携帯電話等と同じように使用者には日本国内で技適マークのついたモジュールであれば免許なしで使うことができます。通常、莫大な費用とこのわずらわしいファームウェア（プロトコルスタック）を実装作業や認証などなしで、モジュールを使えば簡単に解決できます。このモジュールは、通常のシリアルポート同様に使えるキーボード、マウスなどの通信HIDプロファイル以外にも、電子回路でおなじみ、マイコンどうしを通信するためでよく使われるシリアル通信のSPPプロファイルが使えます。また、デバイスとしてだけではなく、ホストにもなれます。このモジュールは、AndroidスマホやPCなどにもBluetoothでつなげることができ、近年では、日本国内でも使えるように技適が取得され、手軽さから電子回路愛用者が増えてきているようです。また、このモジュールはRN-42のGPIOが操作できます。Bluetooth4.0が増えてきてこちら側をクラシックと呼ぶ。Bluetooth4.0 BLEモード対応機種は、SPPプロファイルがないことがほとんどなので、シンプルなBluetooth2.1のSPPプロファイルはまだまだ貴重な存在であり、技適が取得して安い無線モジュールはRN-42となる。iPhone向けに使用するには、特別なプログラム（MFi,APL）が用意されており、機器認証や参加しないとiPhoneからは使えないようです。、認証チップが必要ですが、RN-42は内蔵済みです。

#RN-42
RN-42の中身は、CSR社の高性能なマイコンチップ並びにそれを制御するファームウェアがFLASHメモリ入っております。電波を送受信するアンテナ並びに高周波回路(RF)で構成されています。他にもLEDを光らすなどGPIO（汎用入出力）がいつくか使えます。

#コマンドモード
デフォルトのままでもスレーブとしてある程度使えるのですが、詳細な設定はコマンドモードを使用します。

#Bluetooth
同じ2.4GHz帯を使うZigBeeという方式がありますが、こちらも消費電力にすぐれ日本ではあまり普及していません。Bluetooth方式は、たくさんのメーカーが参加しており、2.4Ghzを扱う他の方式と比べてスマホ、パソコンなど搭載機器も豊富で消費電力も低く抑えられ近距離通信に向いています。Bluetoothは、たくさんのプロファイル、バージョンがあるので注意が必要です。初めは速度に問題があったのですが、改良され音楽を流せる程度の通信速度を得られています。（このモジュールでは音質の良い音楽をリアルタイムに送るのは難しいと思われる。）
最近のスマホはほとんどBluetooth4.0以上。もちろんBluetooth2.Xにも互換性があるモードがある。ただし、2.4GH帯が使っているのでWiFi,他のBluetooth機器,ANT,電子レンジ,コードレス,Zigbee,PDA,2.4GHz機器など混雑している。

#Bluetoothの電波
Bluetoothの電波は2.4GHzを使用され、多くの他の機器が使用しています。大変混雑しております。少ない帯域をなるべくデータを送る方式があります。Bluetoothクラシックは、周波数帯域を７９チャンネルに分割して625μSごとに、使用していない帯域を探してチャンネルを移動しております。FH-SS 周波数ホッピングスペクトラム拡散を採用しています。

#Bluetoothのネットワーク
Bluetoothにはマスタとスレーブのどちらかになれる。マスタは１つ、スレーブは７つまで構成できる。それらをピコネットと呼ぶ。ピコネットとピコネット通し接続するためにマスタとスレーブがどちらにもなれるゲートウェイみたいな存在する。ピコネットの集まりをスキャッタネットと呼ぶ。ピコネット数は２５６である。

#Bluetoothのパケット
Bluetoothのパケット構成は、
アクセスコード（ピコネットのアドレス）+ヘッダ（スレーブのアドレス）＋ペイロード（max:2074bitデータ本体）である。
パケットなので当然ながら、実データよりもオーバーヘットが大きくなる。
他にもEDRモードでは、ペイロード部(max 1021byte)パケット長が長くなり大きなデータを一度に遅れる。

#Bluetoothのプロトコル
Bluetoothには製造者の違いによりハードウェアレベルの互換性を保つために、色々なプロトコルが存在します。

|プロファイル| |
|:--:|:--|
|SPP|UARTでシリアル通信などをおこなうプロファイル|
|HFP|ハンズフリーフォン|
|HSP|ヘッドセット|
|HID|キーボード、マウス|
|DSN|インターネットにダイヤルアップするプロファイル|
|GAP|ベーシックプロファイル|

など他多数。

#用途

このモジュールは単純なシリアル通信でデータや文字が簡単におくることができる。スマートフォンやパソコンに接続ができる。また、マスター、スレーブとして、このモジュール間で通信はできるはずです。ここで扱うのはBluetoothのSPPプロファイルになります。

#通信速度
下記の通信速度や電波を使うので、大量に送れば、バッファーがオーバーフローを起こしてしまう。大量にバッファを確保するか、少しづつ送りましょう。それ以外にも、ピンが余裕がある場合は、フロー制御も可能です。(RTS,CTS)
SPP時の通信速度
240 Kbps (スレーブ), 300Kbps (マスター)
HCIの通信速度
1.5 Mbps 
バーストモード
3.0 Mbps

#接続

RN-42とUARTあるいは、Bluetoothでモジュールに接続します。。パソコンがBluetooth対応機器ならワイヤレスで接続できます。有線では、UARTでつなぎます。現在はパソコンのインターフェースにI/OポートがなくUSBがほとんどです。仮想ポートをつかい、市販のシリアルUSBをつかうのがよろしいでしょう。

#ターミナル

本来はマイコンと連携して使うものでありますが、今回は、パソコンで動作確認します。
いずれも115200bpsで通信し、パリティなし、８ビットで設定、ストップビットは１

###Windowsの場合
teraterm(Windows10など),hyperterminalなど起動し、115200bpsで接続します。
テラターム(Windows)のローカルエコーを有効にし、COM6ポートで接続
※＋<CR>コマンドでもエコーできます。

###Macの場合
Bluetoothを有効にして、Cooltermなどのターミナルコマンドを使用。または
\$sudo screen /dev/******** 115200
終了は、Control + a
をしてcontorl+k

再接続する場合は、
\$sudo screen -r /dev/******** 115200

###Ubuntuの場合
screenコマンド以外にもcuコマンドをインストール

\$sudo apt-get update
\$sudo apt-get install cu
\$sudo chmod 666 /dev/ttyUSB0
\$sudo cu -s 115200 -l /dev/ttyUSB0

あるいは、screenコマンドを使う場合は、
\$sudo apt-get install screen
Macと同じ


#ペアリング
セキュアペアリングSSPを用いています。６桁の番号を確認するようにダイアログが出ます。(デフォルト)

#改行コード
コマンド入力には改行コードが必須です。<CR>,¥rです。（バイナリでは0x0d）

#$$$

コマンドモードに入ります。$$$の場合だけ改行コードは、いりません。
Faboモジュールは、非常にわかりやすく、RN-42モジュールのBuleのLEDが短い間隔で点滅します。返り値はCMDが返ります。

#---
\>---でコマンドモードから抜けます。成功した場合はENDコマンドが返ります。

#+
入力したコマンドを表示させるように、ローカルエコーを有効します。ECHO ONが返ります。

コマンドにはセットコマンド,ゲットコマンド,チェンジコマンド,アクションコマンドがある。$$$以外は改行コード¥r(<CR>)を必要とする。

#S$
コマンドモードに移行するコマンドを変更する。
fffをコマンドモードに移行するように変更する。
$S,f 



#ST
コンフィグレーションタイマーを変更できます。設定の情報は、Eコマンドで確認できます。
コマンドモードには、デフォルトでは６０秒を超えるとはいれません。STコマンドで入れる時間を設定します。ST,設定時間(0~252) 253ローカルのみ継続,254,リモートのみ継続255,リモート、ローカルとも継続。
例　ST,60

#V
VコマンドでRN-42のファームウェアのバージョンが確認できます。

#D
Dコマンドでセッティングを確認できます。
***Settings***
BTA=000666******
BTName=takeochan02
Baudrt(SW4)=115K
Mode  =Slav
Authen=1
PinCod=1234
Bonded=0
Rem=NONE SET

#E
Eコマンドで詳細なセッティングを確認できます。
***ADVANCED Settings***
SrvName= SPP
SrvClass=0000
DevClass=1F00
InqWindw=0100
PagWindw=0100
CfgTimer=255
StatuStr=NULL
HidFlags=200
DTRtimer=8
KeySwapr=0

#O
Oコマンドでその他のセッティングが確認できます。
***OTHER Settings***
Profile= SPP
CfgChar= $
SniffEna=0
LowPower=0
TX Power=ffe8
IOPorts= 0
IOValues=0
Sleeptmr=0
DebugMod=0
RoleSwch=0

#GB
Bluetoothデバイスのアドレスを表示する。

#SN
SN,\<デバイスの名前>　デバイス名を設定できます。
SN,takeochan

#S-
デバイス名を設定。
S-,\<string>
S-,takeochan

#SA
ペアリングの認証モードを設定する。ペアリングは鍵を交換することである。（ボンディング）
SSPモード（シンプルセキュアモード）に対応し、設定可能です。SSPモードは強固な暗号化されている。

|Value| |
|:--:|:--|
|0|オープンモード　暗号化されないセキュリティを必要とされないモード|
|1|SSPキーボードI/Oモード （デフォルト）　接続するデバイスの画面に表示される６桁のコードを一致するかどうかで認証|
|2|SPPモード　SPPモードで動くモード。|
|4|強制的にピンコードを必要とするモード（通常４桁）|

参照
Modes 0 and 4 are legacy modes that do not support SSP (Bluetooth version
2.0)

#SC
サービスクラスを設定（マスター時）

#SB
ブレーク信号を送る。（UARTで特別な処理を実行させたいとき）

#SD
サービスクラスを設定（マスター時）

#SI
SI,\<hex value>
デバイスを検索する。発見すれば、アドレス、デバイス名が返ってきます。

#SJ
sj,\<hex value>

#SP
ピンコードを変更する。
SP,\<string>

#SR
Bluetoothアドレスを設定する。
SR,Z ストアされたアドレスを消去
アドレスは１２桁（６バイト）
SR,000*********

#SU
UARTのボーレートを設定する。デフォルトで115200bpsです。
SU,\<value> 変更したい文字の頭２文字を設定する。
57600bpsに変更する場合は、
SU,57

#SQ
SQ,\<mask>
特別な設定をおこなう。

|Mask| |
|:--:|:--|
|0|デフォルト設定、特別な設定にはしていない。|
|4|GPIOによるコマンドをセット|
|8|電源投入時、発見をできないする。WやQ,1コマンドで復帰|
|16|低いレイテンシで最適化し、スループット向上|
|255|UARTにおいて、２つのストップビットを設定する|

#R
リセットコマンド
R,1コマンドは、強制リセットをするコマンド。

#Q

他の端末から発見させない場合は、Qコマンドを実行。
\>Q 発見もできない、接続もできないモード。
\>Q,1　発見はできるが、接続はできないモード
\>Q,2　発見できないが、接続はできるモード
\>Q,? Ｑコマンドの設定状況を確認します。
（ファームウェア6.11,6.12）

#Z
ディープスリープモードに入るには　Zコマンドを実行
ディープスリープモード時は、超消費電力2mA以下（26μA）になります。ちなみに接続時3mA,通信時は30mA程度になります。
モジュールのLEDが暗くなります。このモードの復帰にはマイコンのGPIOなどからリセットピンで復帰します。


#W
Wコマンドは、Qコマンドの復帰となります。

#SW
SW,<１６進数間隔>通信を行っていない状態のときは相手側を監視しないので省電力モード、スニフモードにする。

#GK
GKコマンドでは、接続状況はわかります。
接続された状態は、1,0,0
未接続は、0,0,0が返ってきます。

#IN
IN,スキャンタイム（秒）
デバイスをスキャンできます。
IN20

#C
C,アドレス
接続をします。

#SY
SY,<hex Value>
送信電力を設定。

|Hex Value|Power(dBm)|
|:--:|:--:|
|0010|16|
|000C|12|
|0008|8|
|0004|4|
|0000|0|
|FFFC|-4|
|FFF8|-8|
|FFF4|-12|

#SM
SM,\<value>

スレーブモードにする。
SM,0

|Value| ||
|:--:|:--|:--|
|0|Slave Mode.|スレーブになる。|
|1|Master Mode|マスターになる。|
|2|Triger Mode.||
|3|Auto-Connect Master Mode.|自動的に|
|4|Auto-Connect DTR Mode.||
|5|Auto-Connect Any Mode.||
|6|Pairing Mode|一度ペアリングしたデバイスに自動で接続|

#S~
S~,\<value>
Bluetoothのプロファイルを変更します。
デフォルトのプロファイルはSPPに設定されています。
その他、電話を掛けるプロファイル、モデムをコントロールするプロファイル、iOS用のプロファイ、マウス、キーボード等を制御するプロファイルなどがあります。

|Value| |
|:--:|:--|
|0|SPP|
|1|DUN-DCE|
|2|DUN-DTE|
|3|MDM SPP|
|4|SPP and DUN-DCE|
|5|APL|
|6|HID|


#U
U,\<value1>,\<value2>
UARTの通信ボーレートを変更します。
value1は、通信速度1200,2400,4800,9600,19200,38400,57600,115200,230K,460K,921K
value2は、パリティーの有無　E(偶数),O(奇数),N(なし)
U,9600,E

#SF
工場設定モード
出荷時と同じ設定にします。

参考サイト　マイクロチップ　Bluetooth Data Module Command　Reference & Advanced Information　User’s Guide
http://ww1.microchip.com/downloads/en/DeviceDoc/bluetooth_cr_UG-v1.0r.pdf