<はじめに>
このページではBluetooth無線モジュール「BlueMaster」の使い方詳細とコマンドについて解説します。尚、BlueMaster及びスレーブでのPCとの接続についてはBlueMasterのページを参照願います。
<ピン配列>
<モード切替>
BlueMasterには「AUTOモード」と「コマンドモード」の2つの動作モードがあり、起動時のスイッチの状態によって切り替えられます。
■AUTOモード
自動的に相手と接続するモードです。モード設定スイッチがMaster側のときにBTマスターとして動作し、モード設定スイッチがSlaveのときにBTスレーブとして動作します。
■コマンドモード
上位HOSTからのATコマンド(先頭にATが付いた文字コマンド)によって接続するモード。細かい操作ができる。また、デバイス名の変更や通信速度の設定などの設定変更もできる。
<状態遷移>
BlueMasterは接続状態で下記の4つの状態にわけられます。
■探索 Inquiry
電源を入れると、まず探索状態になります。 BTマスターで動いている場合はスレーブを探索し、ペアリング済みのスレーブを発見した場合は接続状態に移行します。ペアリングしていないスレーブを発見した場合はペアリングを試みます。
■ペアリング Pairing
相手とペアリングを行います。このとき、「認証を使用する」設定になっていた場合(デフォルト)は相手のPIN番号の確認などを行い、問題がなければ接続します。
■接続 Connecting
接続が成功すると、データ転送可能状態になります。
■データ転送 Transfer
実際のデータを送受信します。認証を使用している場合は、なんらかの理由で切断した場合はペアリングしているBTスレーブと再接続を試み続けます。
<STA LEDの状態>
<コマンド解説>
コマンドモードでは、ここで紹介する方法によってBlueMasterにコマンドを実行させます。
各コマンドはATの文字から始まって \r\nの改行コードで終わる文字コードで構成されます。
改行コードはASCIIで表すと \r=CR \n=LF になります。ASCIIコードで \r=0x0d \n=0x0a
になります。
たとえば、デバイス名を書き換えるコマンドは AT+WRNAME です。これをマイコンからCなどで送る場合は次のようになります。(あくまで例です。コンパイラによって書き方は違います。)
printf("AT+WRNAME=myBT001\r\n");
BlueMasterにこのコマンドを実行すると、デバイス名が「myBT001」に変わります。
BlueMasterから返答がある場合は、 \r\nxxxx\r\n のようになります。xxxxが返答メッセージです。また、全ての命令に対して、応答メッセージの後に、処理がOKだったかERRORかを返します。ERRORの場合はERROR番号も添付されます。
■AT+GETADDR
説明:
自分のBTアドレスを取得します。
応答形式:
BDADDR=<LocalAddress>
応答例:アドレスが0001 90 123456 だった場合
BDADDR=000190123456
OK
■AT+RDNAME
説明:
デバイス名を確認します。
応答形式:
NAME=<LocalName>
応答例:デバイス名がBlueMasterだった場合
NAME=BlueMaster
OK
■AT+WRNAME=<LocalName>
説明:
デバイス名を設定します。
送信例:デバイス名を「myBT001」に設定する場合
printf("AT+WRNAME=myBT001\r\n");
応答例:
OK
■AT+RDSEC
説明:
セキュリティを確認します。
応答形式:
NAME=<Authenticate>,<Encrypt>,<Pair>
<Authenticate>:0使用しない 1:使用する(サービスレベルのセキュリティ) 2:使用する(リンクレベルのセキュリティ)
<Encrypt>:0:使用しない 1:使用する(リンクレベルのセキュリティのみで有効)
<Pair>:0:使用しない 1:使用する
応答例:
SEC=2,1,1
OK
■AT+WRSEC=<Authenticate>,<Encrypt>,<Pair>
説明:
セキュリティを設定します。
<Authenticate>:0使用しない 1:使用する(サービスレベルのセキュリティ) 2:使用する(リンクレベルのセキュリティ)
<Encrypt>:0:使用しない 1:使用する(リンクレベルのセキュリティのみで有効)
<Pair>:0:使用しない 1:使用する
送信例:
printf("AT+WRSEC=2,1,1\r\n");
応答例:
OK
■AT+RDPIN
説明:
PINコードを確認します。
応答形式:
PINCODE=<PinCode>
応答例:
PINCODE=0000
OK
■AT+WRPIN=<PinCode>
説明:
PINコードを設定します。
送信例:
printf("AT+WRPIN=0000\r\n");
応答例:
OK
■AT+RDUART
説明:
通信設定を確認します。
応答形式:
UART=<BaudRate>,<StopBit>,<ParityBit>
<BaudRate>:通信速度
<StopBit>:ストップビット
<ParityBit>:パリティビット
応答例:
UART=115200,1,N
OK
※出荷時は通信速度115200bps、ストップビット1、パリティなしの設定になっています。
■AT+WRUART=<BaudRate>,<StopBit>,<ParityBit>
説明:
通信設定を設定します。
<BaudRate>:1200/2400/4800/9600/19200/38400/57600/115200/230400/460800
<StopBit>:1/2
<ParityBit>:N/O/E
※Nはなし、Oは奇数パリティ、Eは偶数パリティ
送信例:
printf("AT+WRUART=115200,1,N\r\n");
応答例:
OK
※このコマンドは、リセット後に有効となります。リセットは電源切り入りの他にソフトウェアリセットでも行えます。
■AT+RESET
説明:
ソフトウェアリセットをします。
応答例:
OK
■AT+INQUIRY=<Maxresponse>,<Timeout>,<Filter>
説明:
周囲に存在するデバイスを探索します。
<Maxresponse>:最大応答数
<Timeout>:タイムアウト時間 1.28xN秒(01以上30以下)
<Filter>:Class of Deviceフィルタ 0000:全てのデバイス 0600:Class
of Deviceのbit10とbit9が1のデバイス
送信例:
printf("AT+INQUIRY=8,10,0000\r\n");
応答例:
このコマンドはACKを返します。最後にOKを返します。
発見した場合の例:3つ発見した場合
ACK
<BTアドレス1>,<Class of Device1>
<BTアドレス2>,<Class of Device2>
<BTアドレス3>,<Class of Device3>
OK
発見できなかった場合の例:
ACK
OK
■AT+INQCANCEL
説明:
デバイス探索を中止します。
応答例:
OK
■AT+CONMASTER=<Profile>,<RemoteAddress>
説明:
自分がマスターとなり、指定したデバイスとの接続を試みます。
<Profile>:1:SPP(固定)
<RemoteAddress>:接続したい相手のBTアドレス
<Filter>:Class of Deviceフィルタ 0000:全てのデバイス 0600:Class
of Deviceのbit10とbit9が1のデバイス
送信例:000190123456の相手と接続する場合
printf("AT+CONMASTER=1,000190123456\r\n");
応答1:ペアリング済みの相手に接続しようとした時
+CONNECTED=<RemoteAddress>
OK
応答2:初めての相手に接続しようとした時
+CONNECTED=<RemoteAddress>
+PINCODE?
■AT+CONSLAVE=<Profile>,<Discoverable>
説明:
自分がスレーブとなり、マスターから接続されるのを待ちます。
<Discoverable>が有効であれば発見可能な状態になって、相手から接続されるのを待ち、相手から接続を求められたら通知します。ただし、相手が認証を使用する場合は、初めての相手であれば事前にペアリングを要求されます。
※この動作はわかりづらいので、下の接続フローのAT+CONSLAVEの設定値を参照して下さい。
<Profile>:1:SPP(固定)
<Discoverable>:0:無効(Connectable) 1:有効(Discoverable &
Connectable)
※MASTERに接続されたら自動的に発見不可、接続不可となり、多のマスターからアクセスできないようになります。
送信例:
printf("AT+CONSLAVE=1,0\r\n");
応答1:ペアリング済みの相手から接続を求められたとき
+CONNECTING=<RemoteAddress>
+ACCEPT?
応答2:初めての相手から接続を求められたとき
+CONNECTING=<RemoteAddress>
+PINCODE?
例)
接続待ちになった場合
ACK
ペアリング済みの相手から接続を求められた場合
+CONNECTING=<RemoteAddress>
+ACCEPT?
初めての相手から接続を求められたとき
+CONNECTING=<RemoteAddress>
+PINCODE?
■AT+CONCANCEL
説明:
接続待ちを中止しして、「発見不可」「接続不可」の状態にします。
応答例:
OK
■AT+RESPIN=<PinCode>
説明:
PINコードを要求された時に、PINコードを応答します。
送信例:
printf("AT+RESPIN=0000\r\n");
応答:
マスター動作の場合は、接続が成功した場合は
+CONNECTED=<RemoteAddress>
<Result>
という形式で応答があります。
スレーブ動作の場合は
<Result>
のみの返答となります。
<Result>:
OK:接続成功
TIMEOUT:規定時間に接続できなかった
FAILD:認証に失敗した
REJECTED:相手に接続を拒否された
ERROR=#:その他の失敗(#:ErrorCode)
例)マスター動作の例
接続に成功した場合:
+CONNECTED=<RemoteAddress>
OK
接続を拒否された場合:
REJECTED
■AT+RESCON=<Accept>
説明:
接続要求を受諾するかを応答する。
<Accept>: 0:拒否 1:許可
送信例:
printf("AT+RESCON=1\r\n");
応答:
+CONNECTED=<RemoteAddress>
<Result>
<Result>:
OK:接続成功
TIMEOUT:規定時間に接続できなかった
FAILD:認証に失敗した
ERROR=#:その他の失敗(#:ErrorCode)
例)
接続に成功した場合:
+CONNECTED=<RemoteAddress>
OK
接続を拒否された場合:
FAILD
接続要求を拒否した場合は、次の返答があります。
+DISCONNECTED=<RemoteAddress> ※<RemoteAddress>は切断した相手のアドレス
■+++
説明:
データ転送状態からコマンドモードへ復帰します。
一秒以上の空白の後、+++を送り、その後一秒間なにもおくらないと、データ転送状態からコマンドモードへ戻ります。その後、
+DISCONNECTED=<RemoteAddress> ※<RemoteAddress>は切断した相手のアドレス
の応答があります。
■AT+REMOTENAME=<RemoteAddress>
説明:
相手のデバイス名を確認します。5.12秒以内に取得できなかった場合はタイムアウトで処理を中止します。尚、デバイス名は先頭から31文字までしか取得できません。
送信例:000190123456の相手のデバイズ名を確認する場合
printf("AT+REMOTENAME=000190123456\r\n");
応答例:相手デバイス名を取得した場合
ACK
NAME=<RemoteName>
OK
■AT+GETSTATE
説明:
Bluetoothの動作状態を取得します。
応答:相手デバイス名を取得した場合
STATE=<State>
OK
<State> 0:コマンド待ち 2:設定中 3:発見可能状態 4:ペアリング中 5:接続中 6:接続可能状態 7:切断中
<通知一覧>
+CONNECTING=<RemoteAddress>
+PINCODE? |
ペアリングのために、PINCodeを要求する。 |
+CONNECTING=<RemoteAddress>
+ACCEPT? |
接続可否の判定を要求する。 |
+CONNECTED=<RemoteAddress>
|
リンクが接続されたことを通知する |
+DISCONNECTED=<RemoteAddress>
|
通信リンクが切断されたことを通知する。 |
+LINK_LOST=<RemoteAddress> |
通信リンクが失われたことを通知する。 |
<エラーコード>
応答が ERROR=# だった場合、のエラーコードは下記になります。(#の値)
0:原因不明
1:コマンドを受け付けられない。他のコマンドを実行中である。
2:コマンドの文法が正しくない。
3:パラメータの値が正しくない。
<制御シーケンス>
■FirmWareバージョン、Bluetoothアドレス、デバイス名の確認
■通信設定
■デバイス探索
■初めての相手と通信リンク接続(認証使用)
■初めての相手と通信リンク接続(認証なし)
■ペアリング済みの相手と通信リンク接続(認証使用)
■通信リンクの切断
|