HC-05 Bluetoothモジュール:スマートフォンからArduinoを操作する
HC-05 Bluetoothモジュールの配線方法は?ピンと分圧回路、スマートフォンとのペアリング、LEDとリレーの操作、ATコマンド、HC-05とHC-06とHM-10の違い、iPhoneとの互換性、ESP32とPicoを解説します。
HC-05は、Arduinoのプロジェクトに無線のシリアル通信を加える、安価でとても普及しているBluetoothモジュールです。これを使えば、スマートフォンからLEDを点けたり、リレーでランプをオン・オフしたり、リモコンカーを走らせたり、センサーのデータをスマートフォンに送ったりできます。この記事では、HC-05を正しく安全に配線し、スマートフォンとペアリングし、最初のコードを書き、モジュールの設定を変えるATコマンドを使う方法をステップごとに見ていきます。

HC-05のしくみ
HC-05はクラシックBluetoothのSPP(シリアルポートプロファイル)を使い、「無線のシリアルケーブル」のように動きます。スマートフォンとペアリングして接続すれば、スマートフォンから送った文字はすべてモジュールのTXDピンを通ってArduinoに届き、ArduinoがRXDピンに書いたものはすべてスマートフォンに送られます。Arduino側ではBluetoothについて何も知る必要はなく、シリアルモニタと話すときと同じようにSerial.print()とread()を使います。
| 項目 | 値 |
|---|---|
| Bluetoothのバージョン | 2.0 + EDR(クラシック、SPP) |
| 通信距離 | 見通しのよい場所で約10 m |
| 電源電圧 | 3.6〜6 V(モジュール基板にレギュレーターあり) |
| ロジックレベル | 3.3 V |
| 初期ボーレート | 9600 baud(ATモードでは38400) |
| 初期PIN | 1234または0000 |
| 役割 | マスターとスレーブ |
HC-05、HC-06、HM-10の比較
| モジュール | Bluetooth | 役割 | ピン | iPhone |
|---|---|---|---|---|
| HC-05 | 2.0クラシック | マスターとスレーブ | 6 | 使えない |
| HC-06 | 2.0クラシック | スレーブのみ | 4 | 使えない |
| HM-10 | 4.0 BLE | マスターとスレーブ | 6 | 使える |

