이 아두이노 블루투스 튜토리얼에서는 HC-05 모듈로 블루투스 통신을 이용해 아두이노를 제어하는 방법을 배웁니다. 아래 비디오를 시청하거나 작성된 튜토리얼을 읽어보세요.
개요
이 튜토리얼은 두 가지 예제로 구성됩니다: 스마트폰으로 아두이노 제어, 노트북/PC로 아두이노 제어. HC-05 블루투스 모듈 설정과 두 아두이노 보드 간 마스터/슬레이브 통신은 다음 튜토리얼에서 다룹니다.
첫 번째 예제인 스마트폰 제어에 앞서 HC-05 블루투스 모듈을 자세히 살펴보겠습니다. HC-06은 슬레이브만 가능하지만 HC-05는 마스터 설정도 가능해 두 아두이노 보드 간 통신 가능. 여러 버전이 있지만 브레이크아웃 보드형이 연결이 쉬워 추천. HC-05는 블루투스 SPP(시리얼 포트 프로토콜) 모듈로 아두이노와 시리얼 통신으로 통신.
필요한 부품은 아래 사이트에서 구할 수 있습니다:
HC-05 블루투스 모듈 …………….
아두이노 보드 ……………………………
브레드보드와 점퍼 와이어 ………
회로도
모듈을 아두이노 보드에 연결하는 방법:
사용 모듈은 브레이크아웃 보드에 전압 레귤레이터가 있어 3.6~6V 전원 공급 가능. 하지만 데이터 핀 로직 레벨은 3.3V. 아두이노 TX(5V 출력)와 블루투스 모듈 RX(3.3V 입력) 사이는 전압 분배기로 연결해야 모듈 손상 방지. 블루투스 모듈 TX(3.3V)와 아두이노 RX는 직접 연결 가능(아두이노에서 하이 로직으로 인식).
아두이노 블루투스 통신 예제 소스 코드
아두이노 보드와 스마트폰 간 통신용 아두이노 코드 작성. 간단한 LED 온오프 예제로 통신 이해.
#define ledPin 7
int state = 0;
void setup() {
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
Serial.begin(38400); // 블루투스 모듈 기본 통신 속도
}
void loop() {
if (Serial.available() > 0) {
state = Serial.read();
}
if (state == '0') {
digitalWrite(ledPin, LOW);
Serial.println("LED: OFF");
state = 0;
} else if (state == '1') {
digitalWrite(ledPin, HIGH);
Serial.println("LED: ON");
state = 0;
}
}코드 언어: Arduino (arduino)
설명: LED 연결 핀 정의, 스마트폰 데이터 저장용 변수 정의. setup에서 LED 핀 출력 설정 후 바로 로우. 시리얼 통신 38400 보드레이트 시작(블루투스 모듈 기본값). loop에서 Serial.available()로 시리얼 포트 읽을 데이터 확인, 있으면 Serial.read()로 읽어 "state" 변수 저장. 문자 '0' 수신 시 LED 끄고 "LED: OFF" 문자열 스마트폰으로 전송. "state" 변수 0으로 리셋해 위 코드 한 번만 실행되게. "state" 변수는 정수형이므로 스마트폰에서 오는 문자 '0'은 실제 정수값 48(ASCII '0')이 저장됨. 그래서 if문에서 문자 '0'과 비교. 문자 '1' 수신 시 LED 켜고 "LED: ON" 전송.
코드 업로드 준비됐지만 TX, RX 라인 분리 필요(업로드 시 아두이노가 시리얼 통신 사용하므로 RX(디지털 0), TX(디지털 1) 핀 바쁨). 아두이노의 다른 TX, RX 핀 사용하면 이 단계 생략 가능하지만 SoftwareSerial.h 라이브러리 필요.
관련: HC-05 블루투스 모듈 두 개 마스터/슬레이브 페어링 설정 | AT 명령어
스마트폰을 HC-05 블루투스 모듈과 아두이노에 연결
스마트폰 블루투스 활성화 → HC-05 모듈 검색.
기기 페어링, HC-05 기본 비밀번호 1234. 페어링 후 아두이노 제어용 앱 필요. 플레이 스토어에 많은 앱이 있지만, 이 튜토리얼에서는 MIT 앱 인벤터로 직접 만든 커스텀 앱 사용. MIT 앱 인벤터는 안드로이드 앱 제작에 훌륭하고 쉬운 도구이며, 다음 튜토리얼에서 직접 커스텀 앱 만드는 단계별 가이드 제공.
이 예제용 앱 다운로드:
Arduino Bluetooth Tutorial Example Android App
1 file(s) 1.38 MB Download
연결 버튼으로 스마트폰과 블루투스 모듈 연결, 버튼 아래 상태 텍스트로 연결 성공 여부 표시. "Turn ON", "Turn OFF" 버튼으로 LED 제어. 버튼 위 텍스트는 버튼 누를 때 아두이노가 스마트폰으로 다시 보내는 문자열.
노트북/PC로 블루투스 통신해 아두이노 제어
노트북/PC로 블루투스 제어하는 방법. 먼저 노트북 블루투스 설정에서 HC-05 모듈과 페어링. '1234' 비밀번호로 페어링.
페어링 후 노트북 장치 관리자 > 포트(COM & LPT)에서 "Standard Serial over Bluetooth link" 두 개 등장. 여기서 시리얼 포트 COM 포트 번호 확인.
이전과 같은 LED 온오프 예제, 같은 아두이노 코드 사용.
Processing IDE 소스 코드
Processing IDE로 아두이노 제어 프로그램 작성. 소스 코드:
import processing.serial.*;
Serial myPort;
String ledStatus = "LED: OFF";
void setup() {
size(450, 500);
myPort = new Serial(this, "COM5", 38400); // 시리얼 통신 시작
myPort.bufferUntil('\n'); // 시리얼 포트 데이터 읽을 끝 문자: '\n' (New Line)
}
void serialEvent(Serial myPort) {
// 시리얼 포트 읽을 데이터 있는지 확인
ledStatus = myPort.readStringUntil('\n'); // 아두이노에서 보낸 문자열("LED: OFF/ON") 읽어 "ledStatus" 변수에 저장
}
void draw() {
background(237, 240, 241);
fill(20, 160, 133); // 녹색
stroke(33);
strokeWeight(1);
rect(50, 100, 150, 50, 10); // Turn ON 버튼
rect(250, 100, 150, 50, 10); // Turn OFF 버튼
fill(255);
textSize(32);
text("Turn ON", 60, 135);
text("Turn OFF", 255, 135);
textSize(24);
fill(33);
text("Status:", 180, 200);
textSize(30);
textSize(16);
text("Program made by Dejan Nedelkovski,\n www.HowToMechatronics.com", 80, 320);
text(ledStatus, 155, 240); // 아두이노에서 온 문자열 출력
// "Turn ON" 버튼 눌림
if (mousePressed && mouseX > 50 && mouseX < 200 && mouseY > 100 && mouseY < 150) {
myPort.write('1'); // 문자 '1' 전송 → LED 켜짐
// 버튼 눌림 시 빨간색 하이라이트
stroke(255, 0, 0);
strokeWeight(2);
noFill();
rect(50, 100, 150, 50, 10);
}
// "Turn OFF" 버튼 눌림
if (mousePressed && mouseX > 250 && mouseX < 400 && mouseY > 100 && mouseY < 150) {
myPort.write('0'); // 문자 '0' 전송 → LED 끔
stroke(255, 0, 0);
strokeWeight(2);
noFill();
rect(250, 100, 150, 50, 10);
}
}코드 언어: Arduino (arduino)
설명: Serial 라이브러리 포함, 시리얼 객체 생성으로 시리얼 통신 활성화, LED 상태용 문자열 변수 정의. setup에서 프로그램 윈도우 크기 설정, 시리얼 통신 시작. COM 포트 번호는 장치 관리자에서 확인한 두 개 중 하나 시도. 다음 줄은 시리얼 포트 버퍼링 정의, 우리 경우 새 줄(\n)까지. 아두이노가 println()으로 "LED: OFF" 또는 "LED: ON" 전송 시마다 새 줄 생성. serialEvent()로 시리얼 포트 읽을 데이터 확인, 있으면 readStringUntil()로 아두이노에서 보낸 데이터 읽기(우리 경우 "LED: OFF" 또는 "LED: ON").
메인 draw() 함수(계속 반복)에서 모든 그래픽과 기능 구현. 배경색, 채우기 색, 선 굵기/색 설정, rect()로 버튼 두 개 그리기. text()로 모든 텍스트 출력, 아두이노에서 온 ledStatus 문자열 포함. 버튼 기능 구현: 첫 번째 if문으로 "Turn ON" 버튼 영역 제한, 버튼 누르면 문자 '1' 시리얼 포트로 전송 → LED 켜짐. 다음 네 줄은 버튼 눌림 시 빨간색 하이라이트. "Turn OFF" 버튼도 동일.
프로그램 준비 완료. 실행 버튼 클릭하면 노트북과 아두이노 간 블루투스 통신 자동 활성화. HC-05 모듈 2초마다 깜빡임(연결 표시), 노트북으로 LED 제어 가능.
이 튜토리얼은 여기까지지만, 다음 튜토리얼에서 HC-05 블루투스 모듈 설정과 두 아두이노 보드 간 마스터/슬레이브 블루투스 통신 방법 다룰 예정.