라즈베리파이, 아두이노

[간단한 아두이노 코딩] 19. HC-06 모듈로 Bluetooth 통신 해보기

포도알77 2020. 11. 24. 10:31

HC-06 모듈로 Bluetooth 통신 해보기

 

1. Bluetooth 모듈

 블루투스는 근거리에서 적은양의 데이터를 저전력으로 전송하기에 적합하다. 이런 요구사항에 가장 잘 들어맞는 것들이 휴대폰과 근거리에서 연결될 수 있는 웨어러블 장치들 (시계, 이어폰등)이다. 

 

 특히 HC-06모듈은 블루투스 2.0을 지원하는 모듈로 최신 BT 버전에 오래되었지만, 저렴하며 간단한 텍스트 통신에는 사용하기에 충분하다.

 

 

2. Master, Slave 모듈

 BT 모듈은 Master와 Slave 모듈로 나뉜다. Master는 Slave를 스캔하고 선택하여 연결하는 모듈이며, Slave는 장치 이름을 Broadcasting하여 Master에게 자신의 존재를 알린다. 물론 Master와 Slave가 연결된 다음엔 양방향 통신이 가능하다.

 

 Master와 Slave 모듈은 매우 유사하게 생겼기 때문에, 반드시 구매할 때 확인하여야 한다. 오늘은 Slave 모듈(HC-06)을 이용할 예정이다.

 

3. HC-05와 HC-06

 HC-05와 HC-06은 서로 다른 모듈입니다. HC-05는 마스터와 슬레이브를 동시에 수행할 수 있는 모듈이며, HC-06은 오직 슬레이브로만 동작할 수 있습니다. 만약 HC-05를 통해서 슬레이브로 동작하게 만들고 싶다면 AT+ROLE 명령어를 통하여 설정을 변경해주어야 합니다.

 HC-05 AT 명령어 링크

 HC-06 AT 명령어 링크

 

4. 회로도

 BT 모듈에 흘러간 정보를 확인하기 위하여 디지털 0,1번이 아닌 2,3번 핀에 블루투스를 연결할 예정이다. 이전에도 말했듯 장치 기준 Rx, Tx가 표기되어 있으므로, UART로 연결할 때는 반드시 Rx-Tx를 교차하여 연결해주어야 한다.

 

5. 소스코드

#include <SoftwareSerial.h>

// 블루투스 모듈 UART Serial 통신 선언
SoftwareSerial bt(2,3);

// 블루투스 모듈 설정하는 함수
void setBT(){
  bt.write("AT");
  delay(1000);
  bt.write("AT+BAUD4");
  delay(1000);
  // BT 이름은 MYBT
  bt.write("AT+NAMEMYBT");
  delay(1000);
  // 핀코드는 1234
  bt.write("AT+PIN1234");
  delay(1000);
}

void setup() {
  Serial.begin(9600);
  bt.begin(9600);
  // 블루투스 모듈 초기화
  setBT();
  // 블루투스 모듈 초기화시 나오는 응답을 모두 제거
  // 만약 응답 결과가 궁금하다면 주석처리하여도 무방
  while(bt.available()) bt.read();
}

void loop() {
  // 블루투스 모듈이 수신한 데이터가 있으면
  // 내장 시리얼(시리얼 모니터)로 전달
  if(bt.available()){
    Serial.write(bt.read());
  }
  // 내장 시리얼(시리얼 모니터에서 전송한)에 데이터가 있으면
  // BT로 데이터 송신
  if(Serial.available()){
    bt.write(Serial.read());
  }
}

 setBT는 BT 설정을 하는 함수로, 통신속도, BT 장치 이름, 핀코드를 설정한다. 또한 BT에서 수신한 데이터는 시리얼 모니터로, 시리얼 모니터에서 수신한 데이터는 BT로 전달하는 동작을 수행한다.

 

 

6. 휴대폰과 연결하기

 휴대폰의 블루투스를 켜고 스캔을 눌러보면 MYBT 장치가 검색될 것이다. 이 장치를 연결하자. 핀 번호는 소스코드에서와 같이 1234이다.

 

 이후 앱스토어나 구글플레이에서 BT CHAT을 설치하고 BT를 연결해주자.

 

 

 

 시리얼 모니터에서 "Send a msg from Arduino"를 전송하면 휴대폰에서 출력되고, 휴대폰에서 "Send a msg from phone"을 전송하면 시리얼 모니터에서 출력된다.

 

 

 

 Bluetooth 마스터만 있다면 BT를 통하여 데이터를 송수신할 수 있음을 위 소스코드를 통하여 시도해보았다. 만약 데이터를 통하여 장치를 제어하고 싶다면, 자신만의 통신 규칙을 정하여 (만약 LED를 켜는것이라면 LED_ON, 끄는 것이라면 LED_OFF등) 수행할 수 있다.

 

페이스북으로 공유카카오톡으로 공유카카오스토리로 공유트위터로 공유URL 복사