HC-06 블루투스 모듈 완벽 가이드: 핀아웃, 사양, 아두이노 연동, 응용
HC-06은 블루투스 2.0+EDR 기반의 슬레이브(Slave) 전용 모듈로, 마이크로컨트롤러와 스마트폰/PC 간 무선 시리얼 통신을 가장 저렴하고 간단하게 구현할 수 있는 대표적인 부품입니다. 마스터 역할은 못 하지만, 슬레이브로서 수동적 연결 대기만 필요한 대다수 DIY/교육/프로토타입 프로젝트에 최적입니다. 이 글에서는 HC-06의 핀아웃, 상세 사양, AT 명령어, 아두이노 연동 회로/코드, 실전 팁, 트러블슈팅까지 종합적으로 다룹니다.
HC-06 개요 및 버전 구분
| 버전 | 기판 색상 | 칩셋 | 펌웨어 | 특징 |
| HC-06 (구형) | 파란색/녹색 | CSR BC417 | Linvor / HC-06 | 초기 버전, AT 명령어 세트 제한적 |
| HC-06 (신형, ZS-040 등) | 빨간색/검정 | CSR BC417 / BK3231 | HC-06 / MLT-BT05 | AT+VERSION 등으로 버전 확인 필요. 펌웨어별 명령어 차이 있음 |
| HC-05 | 빨간색 (보통) | CSR BC417 | HC-05 | 마스터/슬레이브 전환 가능, AT 명령어 풍부, 상태 핀 있음 |
핵심: HC-06은 슬레이브 전용. 마스터 역할(다른 블루투스 장치에 능동적 연결) 필요 시 HC-05 또는 ESP32 사용.
핀아웃 (Pinout) - 일반적인 6핀 모듈 기준
| 핀 번호 | 이름 | 기능 | 전압 레벨 | 비고 |
| 1 | KEY / EN | 모드 선택 / 활성화 | 3.3V | Low/NC: 통신 모드, High: AT 명령 모드 (일부 버전: 부팅 시 High로 진입) |
| 2 | VCC | 전원 입력 | 3.6~6V (보드 내 LDO로 3.3V 변환) | 아두이노 5V 핀 연결 가능. 3.3V 직접 입력도 가능 (LDO 바이패스) |
| 3 | GND | 그라운드 | - | 공통 그라운드 필수 |
| 4 | TXD | 시리얼 데이터 송신 (모듈 → MCU) | 3.3V TTL | MCU RX 핀 연결. 5V MCU면 분압기 필요 |
| 5 | RXD | 시리얼 데이터 수신 (MCU → 모듈) | 3.3V TTL | MCU TX 핀 연결. 반드시 5V→3.3V 레벨 시프트 필요
|
| 6 | STATE | 연결 상태 표시 | 3.3V | 연결 시 High, 미연결 시 Low. LED 내장된 모듈도 있음 |
주요 사양 (Key Specifications)
| 항목 | 사양 |
| 블루투스 버전 | 2.0 + EDR (Enhanced Data Rate) |
| 동작 주파수 | 2.4GHz ISM 대역 (2.402~2.480GHz) |
| 전송 출력 | ≤ +4 dBm (Class 2, 약 10m 범위) |
| 수신 감도 | ≤ -84 dBm (0.1% BER) |
| 통신 속도 (UART) | 기본 9600 bps, 설정 가능: 1200~1382400 bps |
| 무선 전송 속도 | 1 Mbps (동기) / 2.1 Mbps (최대, EDR) / 160 kbps (비동기) |
| 변조 방식 | GFSK (1Mbps), π/4-DQPSK (2Mbps), 8DPSK (3Mbps) |
| 프로파일 | SPP (Serial Port Profile)만 지원 |
| 안테나 | 온보드 PCB 안테나 (일부 u.FL 커넥터 버전 존재) |
| 동작 온도 | -20°C ~ +55°C (일부 -40~+85°C) |
| 전원 전압 | 3.3V 코어, 모듈 보드 입력 3.6~6V (내장 LDO) |
| 동작 전류 | 페어링 중 ~30~50mA, 연결 후 ~8~15mA, 슬립 ~수 μA |
| 크기 | 약 27×13×2.5mm (모듈 단품), 36×5×16mm (기판 실장형) |
| 인증 | FCC, CE, RoHS (정품 기준) |
아두이노 연동 회로 (HC-06 + Arduino Uno/Nano)
배선도 (전압 분압 필수!)
아두이노 (5V 로직) HC-06 모듈 (3.3V 로직)
┌──────────────┐ ┌──────────┐
│ TX (D1) │────[1kΩ]──┤ │
│ │────[2kΩ]──┤ RXD │ ← 분압비 2/3: 5V → 3.3V
│ │ │ │
│ RX (D0) │◀──────────┤ TXD │ ← 3.3V → 5V 입력 가능 (아두이노 VIH > 3V)
│ │ │ │
│ GND │───────────┤ GND │ ← 공통 그라운드 필수!
│ 5V │───────────┤ VCC │ ← 5V 공급 (모듈 내 LDO로 3.3V 변환)
└──────────────┘ └──────────┘
주의사항:
- RXD 레벨 시프트 필수: 아두이노 5V TX → HC-06 3.3V RXD 직결 시 모듈 손상 위험. 저항 분압기(1kΩ + 2kΩ) 또는 양방향 레벨 시프터(예: BSS138 모듈) 사용.
- TXD는 직결 가능: HC-06 3.3V TX → 아두이노 5V RX는 아두이노의 VIH(최소 3V) 충족으로 보통 안전. 단, 3.3V 전용 MCU(ESP32, STM32, SAMD21 등)면 직결 OK.
- 공통 그라운드: 아두이노와 모듈 그라운드 반드시 연결.
- 별도 전원 권장: 아두이노 5V 핀 전류 한계(약 400~500mA, USB 전원 시)로 모듈 피크 전류(페어링 시 50mA+) 감당 불안정할 수 있음. 별도 5V/3.3V 레귤레이터 권장.
SoftwareSerial 사용 예시 (하드웨어 시리얼 보존)
#include
SoftwareSerial btSerial(2, 3); // RX=D2, TX=D3 (아두이노 기준: D2←모듈TXD, D3→모듈RXD)
void setup() {
Serial.begin(115200); // PC 디버그용
btSerial.begin(9600); // HC-06 기본 보레이트
Serial.println("HC-06 테스트 시작. 'AT' 명령 테스트 가능.");
}
void loop() {
// 모듈 → PC
if (btSerial.available()) {
Serial.write(btSerial.read());
}
// PC → 모듈
if (Serial.available()) {
btSerial.write(Serial.read());
}
}
AT 명령어 모드 진입 및 주요 명령어
AT 모드 진입 방법
- 모듈 전원 차단
- KEY/EN 핀을 High (3.3V, VCC 또는 3.3V 핀에 연결) 상태로 유지
- 전원 인가 → 모듈 부팅 시 AT 명령 모드 진입 (보레이트 보통 38400 또는 9600, 펌웨어별 상이)
- 시리얼 모니터에서 "AT" 전송 → "OK" 응답 확인
※ 일부 신형 펌웨어(MLT-BT05 등)는 전원 인가 후 1~2초 내에 KEY=High 펄스 주어야 진입. 데이터시트 확인 필수.
자주 쓰는 AT 명령어 (펌웨어별 차이 주의)
| 명령어 | 기능 | 예시 응답 | 비고 |
| AT | 연결 테스트 | OK | 기본 |
| AT+VERSION | 펌웨어 버전 확인 | Linvor V1.8 / HC-06 V2.0 등 | 버전별 명령어 차이 판단용 |
| AT+NAME<name> | 장치 이름 설정 | OKsetname | 예: AT+NAMEMySensor |
| AT+PIN<xxxx> | 페어링 PIN 코드 설정 | OKsetPIN | 기본 1234. 예: AT+PIN8888 |
| AT+BAUD<1-8> | UART 보레이트 변경 | OKbaud | 1=1200, 2=2400, 3=4800, 4=9600(기본), 5=19200, 6=38400, 7=57600, 8=115200 |
| AT+PARI<x> | 패리티 설정 | OKparity | 0=None(기본), 1=Even, 2=Odd |
| AT+STOP<x> | 스톱 비트 설정 | OKstop | 0=1비트(기본), 1=2비트 |
| AT+ROLE | 역할 확인 (슬레이브만) | OK+ROLE:S | HC-06은 슬레이브 고정 |
| AT+RESET | 모듈 재시작 | OK | 설정 적용 위해 필요 |
| AT+ORGL | 공장 초기화 | OK | 모든 설정 기본값 복원 |
스마트폰 앱 연동 (실전 예시)
- 안드로이드: Serial Bluetooth Terminal, Bluetooth Terminal, Arduino Bluetooth Controller 등 설치
- 폰 블루투스 켜기 → HC-06 검색 → 페어링 (PIN: 1234 또는 변경한 값)
- 앱 실행 → 장치 선택 → 연결 → 데이터 송수신 테스트
- 아두이노 측: 수신 문자 파싱하여 LED 제어, 센서 데이터 전송 등 구현
아두이노 수신 파싱 예시
String cmd = "";
void loop() {
while (btSerial.available()) {
char c = btSerial.read();
if (c == '\n') {
cmd.trim();
if (cmd == "LED_ON") digitalWrite(13, HIGH);
else if (cmd == "LED_OFF") digitalWrite(13, LOW);
else if (cmd.startsWith("PWM:")) analogWrite(9, cmd.substring(4).toInt());
btSerial.println("ACK: " + cmd);
cmd = "";
} else {
cmd += c;
}
}
}
트러블슈팅 (Troubleshooting)
- 페어링 안 됨 / 검색 안 됨
- ① 전원 안정적? (3.3V LDO 출력 확인) ② KEY/EN 핀 떠있지 않은가? (통신 모드 시 Low/GND) ③ 안테나 금속 물체 근접? ④ 다른 2.4GHz 간섭(Wi-Fi, 전자레인지)? ⑤ 모듈 불량 → 다른 모듈로 테스트
- 자주 끊김 / 통신 오류
- ① 보레이트 불일치 (모듈/아두이노/앱 모두 동일해야) ② 전원 노이즈 (디커플링 10μF+0.1μF VCC-GND 근접) ③ 레벨 시프트 누락 (RXD 라인) ④ SoftwareSerial 타이밍 오차 → 하드웨어 시리얼(메가: Serial1~3) 또는 하드웨어 UART 사용 ⑤ 안테나 방향/거리
- AT 명령 안 먹힘
- ① AT 모드 진입 조건 확인 (KEY/EN 핀, 부팅 시점) ② 보레이트: AT 모드는 38400 또는 9600 고정일 수 있음 ③ 줄바꿈 설정: "Both NL & CR" (아두이노 시리얼 모니터) ④ 펌웨어별 명령어 차이 (AT+HELP로 지원 명령 확인)
- 데이터 수신 안 됨 (TXD→RX)
- ① 배선: 모듈 TXD → 아두이노 RX (D0 또는 SoftwareSerial RX) ② 공통 GND ③ 아두이노 코드에서 Serial.read() / btSerial.read() 호출 확인
HC-06 vs HC-05 vs 대안 모듈 비교
| 모듈 | 역할 | BLE | AT 명령 | 가격 | 추천 용도 |
| HC-06 | Slave only | No | 기본 | $2~4 | 단순 시리얼 대체, 스마트폰 제어, 교육 |
| HC-05 | Master/Slave | No | 풍부 | $3~5 | 두 MCU 간 무선 링크, 마스터 필요 시 |
| HM-10 / HM-11 | Slave (Central/Peripheral) | Yes (4.0/4.2) | 풍부 | $4~6 | iOS 연동, BLE 비콘, 저전력 |
| ESP32 | Master/Slave/Central/Peripheral | Yes (5.0) | N/A (펌웨어) | $5~10 | 올인원: MCU+Wi-Fi+BLE, 고성능, 저가 |
| nRF52840 (Adafruit Feather 등) | All roles | Yes (5.0/5.1/5.2) | N/A | $15~25 | 전문 BLE/Thread/매터 개발, 초저전력 |
마무리
HC-06은 "싸고, 단순하고, 검증된" 블루투스 슬레이브 모듈의 대명사입니다. BLE, 마스터 역할, 고속 전송이 필요 없다면 여전히 훌륭한 선택입니다. 단, 3.3V 로직 레벨 시프트(RXD 라인)와 안정적인 전원 공급만 지키면 대부분의 프로젝트에서 문제없이 동작합니다. 신규 설계라면 BLE 지원과 더 나은 성능의 ESP32 또는 HM-10 계열을 우선 고려하시되, 레거시 호환성/단순 시리얼 대체/교육용으로는 HC-06이 여전히 유효합니다. 즐거운 무선 통신 프로젝트 되시고, 궁금한 점은 언제든 문의 주세요!