반응형

【 아두이노모듈#16】아두이노 2대로 블루투스 통신하기! (HC-05

 아두이노 두 대 상호간 통신을 통해 데이터를 서로 주고 받을 수 있는 방법이 있다. 바로 블루투스 모듈인 BlueTooth module (HC-05 또는 HC-06)를 이용하면 된다. 

 다르게 이야기 해서, 아두이노 RC Car가 있고, 이를 유선이 아닌 무선으로 제어하고자 할 때 블루투스 모듈을 이용하면 제어가 가능하다. 

우선 두 대의 아두이노+블루투스 모듈 서로간 기본 통신법에 대해 다루고자 한다.  차 후에는 RC 카에 적용하여, 무선으로 제어 해보고자 한다. 
 해보면 알겠지만, 블루투스 모듈 제어가 다소 까다롭다. 영상처럼 단번에 되지 않을 것이다. 절차와 조건이 잘 맞아야 하니,  차분하게 글과 영상을 보면서 따라 해본다면, 문제가 생겨도 충분히 해결해 나갈 수 있을 것이다.

Let's get it~!

 

▶ BT(BlueTooth) 모듈 설명 :

 

 블루투스 모듈은 크게, 통신규격 버전에 따라 '2.0버전 모듈'과 '4.0버전 모듈'이 있고, 저전력으로 동작되는 '4.0 BLE 모듈(HM-10)' 등이 있다. 
그리고, 2.0 모듈(혹은 2.0 이하 버전) 중에서는 크게 HC-05 와 HC-06 모델이 대표적이다. 
이번에 다룰 블루투스는 2.0 제품군이고, 그 중에서 HC-05모듈을 중심으로 다루고자 한다.  HC-06 모듈도 방법적으로 조금의 차이가 있겠지만, HC-05 모듈을 잘 다루어 본다면, 크게 어렵지 않을 것이다. 

 그리고 중요사항으로 HC-05 모듈과 HC-06 모듈의 초기 설정값(공장 초기값)은 아래와 같다. (단, 펌웨어 버전에 따라 다를 수 있음)

HC-05 모듈과 HC-06 모듈의 초기 설정값

 HC-05와 HC-06의 외관상 큰 차이점은, 외부 버튼 스위치가 있고 없고의 차이가 있다. 또한 핀수가 각각 6핀과 4핀이다. (HC-06이 6핀도 있음)  HC-05모듈은 기본 슬레이브로 설정되어 있지만 AT명령어 모드에서 마스터로 변경이 가능하지만,  HC-06모듈은 슬레이브 모드만 지원된다.   
※ 주의해야할 것은 서로 통신하기 위해서는 하나는 마스터(Master), 하나는 슬레이브(Slave)로 설정되어야 페어링(연결) 되면서 통신이 가능해진다.  따라서 블루투스 모듈끼리 통신을 위한 회로를 구성할 때는 기본적으로 HC-05모듈 하나가 있어야 한다.

그런데, HC-06모듈의 펌웨어 버전이 1.7 이상에서는 AT명령으로 마스터 모드 설정이 가능한데, 펌웨어 3.0 이상에서는 전송옵션(시리얼모니터 설정)도 Both NL & CR로 변경되었다.  

 [ ※ HC-05 모듈은, 최근에 출시 되는 제품의 경우 펌웨어 버전이 3.0 버전으로 출시 되고 있다. 2017.06.01 기준 ]

 모듈에 따른 블루투스 통신 방법은 , 

  1번. 'HC05 ↔ HC05' 

  2번. 'HC05 ↔ HC06' 

  3번. 'HC06 ↔ HC06'   이런 형태로 가능하다. 

 

[ HC-05 스팩 ]

- 칩셋 : CSR Bluetooth chip ,  Bluetooth V2.0 표준 프로토콜 사용

- 주파수 : 2.4GHz~2.8GHz  ISM band

- Serial UART 통신속도 : 4800~1382400Bps  지원

- 입력전압 : 3.6V~ 6V
- 페어링 거리 : 최대 10M (장애물 및 조건에 따라 짧아짐)

- 전력 : +3.3VDC 일때 50mA

- 소모전류 : 통신시(30~40mA),  대기시 (8mA)

- 동작온도 : -20℃ ~ 40℃

- 크기 : 26.9mm x 13mm x 2.2mm

