Arduino, Bluetooth 페어링

아두이노에서 블루투스를 이용하는 방법을 알아보겠습니다.


Bluetooth module 선택#

  • 아이폰 : MLT-BT05(AT-09) BLE 모듈 사용 (이 모듈은 안드로이도에서도 사용 가능)

    HC-06, HC-05는 아이폰에서 SPP(Serial Port Profile) 통신이 지원하지 않는 이유로 사용할 수 없습니다. 그러므로 아이폰으로 블루투스 통신을 하기 위해서는 MLT-BT-BT05, AT-09, CC2541, HM-10, HC-02, RN-42 같은 BLE(Bluetooth Low Energy) 모듈을 사용합니다. 연결방법이나 AT명령어 세트는 HC-06과 비슷해요. 주의 할 점은, 시리얼 모니터에서 Both NL & CR 모드를 선택해주어야 하는 것입니다.

/image/BT-01.jpg
  • 안드로이드 : HC-06(or HC-05) 블루투스 모듈 사용 (이 모듈은 아이폰에서 사용 불가)
/image/BT-02.jpg

※ 요즘은 잘 사용하지 않지만, HC-05를 사용하기도 합니다. 생김새가 거의 비슷하지만, 몇가지 차이점이 있는데요. 보통 HC-06과 구별하기 위하여, HC-05에는 칩 위에 V형태로 체크를 해두거나, 화이트로 하얀색 점을 찍어두는 경우가 많습니다. 그리고, 가장 큰 차이점은 HC-05의 경우 6개의 핀이 모두 존재해요.

/image/BT-05.jpg

※ 예전에는 HC-05는 Master, HC-06은 Slave로 나누어 쓰는 경우가 많았지만, HC-06의 버전이 1.7이상인 경우 Master, Slave를 선택하여 사용할 수 있게 되면서 HC-05는 잘 사용하지 않게 되었습니다.


MLT-BT05, HC-06을 사용하는 경우#

Pin Map#
Arduino Uno
1STATE(실제 핀 없거나 미사용)
2RXDReceive Data (수신)3
3TXDTransmit Data (송신)2
4GNDGNDGND
5VCC+5V+5V
6KEY(실제 핀 없거나 미사용)

schematic#
/image/BT-03.jpg

sketch#
#include <SoftwareSerial.h>

SoftwareSerial BTSerial(2, 3); //Connect MLT-BT05 or HC-06 TX,RX 

void setup()  
 {
   Serial.begin(9600);
   Serial.println("Hello!");

  // set the data rate for the BT port
   BTSerial.begin(9600);
 }

void loop()
{
  if (BTSerial.available())
    Serial.write(BTSerial.read());
  if (Serial.available())
    BTSerial.write(Serial.read());
}

HC-05를 사용하는 경우#

Pin Map#
HC-05 PinArduino Uno
1STATE
2RXDReceive Data3
3TXDTransmit Date7
4GNDGNDGND
5VCC+5V+5V
6KEY (ENABLE)AT command 진입을 위한 핀8

※ TXD로 UNO의 7번핀을 사용했으나, HC-06처럼 2번핀을 사용해도 됩니다. 단, schematic과 sketch도 2번 핀에 맞추어 수정해주세요.


schematic#
/image/BT-04.jpg

sketch#
    #include <SoftwareSerial.h>
    #define KEY 8
    SoftwareSerial BTSerial(7, 3); //Connect HC-05 TX,RX 
    
    void setup()  
     {
       pinMode(KEY, OUTPUT);       //for HC-05
       digitalWrite(KEY, HIGH);
       Serial.begin(9600);
       Serial.println("Hello!");
    
      // set the data rate for the BT port
       BTSerial.begin(38400);
     }
    
    void loop()
     {
       if (BTSerial.available())
         Serial.write(BTSerial.read());
       if (Serial.available())
         BTSerial.write(Serial.read());
     }


블루투스 모듈을 처음 사용하는 경우#

모듈을 처음 사용한다면, AT 명령어 세트를 사용하여 세팅을 해주어야 합니다. 또한 이전에 사용한 경험이 있더라도 블루투스 모듈ID, 페어링 암호 등을 새롭게 세팅할 필요가 있는 경우에도 동일합니다.


MLT-BT05(AT-09)의 AT Command#

명령어Serial Monitor 출력 결과의미
ATOK접속상태 확인
AT+NAMESKS100OKsetname블루투스 모듈ID 지정 (default MLT-BT05)
AT+PINPASSWORD 출력패스워드 확인
AT+PIN1234OKsetPIN페어링 암호 설정 (default: 123456)
AT+BAUD4OK9600통신속도 설정 (4 → 9600bps) (default: 0 → 115200bps)
AT+VERSIONOKVERSION=4.0MLT-BT05 버전 확인
AT+LADDR+LADDR=(MAC Address)MAC Address 확인
AT+ROLE=0OK+ROLE:0SLAVE mode (default)
AT+ROLE=1OK+ROLE:1MASTER mode
AT+ROLE=2OK+ROLE:2sensor mode
AT+ROLE=3OK+ROLE:3iBeacon mode
AT+ROLE=4OK+ROLE:4WeChat mode
AT+ROLEOK+ROLE:Role 확인

AT Command set 다운로드


HC-06의 AT Command#

