Bluetooth modules(HC-05、HC-06)が互いに通信するための条件設定は何かを調べてみたので、メモとして残しておく。
本件に関しては、「Arduinoを簡単にBluetooth無線化するHC-05/HC-06 」(2015年2月20日の記事)、「Connecting 2 Arduinos by Bluetooth using a HC-05 and a HC-06: Pair, Bind, and Link 」(2014年11月の英文記事)がとても参考になる。
Bluetooth module HC-05の特徴は、
・Bluetoothの親機としても使用できる。(マスターでもスレーブとしてでも使用できる。)
・通信はBluetoothで行うが、入出力端子はシリアルのRX/TXとなっているため、Arduinoのシリアル RX/TXに接続するだけで通常のSerial通信と変わらず使用できる。
Bluetooth module HC-06の特徴は、
・3.3Vデバイスなので、Arduinoと接続する際には、5V Tx信号を抵抗分圧で、3.3Vにレベルシフトする必要が有る。
・通常Arduinoとの接続時には、再起動される。
・HC-06は、他のBluetooth module とペアリングしていない場合、ATコマンドを受け入れる。
・ATコマンドは、シリアルモニタの下端にある窓の設定は、「改行なし(No line ending、キャリッジリターン (CR) とラインフィード (LF)が無い状態)」とし、且つ 1秒以内に送信する必要が有り、この時間を越えるとコマンドは無視される。
・ディバイスの名前:HC-06
・Password: 1234(デフォルト)
・Baud: 9600baud(デフォルト)
Bluetooth module HC-05およびHC-06が相互に通信するための設定手順
①両方のデバイスで同じボーレートを設定する。
(例)HC-05およびHC-06で、ボーレートを9600に設定する。
②両方のデバイスで、パスワードが同じであることを確認する。
(例)HC-05とHC-06のパスワードを同じにする。
③次に、HC-06のアドレスを見つける必要がある。
HC-06のATコマンドでは、自分(HC-06)のアドレスを調べる事は出来ないので、
Androidデバイスから、あるいはHC-05を使って調べる事が出来る。
ここの手順は、「Connecting 2 Arduinos by Bluetooth using a HC-05 and a HC-06: Pair, Bind, and Link 」の『3. Find the address of the HC-06』 に詳しく記載されているので、ここを確認するのが良い。
HC-05で行う場合、HC-05をATコマンドモードにして以下のように行う。
a)以前にペアになったデバイスをすべて消去するために、
AT+RMAAD
b)HC-05をマスタモードにする。
AT+ROLE=1
c)HC-05をリセットする。
AT+RESET
ピン34をHIGHにして(ATコマンドモードにして)から
d)HC-05を任意のデバイスに接続するように設定する。
AT+CMODE=0
e)最大5台のデバイスを9秒間検索するを行う場合、下記のコマンドを入力する。
AT+INQM=0,5,9
f)SPPプロファイルを開始する。もしSPPが既にアクティブであれば、無視することができるエラー(17)が表示される。
AT+INIT
g)ここで、他のBluetoothデバイスを検索する。
AT+INQ
Bluetoothデバイスが複数ある場合には、上記の設定により、5台までのデバイスが表示される。
AT+INQは3つの値を返します。
最初の値はアドレスで、これがペアリングの為に必要な値です。
2番目の値はデバイスのモード。
3番目の値はRSSI信号の強さ。
④HC-05をHC-06とペアリングする。(所謂、電話番号の交換)
ペアリングするには、AT+PAIR= <addr>、<timeout>コマンドを使用する。
(例) "AT + PAIR = 3014,10,171179,9"(引用符なし)と入力する。
上記の例で、HC-05がHC-06と 9秒以内にペアリングできない場合、
エラーメッセージが表示される。
ペアリングが成功すると、「OK」が表示される。
⑤HC-06をHC-05にのアドレスとしてバインド設定する。(所謂、通話すること)
"AT + BIND = 3014,10,171179"を使用してバインドする
⑥ペアリングされた特定の1台のデバイスにのみ接続するようにHC-05を設定する。
CMODEコマンド でこれを行う。
"AT + CMODE = 1"
⑦HC-06へのリンク(HC-05からリモートデバイスであるHC-06への接続)
リンクコマンドAT + LINK = <addr>を使用する。
(例)前述からの流れで示すと・・・
"AT + LINK = 3014,10,171179" として行う。
すべてがうまくいけば、「OK」 の応答が得られる。
HC-05のLEDは、毎秒1回点滅し、HC-06のLEDは点灯状態(点滅ではない)。
これで、HC-05とHC-06が接続した。
接続設定が完了すると、HC-05は電源を入れるたびに自動的にHC-06に接続する。
接続が確立されると、HC-05は通信モードに切り替わる。
通信の確認
テストスケッチで(私のブログならばここを参考に)確認を行う。
①HC-05とHC-06が接続された2台のArduinoの電源を切る。
②先ず、HC-06の電源を入れる。
LEDは1秒間に5回点滅している筈で、これは、接続を待っているか、ペアになっていることを示す。
③次に、HC-05の電源を入れる。
最初にLEDが数回点滅し、その後、通常パターンの点滅に変わる。
④HC-06のLEDが常時点灯する(点滅はしない)。
⑤以上で、2台のモジュールが接続される。
シリアルモニタを開くと、入力したコマンド等は、もう一方のデバイス用のモニタに表示され、逆も同様に表示される。
モジュールの電源がONになるたびに、接続し直す必要がある。モジュール間で接続していないことがわかったら、Arduinoの電源を入れ直すこと。
場合によっては、HC-05が接続しようとしてスタックしていることがある。この場合、HC-05のLEDの状況は、下記のようである。
1)2秒間に3回の点滅をしている。
2)あるいは、1秒に2回点滅します。
これは通常、HC-05をリセットしないで HC-06の電源を切り再度ONにしたときに発生する。
Recent Comments