- Password (Pin code) : 1234  (default)

[ 코드 작성 시 아래 통신속도 구분에 주의 할 것! : HC-05기준이며, 펌웨어 버전에 따라 달라질 수 있음]
- 블루투스 통신속도(default) : 9600bps
- AT명령어 모드 통신 속도(default) : 38400bps     


[ HC-05 마스터모드 설정 방법 ]
- 회로 연결 : 
 먼저 아래 연결도를 참고하여 연결하여야 한다.  다만 주의해야 할 것은 블루투스 모듈의 Rx단자에 입력되는 신호의 레벨은 3.3V여야 한다.  하지만 아두이노 포트의 출력은 5V레벨이기 때문에 3.3V레벨로 다운시켜 입력한다. 
여기서는 가장 손쉬운 레벨변환 방법인 1㏀저항과 2㏀저항을 이용한 전압분배 방법을 이용한다. 

만약, Vin 전압이 5V라면, 5V의  2/3 전압은 약 3.3V가 된다.(=Vout 출력 전압) 
즉, Vin에 아두이노 포트 출력(여기서는 3번 포트)을 연결하였을 때 5V 레벨의 High 신호는 Vout 으로 3.3V레벨의 신호로 낮추어 출력되며 이를 블루투스 수신단자 Rx로 입력되도록 하기 위함이다.
- 기본(default)은 슬레이브(Slave)모드로 설정되어 있으며, 마스터(Master)모드로 바꾸기 위해서는, AT 커맨드모드(Command mode-명령어모드)로 진입하여 설정하게 되어 있는데, 커맨트 모드 진입은 아래처럼 회로 연결을 하고 HC-05모듈에 붙어 있는 스위치를 이용하여 진입할 수 있다.  (경우에 따라 아두이노의 UART 통신단자인 0번, 1번 포트로 연결하여 작업이 가능하나, 0, 1 포트를 사용하게 되면 아두이노 프로그램 전송이 안 되어 번거로울 수 있다)



-위와 같이 회로 연결을 하였다면, HC-05모듈에 공급된 전원을 잠시 제거한 상태에서 HC-05모듈에 부착된 작은 스위치를 누르면서 전원 공급을 다시 넣어 준다. (이때, 스위치에서 손을 바로 떼지말고, 약 2초 정도 계속 눌러 준다)

- 그러면, 빠르게 깜빡이던 모듈의 LED가 2초 간격으로 깜빡이는 것을 확인 할 수 있을 것이다. 

그런 다음 아두이노 IDE의 시리얼 모니터 창을 열고 아래와 같은 AT 통신 명령어를 이용하여 마스터/슬레이브 설정과 여러가지 설정이 가능해진다. 

- 우선 아래와 같은 코드를 입력한다. 

----------------------------------------------------------------------------

#include  <SoftwareSerial.h>
SoftwareSerial myBT(2, 3); //BlueTooth(Rx, Tx)
void setup() {
  Serial.begin(9600);
  pinMode(7, OUTPUT);   //Enable 단자에 High 넣어줄 포트 
  digitalWrite(7, HIGH);
  Serial.println("Enter AT Commands: ");
  myBT.begin(38400);  // AT-커맨드 모드 통신속도는 38400입니다. 
}
void loop() {
  if (myBT.available())
    Serial.write(myBT.read());
  if (Serial.available())
    myBT.write(Serial.read());
}

----------------------------------------------------------------------------

▶ 아두이노 코드 다운로드 

BTSetup.zip
0.00MB

- 위 코드를 업로드시키고 아래와 같은 시리얼 모니터 창을 연다.

1. 성공적으로 AT 모드 진입시 ,  " AT ⏎ " 입력하면 아래처럼 OK 싸인이 뜬다.
만약, AT 명령어 입력시 OK 싸인이 뜨지 않는 다면, 아래 통신 속도를 확인해 보세요. 

[ 코드 작성 시 아래 통신속도 구분에 주의 할 것! : HC-05기준이며, 펌웨어 버전에 따라 달라질 수 있음]
- 블루투스 통신속도(default) : 9600bps
- AT명령어 모드 통신 속도(default) : 38400bps     
※ 따라서, AT명령어(커맨드) 모드를 위해 아두이노 코드에서 myBT.begin( )의 속도를 38400bps로 설정하여 업로드 하였는지? 확인해 보세요.