명령어Serial Monitor 출력 결과의미
ATOK접속상태 확인
AT+NAMESKS100OKsetname블루투스 모듈ID 지정 (SKS100)
AT+PINPASSWORD출력패스워드 확인
AT+PIN1234OKsetPIN페어링 암호 설정 (default: 1234)
AT+BAUD4OK9600통신속도 설정 (4 → 9600bps) (default: 4 → 9600bps)
AT+VERSIONOKlinvorV1.8HC-06 버전 확인
AT+ROLE=SOK+ROLE:SSLAVE 역할
AT+ROLE=MOK+ROLE:MMASTER 역할 (v1.7 이상만 가능)
AT+ROLEOK+ROLE:MASTER/SLAVE 확인

HC-05의 AT Command#

※ HC-05는 AT Command를 사용하는 경우, KEY(Enable) 핀을 연결해주어야 합니다. (schematic 참고)

명령어Serial Monitor 출력 결과의미
ATOK접속상태 확인
AT+NAMESKS100OKsetname블루투스 모듈ID 지정 (SKS100)
AT+PSWD=0000OKsetPIN페어링 암호 설정 (0000)
AT+BAUD6OK9600통신속도 설정 (6 → 38400bps)
AT+VERSIONOKlinvorV1.8HC-06 버전 확인
AT+ROLE=0OK+ROLE:0SLAVE 역할
AT+ROLE=1OK+ROLE:1MASTER 역할
AT+ROLE=?OK+ROLE:MASTER/SLAVE 확인


스마트폰과의 페어링 과정#

시리얼모니터에서#

HC-06과의 페어링 과정을 보도록 하겠습니다. (다른 블루투스 모듈도 유사하게 진행하면 됩니다.)


  1. 먼저 아두이노IDE의 시리얼 모니터를 엽니다.

※ 이때, 주의할 점이 있는데요. 시리얼 모니터를 열기 전에 스마트폰과 HC-06의 블루투스 연결은 해제된 상태여야 합니다. 기존에 HC-06과 스마트폰을 연결한 적이 있다면, 자기도 모르게 블루투스 연결이 자동으로 되어 있을 수 있는데요. 이런 경우에는 시리얼 모니터가 열리지 않아요.

  • MLT-BT05: 시리얼모니터의 하단에 “Both NL & CR”, “9600 보드레이트” 선택
  • HC-06: 시리얼창의 하단에 “line ending 없음”, “9600 보드레이트 선택
  • HC-05: 시리얼창의 하단에 “Both NL & CR”, “9600 보드레이트” 선택

  1. 위 스케치를 사용하는 모듈에 맞게 선택하여 아두이노에 업로드 한 상태에서 시리얼 모니터를 열면, Hello! 라는 글자가 뜹니다. (업로드한 스케치에 따라 Hello!는 안나올 수도 있음)
    /image/BT-06.jpg

  1. AT를 입력하고,
    /image/BT-07.jpg

  1. 전송을 누르면 OK가 뜹니다. 이것은 아두이노IDE를 통해 블루투스 모듈과 연결이 정상적으로 되었음을 의미해요.
    /image/BT-08.jpg

  1. 블루투스 모듈ID를 설정해보겠습니다. SKS100이라는 ID로 지정하기 위해 AT+NAMESKS100이라고 입력한 뒤, 전송을 누릅니다. (모듈ID는 본인이 사용할 이름으로 바꾸어 지정합니다.)
    /image/BT-09.jpg

  1. 그러면 OKsetname이라고 출력이 되면서, 블루투스 모듈ID가 SKS100으로 셋팅이 됩니다.
    /image/BT-09-1.jpg

  1. 이번에는 페어링 암호 설정입니다. AT+PIN0000을 입력하고 전송을 누르면
    /image/BT-10.jpg

  1. OKsetPIN이 출력되면서 페어링 암호가 0000으로 설정됩니다.
    /image/BT-11.jpg

  1. 통신속도 설정입니다. HC-06은 주로 9600bps를 사용하며, 이를 위해 AT+BAUD4를 입력한 뒤 전송을 누릅니다. (HC-06의 경우 default 속도가 9600bps이므로 이 과정은 생략 가능하며, 다른 모듈을 사용하는 경우에는 각 모듈의 AT Command를 확인하여 통신속도를 변경해주어야 합니다.)
    /image/BT-12.jpg

  1. OK9600이 출력되요.
    /image/BT-13.jpg

여기까지 진행하면 대체적으로 HC-06을 사용할 준비가 된 것입니다.


스마트폰에서#

  1. 이제 스마트폰에서 블루투스 모드를 켜세요. (아래 화면은 스마트폰 기종마다 조금은 다를 수 있습니다. 화면이 다르더라도 거의 비슷할 거에요.) 그리고 새로고침을 통해 블루투스 기기를 찾습니다.
    /image/BT-14.png

  1. ‘거의 이용하지 않는 기기’ 하나를 찾았네요. 그곳을 누르면 조금전에 설정한 블루투스 모듈ID인 SKS100이 보입니다. 여기를 누르세요.
    /image/BT-15.png

  1. 블루투스 모듈과 페어링을 하기 위한 암호 입력화면이 나오고, 여기에 AT명령어를 통해 입력한 암호를 넣어줍니다.
    /image/BT-14-1.png

  1. 그러면 스마트폰이 SKS100 모듈에 페어링을 시도합니다.
    /image/BT-16.png

  1. 거의 이용하지 않는 블루투스 기기 부분을 누르면
    /image/BT-17.png

  1. 페어링된 기기 목록에 SKS100이 뜹니다. 여기까지 진행하면, 스마트폰과 블루투스 모듈이 페어링 완료된 거에요.
    /image/BT-18.png