Arduinoに接続したセンサーの数値をもう1台のArduinoに送ったり、製作物に組み込んで操作したり・・・Arduinoを無線化させて動かすことが出来たら楽しいですよね!
Arduinoを手軽に無線化させる方法はいろいろとあるようです。
以前ご紹介したnRF24L01無線モジュールは、双方向でのデータのやり取りのほかに複数モジュール間でのやり取りが出来たりと電子工作用途で便利に使える無線モジュールでした。
比較的簡単に扱えることから、以前製作した4足歩行ロボットやロボットカーに組み込んで無線での操縦が出来るようになり非常に楽しくなりました。
Arduinoをさらに手軽に無線化する方法としてBluetoothモジュールを使う方法も試してみました。
ArduinoやRaspberry Piなどのマイコンボードを使った電子工作で安価で入手もしやすい事からよく使われるBluetoothモジュールとなるHC-05やHC-06です。
電子工作用途で製作したロボットや送信機に組み込んでArduino間で無線通信をさせ動かしたり、ラジコン用途などで使われている方多いと思います。
BluetoothモジュールHC-05やHC-06は安価で入手しやすい事もいいのですが、Arduinoなどのマイコンとのやり取りはUARTシリアル通信でのやり取りとなり、TXとRXの信号線での接続のみで使える非常に便利なモジュールとなります。
データのやり取りはBluetoothでの無線通信となりますが、接続したArduinoとはUARTによるシリアル通信となるのでBluetooth専用ライブラリなどを使う必要もなく通常のシリアル通信と変わりなく扱いやすいモジュールとなっています。
HC-05やHC-06をArduinoに接続しPCやスマホとペアリングすればPC側からはBluetooth仮想COMポートとして認識されるので、そのCOMポートを選択するだけでBluetoothのことを意識することなくシリアル通信でのやり取りが出来ます。
また、Bluetoothモジュール同士をペアリングしArduinoにそれぞれ接続すれば、Arduino間でのデータのやり取りも手軽に行うことが出来ます。
nRF24L01無線モジュールや今回ご紹介するHC-05やHC-06 Bluetoothモジュールは実際に使ってみて電子工作用途では非常に便利に使える無線モジュールだと思いますが、技適が取得されていないモジュールなので使用には注意も必要です。
上記nRF24L01無線モジュールの記事でも書いたのですが、『技適』いわゆる『技術基準適合証明』と呼ばれる無線機など電波を発するものはこの認定を通さないと日本国内で使用する場合電波法違反になる恐れがあります。
Bluetooth2.0+EDR形式で通信可能範囲は10mほどなので個人レベルでの屋内使用では問題ない?とは思いますが、その点だけ注意して読んで頂ければと思います。
目次
- 【Arduino】BluetoothモジュールHC-05・HC-06を使い無線通信をやってみる!
- Bluetoothモジュール HC-05とHC-06の違い
- 【HC-05/HC-06】接続端子とATコマンドモードスイッチの違い
- 接続方法
- ATコマンドモードによるモジュールの設定準備
- HC-05 ATコマンドによる設定確認&変更
- HC-06 ATコマンドによる設定確認&変更
- デバイスとのペアリング
- PCとArduino間でBluetoothを使いデータのやり取りを行う!
- HC-05同士の接続(子機の設定)
- HC-05同士の接続(親機の設定)
- 子機にHC−06を使う場合のアドレスの確認
- Arduino間でBluetoothを使いデータのやり取りを行う!
- 【追記】モジュール固定用のブラケットを作ってみました!
- 【追記】ATモードでの設定変更で他の接続方法も試してみる!
- 【追記】ESP8266(ESP-01)を使いWi-Fi経由で操作してみました!
- 最後に!
【Arduino】BluetoothモジュールHC-05・HC-06を使い無線通信をやってみる!
Bluetoothモジュール HC-05とHC-06の違い
こちらがBluetoothモジュールHC-05とHC-06です。
ArduinoやRaspberry Piなどマイコンボードを使った電子工作用途で使われるBluetoothモジュールとして定番的な?よく使われるモジュールです。
左側がHC-05で右側がHC-06となります。
形状はほぼ同じでBluetoothモジュールとしての機能もほぼ同じ内容となっています。
HC-05とHC-06モジュールの異なる点は、HC-06の方は子機(スレーブ)のみで機能するのに対し、HC-05では親機(マスター)と子機(スレーブ)のどちらでも設定できるようになっています。
親機(マスター)となるPCやスマホなどと接続するだけなら子機(スレーブ)として機能するHC-05やHC-06が使えますが、Bluetoothモジュール同士を接続したい場合ではどちらか1つを親機にする必要があるのでHC-05同士での接続(またはHC-05とHC-06)が必要になるということです。
プレステの本体(親機:マスター)とコントローラー(子機:スレーブ)といった感じですね!
機能的にはほぼ同じHC-05とHC-06ですが、ATコマンドモードに入るためのスイッチの有無、そして接続ピン数の違いなどあるので見ておきます。
【HC-05/HC-06】接続端子とATコマンドモードスイッチの違い
まず接続端子ですが、HC-05では[STATE][RXD][TXD][GND][VCC][EN]ピンの計6本の接続端子となっています。
それに対しHC-06では、[RXD][TXD][GND][VDD]の4本のみ接続端子が付けられています。
またHC-05ではモジュール基盤上にATコマンドモードに入るための物理スイッチが付いています。(HC-05でもスイッチが付いていないタイプのものもありました)
この形状の違いがHC-05とHC-06を見分ける基準みたいなものになるかと思います。
接続方法
[ATコマンドモード]による設定がありますが、このモジュールの使い方の概要が分かるようにまず接続方法から説明していきます。HC-05とHC-06はBluetoothモジュールとなりますが、Arduinoとの接続は通常のUARTシリアル通信による接続となります。
TXとRXの信号線でのやり取りなので非常に扱いやすく、接続も簡単です!
UART通信に関してはこちらの記事を参考にして下さい。
Arduinoとの接続はHC-05とHC-06で同じとなります。
UARTシリアル通信での接続なので使う端子は、[RXD][TXD][GND][VCC]の4本のみです。
モジュール電源は3.6V~6Vとなっているので、Arduinoの[5V][GND]端子に接続し電力供給します。(3.3Vではありません)
次に2つの信号線[RXD]と[TXD]は、Arduino側の[TX][RX]に接続します。
通常のシリアルでのやり取りですね。
HC-05 or HC-06 | Arduino |
VCC | 5V |
GND | GND |
RXD | TX |
TXD | RX |
ここで少し注意したいのが、HC-05(HC-06)の信号線RXDとTXDのロジックレベルは3.3Vとなっています。
ボードの裏面にもその事が記載されています。
Arduinoは5Vロジックなので電圧の調整が必要となってきます。
(HC-05 or HC-06)TXD→(Arduino)RXのラインは3.3V→5Vなので直結で問題ないのですが、(Arduino)TX→(HC-05 or HC-06)RXDのラインは5V→3.3Vとなるのでロジックレベルの調整が推奨されているようです。
簡単な方法として抵抗による分圧によりArduinoからの5Vを3.3Vに落として使います。
手元にあった1kΩと2.1kΩの2本の抵抗を使い接続しました。
抵抗による分圧は簡単に計算できますが、こちらを参考に手持ちの抵抗を使いRXDへの電圧が3.3Vになるように抵抗値を決めればいいと思います。
これらを考慮し接続したのがこちらとなります。
一応このようにBluetoothモジュールのRXD側は電圧を下げることが推奨されているようです
以後、抵抗を外した回路で進めていきますが、データシート&回路構成を詳しく調べたわけではないのでこのあたりは自己判断でお願いします。
接続自体は通常のシリアルでの接続なので非常に簡単ですね。
次に[ATモード]によるモジュールの設定をやっていきますが、子機(スレーブ)として使うだけならデフォルト設定のままでペアリング&接続しArduinoで使うことが出来ました。
ちなみにデフォルト設定(初期設定)は、PINコードは「1234」、ボーレートは9600bpsとなっていました。
PCなど親機からBluetoothデバイス名(HC-05やHC-06)を見つけ、PINコードを入力する通常のBluetooth端末とのペアリング方法で接続することが出来ます。
ATコマンドモードによるモジュールの設定準備
Bluetoothモジュールの設定(通信速度や機器名・PINコードなど)の確認や変更を行うための[ATコマンドモード]を使ってみます。
特に初期設定のままで問題ないのですが、親機(マスター)・子機(スレーブ)を割り当て複数モジュールを使いたい場合で分かりやすいデバイス名に変更したりPINコードを変更したい場合は必要となるので、初期設定がどのようになっているかを含め見ていきます。
ATコマンドモードでのHT-05/HT-06の設定確認&変更には、モジュールとPCを接続して行います。
USB-TTL(USB-シリアル)変換モジュールを使って接続してもいいのですが、今回はArduinoに接続しArduino IDEシリアルモニタを使ってやっていきます。
このように接続します。
シリアルモニタを使うのでHX-05(HX-06)接続のRX/TXはソフトウェアシリアルでD2/D3に割り当て、Arduinoはシリアルでのやり取りを中継するだけの動きとなります。
こちらのスケッチをArduinoに書き込み、HC-05(HC-06)の設定の確認&変更をやっていきます。
以後、ATコマンドによるモジュールの設定変更&確認はこのスケッチを使い行っていきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | // Bluetoothモジュール HC-05(HC-06) ATモード設定用スケッチ // シリアルモニタを使用した通信スケッチになります // https://burariweb.info // // HC-05はスイッチを押しながら電源投入でATモードに入ります。 // HC-06は電源投入と同時にATモードに入ります。 // // デフォルトのボーレートは HC-05(34800bps)・HC-06(9600bps)となっています。 // HC-05は[NL+CR]、HC-06は[改行なし]でコマンドを送信! // #include <SoftwareSerial.h> // Bluetoothモジュールとはソフトウェアシリアルで通信。 // TXD-(Arduino)D2,RXD-(Arduino)D3に接続。 // ArduinoからのTXは分圧してBluetoothモジュールのRXDに接続。 SoftwareSerial BTserial(2, 3); // RX,TX void setup() { Serial.begin(9600); Serial.println("AT コマンドを入力 :"); // HC-05のデフォルトでのボーレートは38400 // HC-06のデフォルトのボーレートは9600 BTserial.begin(38400); } void loop() { // HC-05(HC-06)から読み取りシリアルモニタに送信する if (BTserial.available()) { Serial.write(BTserial.read()); } // シリアルモニタからのデータを読み取りHC-05(HC-06)に送信する if (Serial.available()) { BTserial.write(Serial.read()); } } |
こちらのサイトを参考にさせて頂きました!
参考 Interfacing the HC-06 Bluetooth module with ArduinoArduino PROJECT HUBその際の接続は、RX-RXD/TX-TXDの接続になります。(記事追記しました)
またTera Termを使う方法も試してみましたが、私の環境がMacメインだという事もあり今回の方法が一番やりやすかったのでこれで進めていきます。
HC-05はマスター及びスレーブとして使うことができ、HC-06より使えるATコマンドが多くなっています。
またATモードの入り方や操作等の違いがあるため、まずHC-05から見ていきます。
HC-05ではボードのボタンを押した状態で電源を投入し起動後離すとATモード(設定モード)に入ります。
通常の起動ではLEDが素早く点滅しますが、ATモードに入りコマンドを受け付ける状態になるとLEDがゆっくりと点滅します。
この時のシリアルインターフェースの通信速度(ボーレート)は38400bpsに固定されます。(HC-06では9600bps)
- スイッチを押しながら電源を投入→LED点灯で離すとATモードに入ります(LEDがゆっくりと点滅)
上記接続&スケッチを使い、ここからHC-05の設定確認と変更を行っていきます。
シリアルモニタを立ち上げ、通信速度を9600bps、改行コードを[CRおよびLF]にしておきます。
HC-05で使えるATコマンドを見ていきます。
使う頻度が高いものをいくつかピックアップしてみました。
HC-05 ATコマンドによる設定確認&変更
上記回路に接続しスケッチの書き込みが出来たらBluetoothモジュールの設定の確認&変更をやっていきます。(特に初期設定から変える必要は必要はありませんが)
接続の確認[AT]
まず接続が正常に行われているかの確認です。
[AT]と入力しリターンを押します。
[OK]と返ってくればHC-05と接続が正常に行われています。
ファームウェアのバージョンを確認[AT+VERSION]
[AT+VERSION?]でファームウェアのバージョンが確認できます。このようにリターンが返ってきて確認ができます。
↓
+VERSION:4.0-20190815
デバイス名の確認&変更[AT+NAME]
[AT+NAME?]でデバイス名の確認できます。初期設定では「HC-05」となっていました。
↓
NAME:HC-05
OK
複数のモジュールを使う時など分かりやすい名前に変更したい場合は、[AT+NAME=(名称)]で変更出来ます。
例えばHC-05-1という名前に変更したい場合は[AT+NAME=HC-05-1]と入力します。
↓
OK
OKと返って来れば正常にデバイス名の変更が完了しています。
試しにもう一度[AT+NAME?]と入力すると
NAME:HC-05-1と返ってくることが確認できます。
親機(マスター) / 子機(スレーブ)の確認&変更[AT+ROLE]
[AT+ROLE?]で親機(マスター)および子機(スレーブ)の確認ができます。初期設定では[ROLL:0]が返ってきます。
スレーブ設定になっているということです。
↓
ROLE:0
AT+ROLE設定値 | 内容 |
0 | 子機(スレーブ) |
1 | 親機(マスター) |
HC-05はマスター/スレーブの設定ができます。(HC-06ではスレーブのみ)
設定を変更したい場合は、[AT+ROLE=(0 OR 1)]と入力します。
親機に変更したい場合は、[AT+ROLE=1]ですね。
↓
OK
一応確認でもう一度[AT+ROLE?]と入力すると[ROLE:1]と確認することが出来ます。
PINコード(パスワード)の確認&変更[AT+PSWD]
ペアリングする際に必要となるPINコード(パスワード)の確認です。
[AT+PSWD?]で現在設定されているPINコードの確認ができます。
初期設定では「1234」が設定されていました。
↓
PSWD:1234
分かりやすいパスワードに変更したい場合、[AT+PSWD=XXXX]任意の4桁の数字に変更出来ます。(例AT+PSWD=0000)
↓
OK
通信速度(ボーレート)の確認&変更[AT+UART]
通信速度(ボーレート)の確認です。
[AT+UART?]で現在設定されているボーレートの確認ができます。
初期設定ではHC-05/HC-06ともに9600bpsでした。
↓
UART:9600,0,0
変更したい場合は、[AT+UART=38400,0,0]のように入力し変更します。
アドレスの確認[AT+ADDR]
デバイスのアドレスの確認です。
HC-05同士を接続する際に必要となります。
[AT+ADDR?]でアドレスの確認ができます。(HC-06では確認ができません)
↓
ADDR:0021:09:006F93
工場出荷時の状態に戻す[AT+ORGL]
[AT+ORGL]で工場出荷時の状態に戻す事が出来ます。↓
OK
このあたりのATコマンドが使えれば問題ないかと思います。
HC-05 主なATコマンド | 内容 |
AT | 接続の確認 |
AT+VERSION? | バージョンの確認 |
AT+NAME(? or =) | デバイス名の確認&変更 |
AT+ROLE(? or =) | マスター or スレーブの確認&変更 |
AT+PSWD(? or =) | パスワード(PINコード)の確認&変更 |
AT+UART(? or =) | ボーレートの確認&変更 |
AT+ADDR? | アドレスの確認 |
AT+ORGL | 工場出荷時の状態に戻す |
他のATコマンドはこちらを参考にして下さい!
HC-06 ATコマンドによる設定確認&変更
次にHC-06の場合の設定方法です。
HC-05と少し仕様が異なっています。
まずHC-06にはATモードに入るための物理ボタンが付いていません。
電源投入後、他のデバイスとペアリングされていない状態であれば常にATモードになっています。(LEDが素早く点滅)
HC-05のように物理ボタンを押しながら通電させる必要がありません。
- HC-06では他のモジュールと接続されていない時は常にATモードとなっています!
初期状態の通信速度(ボーレート)は9600bpsとなっています。
そのため上記設定用スケッチの「BTserial.begin(38400);」の数字を9600に変更してArduinoに書き込んで下さい。(HC-05のATモードでのボーレートは38400bps固定でした)
25 26 27 | // HC-05のデフォルトでのボーレートは38400 // HC-06のデフォルトのボーレートは9600 BTserial.begin(9600); |
接続は同じです。
またHC-06ではATコマンド受付の終了文字を待機せず1秒後に入力したコマンドが実行されるようです。
そのためTera Termではコピペしてコマンドを入力する必要があるため(1秒では入力出来ないので)、今回こちらもArduinoを使って設定の確認&変更を行いました。
HC-06ではシリアルモニタの[改行なし]を選択して下さい。
HC-06で使えるATコマンドはHC-05よりかなり少なくなっています。
ATコマンドの使い方はHC-05と同じですが、モジュールからのリターンがないため現在の設定内容を確認する事が出来ません。(ATの接続確認とAT+VERSIONの確認はできました)
HC-06 ATコマンド | 内容 |
AT | 接続の確認 |
AT+VERSION | バージョンの確認 |
AT+NAME(名称) | デバイス名の変更 |
AT+BAUD(数値) | ボーレートの変更 |
AT+PIN(数値) | PINコードの変更 |
接続の確認[AT]
HC-05同様に[AT]と入力してOKが返ってくれば接続されています。
↓
OK
バージョンの確認[AT+VERSION?]
[AT+VERSION?]でバージョンの確認ができます。↓
HC-06-20190901
デバイス名の変更[AT+NAME(名称)]
HC-06では上記以外のコマンドではリターンが返ってこないのでデバイス名の確認ができません。
HC-05では[AT+NAME?]と入力すれば[NAME=HC-05 OK]というようなリターンがありましたが、HC-06ではこの返答がなく確認することが出来ません。
しかし変更は可能です。
[AT+NAME(名称)]で変更できます。
例えばHC-06-01と変更したい場合、[AT+NAMEHC-06-01]と入力すれば[OKsetname]とリターンが来て変更されたことの確認はできます。
↓
OKsetname
PINコードの変更
次にペアリングの際に必要となるPINコードの確認です。
初期設定ではこちらも「1234」に設定されていました。
PINコードを変更したい場合は、[AT+PIN(XXXX)]と入力します。
仮にPINコードを”0000″に変更したい場合、[AT+PIN0000]で変更できます。
↓
OKsetPIN
ボーレートの変更
通信速度(ボーレート)の変更は[AT+BAUD(数字)]を使います。
これも現在の設定値の確認は出来ませんが、変更することは出来ます。
仮に38400bpsに変更したい場合、[AT+BAUD6]と入力します。
OK38400とリターンがあり変更&確認ができます。
↓
OK(数字)
数字 | 通信速度(bps) |
1 | 1200 |
2 | 2400 |
3 | 4800 |
4 | 9600 |
5 | 19200 |
6 | 38400 |
7 | 57600 |
8 | 115200 |
ちなみにHC-05ではATモードでのデバイスとの接続は38400固定なので常にこの値となります。
HC-05では子機(スレーブ)のほかに親機(マスター)として使うことができ設定できる項目も多くなっています。
HC-06では設定できる項目は少なく、端末からのリターンがなく現在の設定を確認出来ないことが少し面倒ですね!
デバイスとのペアリング
ATコマンドにより設定確認&変更を見ていきましたが、、PCやAndroid端末のスマホやタブレットなどへの接続では子機として使うため初期設定で特に問題ないと思います。
初期設定ではボーレートが9600bps、またPINコードは1234となっており、これが分かっていればペアリングして使うことが出来ます。
HC-05(HC-06)を他のBluetoothデバイスとのペアリングは、通常のBluetoothデバイスと同様の手順となります。
HC-05(HC-06)はiPhoneとは接続できませんが、Android端末では「Bluetoothターミナル」などのアプリでやり取りが出来るようですね。
Android端末は持っていないのでPCと接続してみます。
HC-05(HC-06)に通電した状態でPC側からデバイス検索でBluetoothモジュールが出て来ます。(デバイス名の変更を行っていない場合HC-05やHC-06)
デバイスを選択し、PINコード(初期設定は1234)を入力すればデバイス間のペアリングが完了します。
通常のBluetoothデバイスの接続と同じですね。
PCとArduino間でBluetoothを使いデータのやり取りを行う!
HC-05(HC-06)の設定の確認ができたので、動作確認するための簡単なテスト回路&スケッチを作ってみました。
Arduinoに繋げたBluetoothモジュールをPCと接続し双方向でデータのやり取りを行うというものです。
シリアルモニタからの入力(“1” or “0”)でArduinoのオンボードLED(D13)のON/OFFを制御し、Arduino側のタクトスイッチの状態をシリアルモニタに送り表示させるという双方向でのデータのやり取りとなります。
先程接続したものにタクトスイッチを取り付けただけのものとなります。
LEDはオンボードLEDでも確認できますが、一応D13にLEDを繋げています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | // Bluetoothモジュール HC-05(HC-06) 動作テストスケッチ① // PC←→Arduino(HC-05 or HC-06)間のやり取り! // https://burariweb.info #include <SoftwareSerial.h> SoftwareSerial BTserial(2, 3); // RX,TX int BTint = 0; int SW = 1; void setup() { pinMode(13, OUTPUT); pinMode(7, INPUT_PULLUP); BTserial.begin(9600); } void loop() { if (BTserial.available()) { BTint = BTserial.read(); if(BTint == '1'){ digitalWrite(13, HIGH); } else if(BTint == '0'){ digitalWrite(13, LOW); } } SW = digitalRead(7); if(SW == HIGH){ BTserial.println("SW OFF"); } else if(SW == LOW){ BTserial.println("SW ON"); } delay(200); } |
スケッチを書き込み電源を投入します。
Arduino IDEのシリアルポートに表示されるBluetoothの仮想COMポートを選択します。
Macではこのように表示されますが、WindowsではCOMポートの設定が必要でした。
Bluetoothで接続している仮想COMポートを選択したらシリアルモニタを立ち上げます。
モジュールのLEDの点滅がゆっくり2回点滅に切り替わります。
これでPCとArduinoと接続したHC-05(or HC-06)と接続されました。
Arduinoに繋いだタクトスイッチの状態がシリアルモニタに『SW ON』『SW OFF』と表示されます。
また、シリアルモニタに「1」を入力するとArduino側のLEDが点灯、「0」を入力するとLEDが消灯します。
これが確認できたら双方向でのデータのやり取りが出来ているということですね。
下記動画ではArduinoの電源は外部電源を使いPCと完全に独立した状態となっています。
ちゃんとBluetoothでのデータのやり取りが出来ていますね!
Bluetoothモジュールを使っていますが、Arduinoとのデータのやり取りは通常のシリアル通信でのやり取りなので専用ライブラリなど必要なく簡単ですね!
UART通信に関してはこちらの記事も参考にして下さい。
Android端末は持っていないので試せていませんが、子機(スレーブ)としての接続だけなら簡単でPCやスマホを使ってコントローラーとしてArduinoを制御出来るので便利ですね!
早速、以前製作した4足歩行ロボットくんに組み込んでテストしてみました!
HC-05同士の接続(子機の設定)
次にHC-05同士での接続をやってみます。
片方を親機(マスター)としもう一方を子機(スレーブ)という接続です。
Arduino間でのデータのやり取りとかが出来ますね。
親機としてHC-05、子機にHC-06という組み合わせでも同じです。
親機と子機の設定が必要なので少し面倒となります。
手順はこちらの動画を参考にさせて頂きました。
まず子機設定に最低限必要な項目です。
必要に応じてデバイス名やPINコードの変更など行うと分かりやすいと思います。
①子機モードに設定(AT+ROLE=0)
親機として設定されている場合、[AT+ROLE=0]で子機(スレーブ)モードに設定しておきます。
②通信速度(ボーレート)の確認&変更(AT+UART)
HC-05のデフォルト設定ではボーレートは9600bpsに設定されていました。(ATモード接続中の38400とは別です)
現在の値を確認&必要なら変更を行います。(親機と子機の通信速度を合わせておく必要があるためです)
③アドレスの確認(AT+ADDR?)
デバイスのアドレスを確認しておきます。
親機が子機を識別するのに必要なアドレスとなります。
HC-05では[AT+ADDR?]でアドレスの確認ができます。(HC-06では単体で確認出来ないので後述します)
子機で必要な最低限の情報はこれだけです!
必要に応じてPINコードやデバイス名を分かりやすいものに変えておくのもいいと思います。
HC-05同士の接続(親機の設定)
次にもう1台のHC-05を親機として設定していきます。
①親機モードに設定[AT+ROLE=1]
子機として設定されている場合、[AT+ROLE=1]で親機モードに設定しておきます。
②通信速度(ボーレート)の確認 or 変更[AT+UART?]
子機側と同じ通信速度(ボーレート)になっているかの確認です。
[AT+UART?]で確認し、子機側と通信速度が異なるようなら子機と同じ通信速度に変更します。[AT+UART=○○,0,0]
③[AT+CMODE=0]の設定
以下で設定する指定したバインディングアドレスで接続する設定です。
④接続する子機のアドレスを指定[AT+BIND=○○]
先ほど子機の設定で調べたアドレスを指定します。
私の使っている子機のアドレスは「0021:09:006F93」でした。
「:」を「,」に置き換えて指定します。
これで親機の設定は完了です!
あとは両Bluetoothモジュールの電源を入れると親機が指定したアドレスのデバイスを見つけて自動的に繋がります。
下記動画では2台のHC-05の電源(VCC/GND)のみ繋げ、接続チェックをしています!
短いLEDの点滅から接続が完了すると、親機と子機のLEDが約5秒間隔で同期しながら点滅します。
子機にHC−06を使う場合のアドレスの確認
子機側にはHC−06を使うことも出来ます。
ただ先述のようにHC−06の場合、ATコマンドのリターンにより設定内容の確認ができません。(設定はできます)
そのため手順自体は上記HC-05の子機設定手順と同じですが、アドレスの確認だけがHC-06単体では出来ませんでした。
HC-05からアドレスの確認は出来るのでその方法となります。
上記親機設定したHC-05を使い子機(HC-06)のアドレスを調べます。
親機となるHC-05をATモードで起動し、子機となるHC-06はVCC/GNDのみ接続して駆動させておきます。
検出されたデバイスのアドレスが表示されます。(他のBluetoothデバイスも検出されます)
↓
+INQ:0021:09:00012E,1F00,FFEF,HC-06
デバイス名が最後に入っているので、これがHC-06のアドレス[0021:09:00012E]だということが分かります。
端末名の前2つはデバイスモードや信号強度だと思うので無視して構いません。
HC-06のアドレスが分かったので、同様にコロンをカンマに置き換えて[0021,09,00012E]とし、このアドレスを上記の親機設定の子機アドレスに使って設定する事が出来ます。
Arduino間でBluetoothを使いデータのやり取りを行う!
Bluetoothモジュール同士の接続が出来ました。
最後にBluetoothモジュール同士で双方向での簡単なデータのやり取りをやってみたいと思います。
先程ArduinoとHC-05・タクトスイッチを接続したものをもう1台用意し、一方のスイッチが押されると他のLEDが点灯する双方向でのデータのやり取りをやってみます。
先程使ったスケッチのシリアルモニタへの出力をBluetoothモジュールに変更したものとなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | // Bluetoothモジュール HC-05(HC-06) 動作テストスケッチ② // Arduino(HC-05)←→Arduino(HC-05 or HC-06)間のやり取り! // https://burariweb.info #include <SoftwareSerial.h> SoftwareSerial BTserial(2, 3); // RX | TX int BTint = 0; int SW = 1; void setup() { pinMode(13, OUTPUT); pinMode(7, INPUT_PULLUP); BTserial.begin(38400); } void loop() { if (BTserial.available()) { BTint = BTserial.read(); if(BTint == '1'){ digitalWrite(13, HIGH); } else if(BTint == '0'){ digitalWrite(13, LOW); } } SW = digitalRead(7); if(SW == HIGH){ BTserial.write('0'); } else if(SW == LOW){ BTserial.write('1'); } } |
完全に独立したArduino同士でBluetoothモジュールを介してデータのやり取りが出来ていますね!
下記動画では38400bpsに上げてテストしています。
通信速度の変更によりスイッチの反応スピードも変わってくるので、試してみるのも面白いかと思います。
【追記】モジュール固定用のブラケットを作ってみました!
BluetoothモジュールHC-05やHC-06を製作物に組み込む際に固定できるブラケットを作ってみました。
ブレッドボード上のテストでは特に問題にはならなかったのですが、以前製作した4足歩行ロボットに組み込んだ際に接続切れが頻発しました。
原因究明に結構時間を割かれてしまいましたが、どうやら激しい動きをさせた時にピンヘッダーに取り付けたワイヤーが脱落とまではいきませんが接触の関係で接続が切れていたようです。
一度接続が切れると無線モジュールでは再接続までに時間がかかり面倒となります。
HC-05やHC-06は小型モジュールとなるため固定用のビス穴などが用意されていません。
そこで製作物などに組み込む際にしっかりと固定できるブラケットを作ってみました。
これで接続切れも完全になくなりました。
【追記】ATモードでの設定変更で他の接続方法も試してみる!
ATコマンドモードでのBluetoothモジュールの設定変更の際の接続方法として、今回ご紹介したものとは別に他の接続方法についてもいくつかまとめてみました。
こちらの記事も参考にして頂ければと思います。
【追記】ESP8266(ESP-01)を使いWi-Fi経由で操作してみました!
小型Wi-FiモジュールESP8266(ESP-01)を使いArduinoを制御してみました。
ESP-01は今回ご紹介したBluetoothモジュールHC-05/HC-06と同様にArduinoで便利に使えるWi-Fiモジュールです。
スマホアプリを使ってArduinoをWi-Fi経由で操作する方法をご紹介しています。
最後に!
HC-05やHC-06は、接続も簡単でArduinoで便利に使えるBluetoothモジュールだと思います。
しかし冒頭でもお話したように技適に関しては取得されていないようなので使用には注意も必要です。
ジョイスティックシールドに取り付けてArduino無線コントローラーなんてのも簡単に出来ますね!
電子工作キットに付属していたものなど含め手元に複数のHC-05やHC-06があります。
ZS-040と書かれたモジュールはHC-05のように動作しますがATモードに入るためのスイッチが付いていなかったり変更できない項目があったりするようです。(ENピンをHIGHにしてATモードに入ると制限がなくなるのかな?)
私の手元にあるモジュールでは今回ご紹介した方法で全て設定&動作させることが出来ましたが、バージョン?(製造元?)などにより仕様に変更や異なる部分があるかもしれませんね!
技適の取得がされていませんが、電子工作用途で非常に便利に使えるBluetoothモジュールだと思います。
こんばんは。非常に詳しく書かれていて大変参考になります。ところで、2023何現在、本モジュールってまだ技適未取得なんでしょうかね?
そうですね、おそらく技適の取得はされていないようです!
Arduinoでは使いやすいBluetoothモジュールなのでちょっと残念です。