- 주의!  아두이노 코드와 시리얼 모니터의 통신 속도와 방법을 아래처럼 일치 시킨다.

 

2. 모듈의 버전 확인  :  AT+VERSION ⏎  

 

3. 모듈의 고유주소 확인 :  AT+ADDR 

 

4. 모듈의 마스터/슬레이브 모드 확인 :  AT+ROLE 

 

5. 마스터 모드로 변경하기 :  AT+ROLE=1  

 

(잘 변경 되었는지 확인 하기  :  AT+ROLE ⏎ )

(다시 슬레이브 모드로 전환하기 위해서는 : AT+ROLE=0 ⏎ )

 

 

6. 모듈의 이름 변경하기 :  AT+NAME= xxxx   

(이름 'RasinoHC05-Master' 로 변경한 경우)   default 값은 : 'HC-05' 되어 있음.

(이름 확인은 추후에 휴대폰 등의 블루투스 검색기능을 통하면 아래처럼 확인 가능함)

 

7. 패스워드 확인 및 변경  :  
 ( default 패스워드 값은 : 1234 이다.)
- 패스워드 확인 명령어 :  AT+PSWD? 
- 패스워드 변경 명령어 :  AT+PSWD=4321  (반드시“ ” 넣을 )

(값 변경 : AT+PSWD= xxxx ⏎ )  ,  아래는 4321로 변경한 예 
(혹은, 펌웨어 버전에 따라 " " 따옴표 없이 입력해 보세요)

(비번 변경확인 :  AT+PSWD ⏎ )

※ 이상과 같이 설정이 모두 끝난 후에는 아래 회로 처럼, 7번포트에 연결한 Enable 단자를 제거하고, HC-05모듈의 커맨드 모드 종료를 위해 전원을 제거후 다시 연결한다.  (HC-05의 LED가 다시 빠른 속도로 깜빡임)

 

※ 참고 :  여기까지는 HC-05의 펌웨어 2.0버전 기준이었으며,  거의 유사하나 약간의 명령어 차이 혹은 기능의 차이가 있는 3.0버전의 예시를 아래 간단히 출력하였으니 참고하시라. (3.0 버전에서는 소문자 입력X, 대문자만 가능)

(기타 상세한 명령어 설명은 아래 HC-05.PDF 파일을 참고)

 

8.  위와 같은 과정을 거쳐 하나는 "슬레이브 회로" 하나는 "마스터 회로" 두 가지를 준비한다. 

 

9. 두 가지 회로가 모두 준비 되면, 통신 확인을 위해 두 대의 PC(혹은 노트북)이 필요한데, 각각 하나씩 회로를 PC에 연결한다. 

10.  두 모듈 회로간 페어링(연결)은 각각 PC에 연결되어 전원이 공급되면 자동으로 페어링 된다. ( HC-05모듈의 LED가 커맨드 모드 일 때 처럼 2초 간격으로 깜빡이게 된다)   

 

11. 통신확인은,  PC-A의 시리얼 모니터 창에서 숫자 1을 입력하면, PC-B의 시리얼 모니터 창에 숫자 1이 나타나고 그 반대도 가능하다) 
아래와 같이, 마스터 회로와 슬레이브 회로 두 가지를 준비하고 실습한다. 이때, En 단자는 연결하지 않으며, 블루투스 모듈의 보호를 위해 분배저항을 반드서 넣어서 작업한다. 

【 ※  전체 과정 영상으로 익히기 

▷ 유튜브로 보기 (1080P 지원)

https://youtu.be/p7bhIBFFymw

 

▷ 카카오로 보기

 

 

[ Trouble Shooting - 문제해결 ]

※ 분명 똑같이 한 것 같은데, 영상에서 처럼 동작이 안 될 경우가 있을 것이다.  아래 몇 가지 사항을 체크 해보자.

 

[ 블루투스 페어링(연결)의 기본 조건 :  1. 마스터와 슬레이브 상호간 연결됨,  2. 두 개의 블루투스 모듈의 비번(pin번호)이 같아야함 (default : 1234) ] 

 

1. 모듈 사양과 버전 확인  :  HC-05 인지? HC-06인지?  혹은 펌웨어 버전 확인

  같은 HC-05 모듈이라 하더라도, 펌웨어 버전에 따라, 명령어가 조금씩 차이가 있다. 

  예),  펌웨어 버전 2.0에서는 소문자 대문자 구분 없이 적용되나, 펌웨어 3.0에서는 대문자만 적용됨.

       고유 주소:  3.0 버전에서는 18:E4:400006 형태로 나옴, 

 

 

