ワイヤレスArduinoプログラミングシールド – HC-05 BluetoothでUSBケーブル不要に
必要な部品と材料
| HC-05 Bluetoothモジュール (6ピン、キーピン/ENピン付き) × 1 |
| Arduino UNO × 1 (ターゲットボード) |
| 抵抗 1kΩ × 1 (電圧分割用) |
| 抵抗 2.2kΩ × 1 (電圧分割用) |
| コンデンサ 100nF (0.1μF) × 1 (リセットライン用) |
| ユニバーサル基板、ピンヘッダー/ソケット、配線材 × 1式 |
開発環境
- Arduino IDE
プロジェクト概要
Arduinoへのスケッチ書き込みに毎回USBケーブルを繋ぐ手間を解消する、HC-05 Bluetoothモジュールを使ったワイヤレスプログラミングシールドの製作記事です。HC-05をATコマンドで設定変更し、Arduinoのリセット信号をBluetooth経由で制御できるようにすることで、PCから無線でスケッチアップロードが可能になります。
仕組み
- HC-05設定変更 (ATコマンドモード): ボーレート 115200bps、スレーブ役割、極性設定等を変更
- リセット制御回路: HC-05のPIO9 (ピン32) から Arduino RESETピンへ、電圧分割 (3.3V→5V系対応) + 100nFコンデンサでDTR相当のパルス生成
- シールド化: ユニバーサル基板に実装し、Arduino UNOにスタック可能な形状に
手順1: HC-05をATコマンドモードに入れる
HC-05のキーボタンを押しながらVCC通電、またはキーピン(EN/KEY)を3.3Vに接続してからVCC通電。LEDが2秒間隔でゆっくり点滅すればATモード。
手順2: ATコマンドで設定変更 (Arduino経由でシリアル中継)
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(10, 11); // RX, TX (HC-05接続ピン)
void setup() {
pinMode(9, OUTPUT);
digitalWrite(9, HIGH); // HC-05 KEYピンをHIGHにしてATモード維持
Serial.begin(9600);
Serial.println("Enter AT commands:");
BTSerial.begin(38400); // HC-05デフォルトATモードボーレート
}
void loop() {
if (BTSerial.available()) Serial.write(BTSerial.read());
if (Serial.available()) BTSerial.write(Serial.read());
}
シリアルモニター (9600bps、改行CR+LF) で以下を順次送信:
| コマンド | 意味 | 応答例 |
|---|---|---|
AT+ORGL | 工場出荷設定にリセット | OK |
AT+NAME=BLUE_P | デバイス名設定 (任意) | OK |
AT+ROLE=0 | スレーブモード | OK |
AT+POLAR=1,0 | LED極性: 接続時高速点滅 | OK |
AT+UART=115200,0,0 | ボーレート115200、データ8bit、パリティなし、ストップ1bit | OK |
AT+INIT | SPPプロファイル初期化 | OK |
手順3: 書き込み用配線に変更 (シールド実装)
| Arduino | HC-05 | 備考 |
|---|---|---|
| TX (D1) | RX | レベルシフト不要 (3.3V許容) |
| RX (D0) | TX | |
| RESET | PIO9 (ピン32) | 電圧分割: HC-05側 1kΩ/2.2kΩ → Arduino RESET |
| 5V | VCC | |
| GND | GND |
リセット回路のポイント: Arduino UNO (ATmega328P) はRESETピンにLowパルスでリセット。HC-05のPIO9は3.3V出力なので、5V系ArduinoのRESETを確実にLowに引き下げるため、PIO9 → 1kΩ → RESETピン → 2.2kΩ → GND の分圧回路 + RESET-GND間に100nFコンデンサでパルス整形。
手順4: PCとHC-05をペアリング
- Windows「Bluetoothとその他のデバイス」→「BLUE_P」選択 → PIN「1234」
- 「Bluetoothの詳細設定」→「COMポート」タブで 送信 (Outgoing) 側のCOMポート番号 を確認 (例: COM6)
- ペアリング後、HC-05 LEDが1秒間隔点滅 (接続済み状態)
手順5: Arduino IDEでワイヤレス書き込み
- Arduino IDE → ツール → シリアルポート → 手順4で確認した 送信側COMポート を選択
- ボード: Arduino UNO 選択
- スケッチ例「Blink」等を開き、書き込みボタン
- 成功すればLED点滅開始!
トラブルシューティング
| 症状 | 原因・対策 |
|---|---|
| 「同期エラー (sync error)」 | ボーレート不一致。HC-05とIDEのボーレート両方115200か確認。リセットパルス幅不足 → コンデンサ容量調整 (47nF〜220nF) |
| ATコマンドで「ERROR」 | 配線確認、キーピンがHIGHか確認、ボーレート38400で開始か確認 |
| ペアリングできない | HC-05がATモードのまま (LEDゆっくり点滅) → 再起動で通常モードに |
| 書き込み途中で失敗 | Bluetooth通信不安定 → 距離を近づける、金属障害物避ける、電源安定化 |
応用・拡張
- HC-06では不可: HC-06はPIO9制御不可、ATコマンドでボーレート変更のみ。書き込みにはHC-05必須。
- Arduino Mega/Leonardo等も可能: RESETピン位置とブートローダー対応ボーレート (通常115200) に合わせればOK
- ESP32/ESP8266なら標準でWiFi/Bluetooth OTA対応: よりモダンな選択肢
- ケース一体型シールド化: 3Dプリントケースに組み込んでポータブルに
回路図
プロジェクトページの Schematics を参照 (ユニバーサル基板レイアウト含む)
参考動画・リンク
- 製作動画: 作者のYouTubeチャンネル参照
- 新版リリース情報: 作者のブログ/チャンネルで公開
製造プロセス
- Bridge Shield でスマートロボットを構築:Raspberry Pi と Arduino の統合
- Arduinoで作るモニター用Ambilightシステム:没入感アップの自作ガイド
- Web制御DMX照明システム:Arduino Megaマスターコントローラー
- ArduinoとInfineon 3D磁気センサーで作る無線磁気データ転送
- Bluetooth操作のArduinoスパイボットを自作する
- Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
- ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター
- Android加速度センサーで操作するラジコン車両:Raspberry Pi・Arduino・モーターシールド連携
- Arduino UNO WiFi Webサーバー:ブラウザからLEDをON/OFF制御
- USB-MIDI機器をBluetooth LEでiOSに無線接続 ─ Arduinoベースの3つのアダプター設計
- スマートワイヤレス照明スイッチコントローラー:Arduinoで物理スイッチを遠隔操作