HC-05のピンと配線
基板にレギュレーターがあるのでモジュールは5Vから給電できますが、データピンは3.3 Vで動作します。ArduinoはHC-05のTXDピンからの3.3 Vの信号を問題なく読めます。逆方向では、Arduinoの5 VのTX信号をモジュールのRXDピンに直結せず、分圧回路を使ってください:Arduino TX → 1 kΩ → RXD、RXD → 2 kΩ → GND。こうすればRXDには約3.3 Vが届きます。
| HC-05のピン | 機能 | Arduino Uno |
|---|---|---|
| EN(KEY) | ATモードに入る | 接続しない(ATモードでは3.3 V) |
| VCC | 電源 | 5V |
| GND | グランド | GND |
| TXD | モジュールのデータ出力 | D10(SoftwareSerial RX) |
| RXD | モジュールのデータ入力(3.3 V) | D11、1 kΩ / 2 kΩの分圧回路を通して |
| STATE | 接続中はHIGH | 接続しない、または必要なら入力ピンへ |
LEDの状態とスマートフォンとのペアリング
モジュールに電源を入れると、LEDが速く点滅します。これは接続を待っている状態です。AndroidのスマートフォンのBluetooth設定で「HC-05」というデバイスを探し、PINに1234(だめなら0000)を入力してペアリングします。ペアリングしただけでは接続は開かれず、接続するのはBluetoothシリアルターミナルのアプリです。接続されると、LEDは2秒ごとに短く2回点滅します。LEDが2秒点いて2秒消えるなら、モジュールはATコマンドモードです。
スマートフォンとの最初の通信
次のコードは、Arduinoをスマートフォンとパソコンの間の橋渡し役にします。スマートフォンからの文字はすべてシリアルモニタに送られ、シリアルモニタに入力したものはすべてスマートフォンに送られます。接続をテストするのに最適な出発点です。
1#include <SoftwareSerial.h>
2
3SoftwareSerial bt(10, 11); // RX, TX → HC-05 TXD, RXD
4
5void setup() {
6 Serial.begin(9600);
7 bt.begin(9600); // veri modu hızı / data mode baud rate
8}
9
10void loop() {
11 if (bt.available()) {
12 Serial.write(bt.read()); // telefondan bilgisayara / phone to PC
13 }
14 if (Serial.available()) {
15 bt.write(Serial.read()); // bilgisayardan telefona / PC to phone
16 }
17}コードを書き込み、シリアルモニタを9600 baudで開きます。スマートフォンでGoogle PlayのSerial Bluetooth Terminalのようなアプリを使ってHC-05に接続し、何か入力してみてください。入力した内容がシリアルモニタに表示されます。シリアルモニタで入力した文字もスマートフォンに表示されます。これが動けば、接続、配線、ボーレートはすべて正しくなっています。
スマートフォンからLEDとリレーを操作する
次に、スマートフォンから届く文字に応じて動作させてみましょう。1が届くとLEDが点き、0が届くと消えます。Arduinoは命令のたびにスマートフォンへ返事も送ります。
1#include <SoftwareSerial.h>
2
3SoftwareSerial bt(10, 11); // RX, TX
4const int LED = 13;
5
6void setup() {
7 pinMode(LED, OUTPUT);
8 bt.begin(9600);
9 bt.println("Ready");
10}
11
12void loop() {
13 if (bt.available()) {
14 char c = bt.read();
15 if (c == '1') {
16 digitalWrite(LED, HIGH); // LED'i yak / turn the LED on
17 bt.println("LED ON");
18 } else if (c == '0') {
19 digitalWrite(LED, LOW); // LED'i söndür / turn the LED off
20 bt.println("LED OFF");
21 }
22 }
23}多くのBluetoothアプリでは、ボタンに好きな文字を割り当てられるので、スマートフォンに「On」と「Off」のボタンがある小さなリモコンを作れます。LEDの代わりにリレーモジュールをつなげば、同じコードでスマートフォンからランプや扇風機を操作できます。前進、後退、左、右を表すF、B、L、Rの文字をL298Nモータードライバに振り分ければ、Bluetoothで操作する車の基本にもなります。
ATコマンドでモジュールの設定を変える
HC-05の名前、PIN、ボーレートはATコマンドで変えられます。ATモードに入るには、モジュール上の小さなボタンを押したまま(またはENピンを3.3 Vにつないだ状態で)電源を入れます。LEDが2秒に1回のゆっくりした点滅になります。橋渡しのコードでbt.begin(38400)と書き、シリアルモニタの改行コードをCRおよびLF(Both NL & CR)に設定してコマンドを送ります。
| コマンド | 機能 |
|---|---|
| AT | 接続テスト。OKを返す |
| AT+NAME=BlueGrays | モジュールの表示名を変える |
| AT+PSWD="4321" | PINを変える(古いバージョンでは引用符なし) |
| AT+UART=9600,0,0 | データモードのボーレートを設定する |
| AT+ROLE=0 | スレーブにする(1でマスター) |
| AT+VERSION? | ファームウェアのバージョンを表示する |
| AT+ORGL | 工場出荷時の設定に戻す |
ESP32とRaspberry Pi PicoでBluetoothを使う
従来のESP32はクラシックBluetoothとBLEの両方を内蔵しており、BluetoothSerialライブラリを使えばHC-05なしでスマートフォンと接続できます。ただし、ESP32-S3とESP32-C3が対応しているのはBLEだけです。Raspberry Pi Pico WもBluetoothを内蔵しています。Bluetoothのない標準のRaspberry Pi Picoでは、HC-05をUARTのピンにつなぎます。Picoは3.3 Vで動作するので、今回は分圧回路は不要です。モジュールはVBUS(5V)ピンから給電します。
1from machine import UART, Pin
2
3bt = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1)) # GP0 → RXD, GP1 ← TXD
4led = Pin("LED", Pin.OUT) # kart üstü LED / onboard LED
5
6while True:
7 if bt.any():
8 c = bt.read(1)
9 if c == b'1':
10 led.on()
11 bt.write(b'LED ON\n')
12 elif c == b'0':
13 led.off()
14 bt.write(b'LED OFF\n')HC-05のプロジェクトアイデア
- Bluetoothで操作する車:L298Nモータードライバと2つのDCモーターで、スマートフォンから操作するロボットです。
- スマートホームのスイッチ:リレーモジュールで、スマートフォンからランプやコンセントをオン・オフします。
- 色を選べるランプ:スマートフォンから送った値でRGB LEDの色を設定します。
- ワイヤレスのセンサー表示:DHT11で読んだ温度と湿度を、スマートフォンのターミナルに送ります。
- ロボットアーム:スマートフォンのスライダーでサーボモーターを制御します。
- 2台のArduinoの通信:片方のHC-05をマスター、もう片方をスレーブにして、データを無線で送ります。
よくある間違いと対処法
- スマートフォンがモジュールを見つけられない:iPhoneを使っている、モジュールがほかの機器に接続されている、またはATモードのままになっています。
- 文字化けした文字が届く:ボーレートが合っていません。データモードはふつう9600、ATモードは38400です。
- ATコマンドに返事がない:モジュールがATモードになっていない、ボーレートが38400でない、または改行コードにCRおよびLF(Both NL & CR)が選ばれていません。
- コードを書き込めない:モジュールが0番ピンと1番ピンにつながっています。書き込み中は外すか、SoftwareSerialを使ってください。
- モーターが動き出すと接続が切れる:モーターが電源を乱しています。モーターは別の電源から給電し、モジュールの電源にコンデンサを加えてください。
- しばらくしてモジュールが壊れた:分圧回路なしでRXDピンに5 Vが入っていたのかもしれません。必ず1 kΩ / 2 kΩの分圧回路を使ってください。
HC-05は、有線のプロジェクトをワイヤレスにするいちばん簡単な方法です。モーター制御と組み合わせれば、はじめてのリモコンロボットを作る準備が整います。BlueGraysアプリには、L298Nを使ったBluetooth操作の車と障害物を避けるロボットが、回路図とコード付きでそろっています。
よくある質問
HC-05はiPhoneで使えますか?
使えません。iOSは、HC-05やHC-06が使うクラシックBluetoothのシリアル接続を、ふつうのアプリが開くことを許可していません。iPhoneには、HM-10のようなBLEモジュールか、BLE対応のESP32を使ってください。
HC-05の通信距離は?
見通しのよい場所で約10メートルです。壁、金属の面、ほかの無線機器があると距離は短くなります。屋内なら、同じ部屋や隣の部屋で安定して動きます。
HC-05とHC-06の違いは?
どちらもクラシックBluetoothを使います。HC-05はマスターにもスレーブにもなれ、ピンは6本です。HC-06はスレーブ専用で、ピンはふつう4本です。スマートフォンとの通信ならどちらでも十分ですが、2台のArduinoをつなぐには少なくとも1つのHC-05が必要です。
HC-05の初期PINは?
ほとんどのモジュールでは1234、一部では0000です。ATモードでAT+PSWDコマンドを使えば変更できます。ほかの人にプロジェクトを操作されたくないなら、初期PINを変えておくのがおすすめです。
HC-05で2台のArduinoを通信させられますか?
できます。片方のHC-05をAT+ROLE=1でマスターにし、AT+BINDコマンドでもう片方のモジュールのアドレスを設定します。2つ目のモジュールはスレーブのままです。電源を入れるとマスターが自動的にスレーブに接続し、2台のArduinoがシリアルポートで通信します。
RXDピンの分圧回路は本当に必要ですか?
おすすめします。HC-05のデータピンは3.3 Vで動作します。多くのモジュールはしばらく5 Vに耐えますが、時間がたつと壊れることがあります。1 kΩと2 kΩの抵抗でできる簡単な分圧回路で、そのリスクをなくせます。TXDピンには分圧回路は不要です。
この記事を読んだ後に作れるプロジェクト
全プロジェクトを見る
L298Nで作るBluetooth操作の車
スマートフォンをリモコンにして、自作のロボットカーを操作できます。ArduinoはBluetoothモジュールを通じてスマートフォンのリモコンアプリから指令を受け取り、モータードライバーで車輪を回します。前進、後退、左右や斜めへの移動ができ、速度もスマートフォンから調整できます。停止ボタンを押すと、短いブレーキ動作でモーターがすぐに止まります。

障害物回避ロボット
自分で進む道を見つける、賢い車を作ってみませんか?障害物回避ロボットは、前面の超音波センサーで周囲を常に調べます。障害物を見つけると停止し、サーボモーターで左右を確認して、最も障害物の少ない方向を選んで進みます。自動運転の基礎を学ぶのにぴったりの入門プロジェクトです。
ほかの記事
BlueGraysアプリ
この回路をスマホでステップごとに作る
回路図、コード、部品リストを1つの画面で確認できます。Arduino、ESP32、Picoのプロジェクトを200件以上用意しています。