2. 초기 AT 커맨드 모드로 진입에 성공해야 통신속도 등 여러가지 설정이 가능하다.  
  ( 시리얼 모니터 창에 "Enter AT Commands: " 메세지가 뜬다고,  AT 모드로 진입이 성공 한 것이 아니다.  보드가 PC에 연결만 되면, 무조건 출력 되도록 코딩 되어 있다.   AT모드는, 명령어 창에, AT를 입력하면 'OK' 싸인이 떠야 한다.  그외에 마스터 슬레이브 명령어 등등 처리시 'OK' 신호가 떠야 하니, AT모드 진입 부분을 다시 살펴 보기 바란다. ) 

코드의 Serial.begin(9600) 와 시리얼 통신창의 9600 baud 속도가 일치해야 한다. (BT모듈의 통신속도와는 별개임)

주의, HC-05 모듈은 시리얼모니터 입력 형태를 "Both NL&CR" 로 해주고,

        HC-06 모듈은 시리얼모니터 입력 형태를 "No line ending"으로 맞추어 주어야 한다.

 

3. 가장중요한 보드레이트(Baud late:통신속도)를 맞추어야 한다. BT마스터 모듈과 BT슬레이브 모듈의 설정된 통신속도와 코드의 통신속도가 동일하게 되어 있는지 확인해야 한다.  예) myBT.begin(xxxx)  , HC-05마스터, HC-05슬레이브, 이 세 개의 통신 속도가 일치 되어야 함.   
   단,  코드에서 Serial.begin(xxxx) 통신속도는 시리얼 모니터 창의 통신속도 하고만 맞추면 문제 없다. 

 - HC-05의 경우 기본적으로(default) UART 통신속도가 9600에 맞추어져 있으며(경우에 따라, 38400도 있음) 

 - HC-06의 경우 기본적으로(default) 9600에 맞추어져 있다. 

   단, 펌웨어 버전에 따라 위와 같지 않을 수 있음으로 코드내에서 9600과 38400을 바꾸어 입력해가며 테스트 해볼 것.

 

4. 마스터 모듈 설정이 되어 있는가?  

  - 블루투스 모듈이, 슬레이브 모듈끼리는 페어링이 되지 않는다.  반드시 모듈하나는 마스터로 설정이 되어야 페어링(연결) 된다.

 

5. AT 명령어 입력 방법 :

 AT 명령어 형식이 블루투스 모듈 혹은 펌웨어 버전에 따라 상이할 수 있다. 여러 형태로 시도해보기 바란다.

예를 들어)  패스워드 변경 명령어 입력시,  아래처럼 여러 형태로 입력 해보기 바란다.

 1.  AT+PSWD=1234  

 2.  AT+PSWD:"1234" 

 3.  AT+PSWD=1234? 

 

※ 주요 AT 관련 명령어(HC-05 기준)

AT :  연결 상태 체크
AT+NAME : default 이름 확인
AT+ADDR :  default 주소 보기
AT+VERSION : 버전 보기
AT+UART : 보드레이트 보기(확인)
AT+ROLE:  마스터?/슬레이브? 상태 확인
AT+RESET :  리셋과 AT mode 빠져나오기
AT+ORGL : 공장 출하 상태로 원위치 시키기
AT+PSWD: 현재의 패스워드 보기

 

※ HC-05 AT 명령어 파일(pdf)과 HC-06 AT 명령어 파일을 첨부하였다. 

(아래 PDF 파일을 참고하면, 위에서 소개하지 않은, IPSCAN 정보나, 블루투스 Pair된 기기 정보 리스트를 보거나 삭제 할 수 있는 명령어들이 있으니 필요할 경우 참고하면 좋을 것이다)

Bluetooth HC-05.pdf
0.08MB
Bluetooth HC-06.pdf
0.14MB

 

★ 마지막 시도 :

 위 5번 까지 별의별 짓(?) 다 시도 해봤지만, 아예 AT 커맨드 모드 진입 자체가 안 된다는 분이 있을 것이다. 

