HC-05 Bluetoothモジュールをマスター/スレーブでペアリングする - ATコマンド完全ガイド
このArduinoチュートリアルでは、2つのHC-05 Bluetoothモジュールをマスターとスレーブデバイスとして設定・ペアリングする方法を学びます。以前のチュートリアルでは、HC-05をデフォルト設定(スレーブ)で使用し、AndroidスマホとArduinoの通信を行いました。詳細については、以下のビデオまたは文章チュートリアルをご覧ください。 両モジュールを設定するためにATコマンドモードに入る必要があります。手順は以下の通りです。 この状態で空のスケッチをArduinoにアップロード(アップロード時はRX/TX線を外す)。シリアルモニタを開き、「Both NL & CR」と「38400 baud」(デフォルト)を選択。これでコマンド送信準備完了です。 コマンド形式: スレーブ側は主にアドレス確認のみでOKです。 このアドレスをメモしておき、マスター設定時に使用します。名前、ボーレート、ペアリングパスワードなども変更可能ですが、今回はデフォルトのまま進めます。 もう一方のモジュールをマスターに設定します。 注意: アドレス指定時はコロン(:)をカンマ(,)に置き換えます。 設定完了後、通常モード(データモード)で再接続・再起動すると、数秒でマスターがスレーブに接続され、両モジュールのLEDが2秒ごとに点滅して接続成功を示します。 マスター側でポテンショメータを操作してスレーブ側のサーボモータを制御し、逆にスレーブ側のプッシュボタンでマスター側のLEDを制御する例です。 以上でマスター/スレーブペアリングと通信例の解説は終了です。問題があればコメント欄でお気軽にご質問ください。概要
HC-05 Bluetoothモジュールの設定 - ATコマンド

AT+<パラメータ名>?(現在値取得)、AT+<パラメータ名>=<値>(設定)。
スレーブ設定
AT → OK(テスト)AT+UART? → ボーレート確認(デフォルト38400)AT+ROLE? → +ROLE=0(スレーブモード確認)AT+ADDR? → アドレス取得(例: 98d3:34:905d3f)
マスター設定
AT+UART? でボーレート確認(38400で統一)AT+ROLE=1 でマスターモードに設定AT+CMODE=0 で接続モードを「固定アドレス」に設定AT+BIND=98d3,34,905d3f でスレーブのアドレスを指定(コロンをカンマに変換)
AT+CMODE=1とすると範囲内の任意デバイスに接続しますが、セキュリティ上固定アドレス(0)推奨です。完全なコマンドリストは「HC-05 AT Commands List」で検索可能です。2つのHC-05間通信 実践例

必要なコンポーネント
Arduinoソースコード
マスターコード
/*
* How to configure and pair two HC-05 Bluetooth Modules
* by Dejan Nedelkovski, www.HowToMechatronics.com
* == MASTER CODE ==
*/
#define ledPin 9
int state = 0;
int potValue = 0;
void setup() {
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
Serial.begin(38400); // Bluetoothデフォルトボーレート
}
void loop() {
if (Serial.available() > 0) {
state = Serial.read();
}
// LED制御(スレーブからのボタン信号)
if (state == '1') {
digitalWrite(ledPin, HIGH);
state = 0;
} else if (state == '0') {
digitalWrite(ledPin, LOW);
state = 0;
}
// ポテンショメータ読み取り→サーボ用値にマッピング→送信
potValue = analogRead(A0);
int potValueMapped = map(potValue, 0, 1023, 0, 255);
Serial.write(potValueMapped);
delay(10);
}スレーブコード
/*
* How to configure and pair two HC-05 Bluetooth Modules
* by Dejan Nedelkovski, www.HowToMechatronics.com
* == SLAVE CODE ==
*/
#include <Servo.h>
#define button 8
Servo myServo;
int state = 20;
int buttonState = 0;
void setup() {
pinMode(button, INPUT);
myServo.attach(9);
Serial.begin(38400);
}
void loop() {
if (Serial.available() > 0) {
state = Serial.read();
}
// サーボ制御(マスターからのポテンショメータ値)
myServo.write(state);
delay(10);
// ボタン読み取り→マスターへLED制御信号送信
buttonState = digitalRead(button);
if (buttonState == HIGH) {
Serial.write('1'); // LED ON
} else {
Serial.write('0'); // LED OFF
}
}動作説明
Serial.available()で着信チェック、Serial.read()でデータ取得myServo.write()でサーボ角度指定。ボタン状態を『1』/『0』でマスターへ返信
製造プロセス
- 湿度センサーの検証とキャリブレーションで精密測定を実現
- Bluetooth制御Arduinoカー完全自作ガイド – 3Dプリント&Arduino Nanoで作る2輪ロボット
- Arduino Nanoで作るBluetooth対応スマートコーヒーメーカー 〜温度グラフ表示と自動開始機能付き〜
- Bluetooth制御 ピックアンドプレースロボットキット:Arduino UNO + 2自由度アーム & スマートカーチャッシ
- Vixen LightsとArduinoでNeoPixelを制御する:ステップバイステップガイド
- Arduino と ADXL345 加速度センサーで姿勢トラッキング:ステップバイステップガイド
- ArduinoロボットカーをHC-05 Bluetooth、NRF24L01、HC-12でワイヤレス制御する
- 工具鋼を解き明かす:組成、製造、産業用途
- バンドソー vs 丸鋸:主要な違いを解説
- Bluetooth LE対XLE:資産追跡・監視の次世代
- Bluetoothと超音波の融合で実現する精密かつコスト効率の良いリアルタイム位置追跡