-
아두이노 레시피 : 블루투스 사용하기 - 기본편아두이노 레시피 2025. 2. 23. 12:57
# Recipe 8. 블루투스모듈(HC-06) 기본 편
스마트폰과 블루투스모듈(HC-06)로 LED를 제어해 봅시다ㅎ
photo by arduino projectHub
안녕하세요~ 아두이노 셰프입니다. 제가 언젠가 고등학교에 가서 아이들 연구활동 컨설팅을 했던 적이 있는데요. 그때 아두이노를 사용했던 친구들이 가장 많이 했던 질문이 블루투스에 대한 내용이었어요. (하긴, 무선통신자체가 어렵긴 하죠;; 통신의 특성상 하나라도 어긋나면 제대로 동작하지 않아서, 아이들이 시행착오를 많이 겪은 듯했어요.) 혹시 스마트폰으로 아두이노를 제어하고 싶나요? 그럼 블루투스가 가장 만만할 거예요.(실제로 코드도 그렇게 어렵지 않아요.) 오늘도 여러분을 위해 당장 써먹을 수 있는 블루투스 모듈(HC-06) 레시피를 준비해 봤어요. 블루투스를 이용해서 스마트폰으로 아두이노의 LED를 제어해 보자고요. 그럼 시작해 볼까요?
오늘의 재료 Ingredient
<메인 재료>
블루투스 모듈(모델명 : HC-06)
<그 외 재료>
아두이노 우노
수-수 점퍼케이블(8개)
브레드 보드
330Ω 저항(1개)
LED(1개)
메이킹 방법 Steps
Step 1. 선 연결하기 Wiring
a. 블루투스의 VCC는 아두이노의 5V에,
b. 블루투스의 GND는 아두이노의 GND에,
c. 블루투스의 TX는 아두이노의 D2번에,
d. 블루투스의 RX는 아두이노의 D3번에 연결해 주세요.
e. LED의 + 와 아두이노의 D7번 핀을 연결하고 그 사이에 저항(330옴)을 연결해 주세요.
(다리 긴 쪽이 +, 짧은 쪽이 - 에요.)
f. LED의 - 는 아두이노의 GND에 연결해 주세요.
(그림대로 따라 해 주시면 돼요~)
- - - - - - - - - -
Step 2. 블루투스 세팅하기 Setting
블루투스 모듈을 사용하기 전에, 간단하게 몇 가지 세팅할 필요가 있어요.
#include<SoftwareSerial.h> SoftwareSerial btserial(2,3); //rx,tx void setup() { // put your setup code here, to run once: Serial.begin(9600); btserial.begin(9600); } void loop() { // put your main code here, to run repeatedly: if(btserial.available()){ Serial.write(btserial.read()); } if(Serial.available()){ btserial.write(Serial.read()); } }
Step 3. 세팅하는 법 How to
차근차근 따라오세요~
● 코드를 아두이노 우노에 업로드해 주세요.
(업로드하기 전에 먼저, 연결한 블루투스의 통신핀(2,3번)을 빼주세요! 간섭 때문에 업로드가 실패할 수 있어요.)
● 업로드가 끝나면, 다시 통신핀을 아두이노와 연결해 주세요.
●시리얼 모니터 창을 열고 모니터 하단의 세팅을 'No line ending', '9600 baud'로 설정해 주세요.
●명령창에 'AT'라고 치고, 엔터를 눌러주세요.(대문자로 적어주세요.) "OK"라는 메시지가 뜨면 세팅을 할 수 있어요.
●명령창에 'AT+NAME 원하는 이름'을 치고, 엔터를 눌러주세요. "OKsetname"이라는 메시지가 뜨면 설정된 거예요.
이름은 당연히 영어로 해야겠죠?ㅎㅎ
●명령창에 'AT+PIN비밀번호'를 치고, 엔터를 눌러주세요. "OKsetPIN"이라는 메시지가 뜨면 설정된 거예요.
비밀번호는 4자리로 설정해 주세요.
●명령창에 'AT+ROLE=S'을 치고, 엔터를 눌러주세요. "OK+ROLE:S"라는 메시지가 뜨면 설정된 거예요.
주의! 모든 AT명령에는 띄어쓰기(스페이스)가 들어가면 안 돼요.
이제 블루투스 모듈의 기본적인 세팅이 끝났어요.
본격적으로 LED를 제어해 볼까요?
- - - - - - - - - -
Step 4. 아두이노 코드 Code review
여러분의 요리가 훨씬 간편해질 수 있도록, 숙성이 필요한 코드는 언제나 제가 준비할게요ㅎㅎ
오늘 코드는 조금 어려울 수 있는데요. 이벤트느낌으로 하는 레시피이니까 그냥 넘어가도 돼요~
#include<SoftwareSerial.h> //SoftwareSerial 이라는 라이브러리를 가져올게요. SoftwareSerial btserial(2,3); //2번핀을rx,3번핀을 tx로 사용할겁니다. //(아두이노의 RX는 블루투스의 TX에, 아두이노의 TX는 블루투스의 RX에 연결되어야 해요. 주고받아야 하니까ㅎ) #define led 7 //아두이노 7번핀을 led로 정의할게요. void setup() { // put your setup code here, to run once: btserial.begin(9600); //아두이노와 블루투스끼리의 통신속도를 9600으로 지정합니다. Serial.begin(9600); //아두이노와 컴퓨터와의 통신속도도 9600으로 지정합니다. pinMode(led,OUTPUT); //led를 제어하도록 led핀을 OUTPUT모드로 지정할게요. } void loop() { // put your main code here, to run repeatedly: if(btserial.available()){ //만약 블루투스가 통신가능한 상태라면, 아래 코드들을 실행하고, 아니라면 아무것도 하지 않습니다. char cmd = (char)btserial.read(); //문자 형식의 cmd라는 변수를 생성하고 블루투스로부터 들어오는 값을 넣어줄게요. Serial.println(cmd); //블루투스로부터 들어오는 값을 시리얼모니터에 출력하겠습니다. if(cmd == '1'){ //만약 블루투스가 받는 값이 문자 '1'이라면 digitalWrite(led,HIGH);} //led를 켜고 else if(cmd == '0'){ //아니라 문자 '0'이면 digitalWrite(led,LOW);} //led를 끕니다. } }
Step 5. 동작시키기 Working
● 코드를 아두이노 우노에 업로드해 주세요.
(업로드하기 전에 먼저, 연결한 블루투스의 통신핀(2,3번)을 빼주세요! 간섭 때문에 업로드가 실패할 수 있어요.)
● 업로드가 끝나면, 다시 통신핀을 아두이노와 연결해 주세요.
"블루투스를 스마트폰으로 제어하려면 앱을 사용해야 돼요. 잘 따라오세요~"
● 이제 스마트폰(안드로이드를 사용을 권장합니다..)의 ‘블루투스 연결’에 들어가 주세요.
● ’ 연결 가능한 디바이스’ 항목에 여러분이 설정한 이름이 뜰 거예요. 눌러서 등록해 주세요.
(비밀번호는 여러분이 설정한 번호랍니다~)
● 다음으로 ‘플레이스토어’에 들어가서 “Arduino bluetooth controller”를 검색해 주세요.
상단에 Giumig Apps에서 만든 앱이 있을 거예요. 설치해 주세요.
● 앱에 들어가면 ‘Connect to a device’ 항목에 여러분이 등록한 HC-06 모듈이 있을 거예요.
누르면, 모드를 설정할 수 있지요? ‘Switch mode’로 들어가 줍니다.
● 전원로고가 있을 건데요. 스위치 UI에요. 딱 두 개의 데이터만 보낼 수 있는 컨트롤러입니다.
● 오른쪽 상단에 설정로고 보이죠? 들어가면 켜질 때와 꺼질 때의 값을 설정할 수 있어요.
켜진 녹색에는 ‘1’을, 꺼진 적색에는 ‘0’을 입력해 줍니다. (키보드에서 완료를 눌러야 설정이 돼요!)
우아.. 고생하셨어요!! 이제 모든 준비가 끝났습니다~ㅎ
● 다시 스위치 컨트롤러로 돌아와서 스위치를 눌러보세요. LED가 잘 켜지고 꺼지나요?
● 시리얼모니터를 열면 스마트폰에서 어떤 값이 들어오는지 직접 볼 수 있어요.
오늘의 레시피는 여기까지입니다~ 오늘은 조금 내용이 길었죠?
과학시즈닝은 다음에 블루투스 고급 편에서 다뤄볼게요.
UART통신인 시리얼통신과 블루투스의 개념,
마스터, 슬레이브, AT커맨드 등등..
이 내용들을 지금 하면 여러분 머리 빠질지도 몰라요...ㅋ
다음에 쉽고 알차게 알려드릴게요~
- - - - - - - - - -
코드의 동작 알고리즘
알고리즘은 쉬운 말로 ‘진행절차’라고 할 수 있습니다.
코드가 어떻게 동작되는지 알아볼까요?
진행절차는 다음과 같습니다.
"블루투스로부터 데이터를 받는다."
-> "받은 값이 1이면 LED를 켜고"
-> "0이면 LED를 끈다."
이 정도면 되겠네요.
음.. 다음에 하자고 했지만...
SoftwareSerial을 설명하려면 어쩔 수 없군요ㅜㅜ
정말 시식느낌으로 살짝 알려드릴게요.
아두이노는 기본적으로 시리얼 통신이라는 통신방법을 사용합니다.
우리가 Serial이라는 함수를 사용한 것은
컴퓨터와 아두이노간의 통신을 위한 거예요.
(시리얼모니터에서 값을 출력했었잖아요?)
블루투스모듈과 아두이노끼리도
똑같이 시리얼통신을 사용합니다.
그런데 문제는
둘이 같은 통신방법을 사용하는데도,
사실 물리적인 통신포트는 딱 1개밖에 없다는 거예요.
(아두이노 우노 기준)
만약 컴퓨터와 아두이노가 통신하고 있다면,
원래는 블루투스와 아두이노는 통신할 수 없답니다.
그래서 소프트웨어적으로 통신포트를 만들 필요가 있는데요.
그걸 가능하게 해 주는 게 SoftwareSerial이라는 라이브러리예요.
이 라이브러리를 사용하면 임의로 가상의 시리얼통신들을 만들 수 있답니다.
소스코드가 조금은 이해되셨을까요?ㅎㅎ
- - - - - - - - - -
모듈요약 카드
이름 : 블루투스모듈 HC-06
설명 : 블루투스 통신을 가능하게 해주는 모듈이다. 통신방식으로는 시리얼통신을 사용한다. 1:1 통신만 가능하며, 통신거리는 약 10M 정도 된다. 주파수대역은 표준대역인 2.4 GHz~2.48 GHz이다. 학교에서 블루투스 프로젝트를 할 시, 가장 많이 사용되는 모델이다.
모듈의 구성 : VCC, GND, RX, TX 핀으로 구성되어 있다.
'아두이노 레시피' 카테고리의 다른 글
아두이노 레시피 : 초음파센서 - 기본편 (0) 2025.02.24 아두이노 레시피 : 온도센서 - 기본편 (0) 2025.02.23 아두이노 레시피 : 온습도센서 사용하기 - 기본편 (0) 2025.02.23 아두이노 레시피 : 모터드라이버 사용하기 - 기초편 (0) 2025.02.22 아두이노 레시피 : 릴레이 모듈 사용하기 - 기초편 (0) 2025.02.22