그럴 때는 이렇게 한 번 해보시라.   

 - 상황 : 버튼이 달려 있고 6pin이고, HC-05로 추정되는 모듈이라고 생각 되는 상황에서,  혹은 아니어도...

 AT 명령어 모드는 38400 속도에서만 진입가능한 경우가 있었다(시리얼 모니터 통신속도가 아닌, 블루투스 통신속도).    따라서 AT모드 진입과 설정을 위해 코드상에 myBT.begin(38400)으로 맞추어 실행시켰다.  그런 다음 AT 를 입력해 보면, OK가 떳으며, 다른 명령어도 잘 먹혔다.   이때, AT+UART ⏎  입력해보면, 현재의 BT모듈의 통신 속도를 확인 할 수 있을 것이다. 본인의 경우 (9600으로 나왔다!!,  HC-05모듈의 default 값인 38400이 아니었음) ,
 이제 AT모드 진입이 성공 되었으니,  마스터/슬레이브 , 이름 설정 등등을 끝내고,  본격적으로 실행시킬 때는 코드상에서  BT모듈의 통신속도를 다시 myBT.begin(9600)으로 바꾸어 주었다.(BT모듈값과 일치시킴).
  이렇게 하였더니, 두 개의 블루투스 모듈의 페이링이 잘 되었고 통신도 문제가 없이 잘 실행 되었다.   

  혹은 일단, AT모드로 진입이 성공되면 BT모듈 들의 보드레이트 자체를 아예 모두 38400으로 변경을 해도 될 것이다. 

 
※ 기타 사항 :  

  - HC-05 모듈로 AT커맨드 모드 진입시, 모듈의 'En단자'에 High 레벨을 가하지 않더라도 커맨드 모드 진입은 가능하였다.

  - 버전이 다른 HC-05 모듈, 예를 들어, HC-05(2.0Ver, Master),와 HC-05(3.0Ver, Slave) 와 페어링도 문제 없이 잘 됨.

    (단, 비번은 같아야 함,  default : '1234' , 하나는 반드시 마스터, 나머지는 슬레이브 여야함.)

 

 

[ 다시한번 더 최종 정리 ]

HC-05와 HC-06이 다른점은 HC-05는 마스터와 슬레이브 모두 가능하고 HC-06은 슬레이로 고정되있다. 

그리고 공장 초기값(default)의 차이가 있다.

 

예)

HC-06은 Slave,9600,8,N,1, pin=1234,"HC-06" 시리얼모니터에서 "line ending없음"

HC-05는 Slave,38400,8,N,1,pin=1234,"HC-05" 시리얼모니터에서 "Both NL & CR" 이다.

 

하지만 펌웨어 버전 1.7이상에선 HC-06도 AT명령으로 마스터모드 설정이 가능하다
그리고 펌웨어 3.0 이상에서는 전송 옵션도 "Both NL & CR"로 변경되었다.

 

결론, 자신이 가지고 있는 블루투스의 모델 HC-05, 06 외에,  블루투스 펌웨어 버전이 중요함! 
버전에 따라 AT 명령어도 조금씩 다를 수 있고 접속 통신속도와 기본값(drfault)도 다르니,  확인하여 사용해야 한다.

 

 

포기하기 전에...

 여기까지 글을 읽었다는 뜻은 해볼만큼 해보고 나서도 AT모드 진입조차 안 되어, BAUD RATE 확인이나, 펌웨어 버전 확인 조차 못하는 상황일 것이다.  물론 핸드폰의 앱으로 접속하고 데이터를 보내는데 성공해도 AT 모드로 접속이 안 되는 경우이다.  필자의 판단으로는 똑같은 HC-05 모듈이라도 제조 출하시 펌웨어 버전이 다를 수 있는데, 이 펌웨어 버전이 낮을 경우 이런 증상이 있는 것으로 판단이 된다.(Ver 2.0 미만으로 추정). 
  따라서 이와 같은 상황이라고 판단되면, 그리고 AT모드 진입이 반드시 필요하다면, 새로 최신 펌웨어 버전의 블루투스 모듈을 구매하길 바란다.  그렇게 하는 것이 정신건강에 좋다.  그리고 같은 판매처에서 구매하다보면, 다른 버전을 구매해도 같은 제품이 배달되는 경우가 더러 있는 것 같으므로, 구매처를 바꾸어 구매하는 것이 좋을 것 같다.

 

그럼, 건투를 빕니다...  ^^;

반응형