중급 예제

약간은 익숙하시거나 익숙해지셨나요? 그렇다면 조금더 깊이 다뤄볼까요?

아두이노끼리 블루투스 모듈(HC-06)을 통해 통신하기

2017-06-20 09:19:24

개요

 

보통 아두이노에서 블루투스 모듈을 사용한다고 하면 스마트폰 어플과 연동하여 무선으로 아두이노를 제어하거나 값을 받아올 때 많이 사용합니다.

이 부분에 있어서는 어플만 존재하면 어렵지 않고, 검색하면 많은 예제들이 존재하기 때문에 쉽게 따라할 수 있는 편입니다.

 

이번에 소개하는 통신은 2개의 블루투스 모듈(HC-06)을 통해 아두이노 간 무선통신을 하는 방법에 대해 알아보겠습니다.

 

 

 

 

동영상

 

 

 

 

 

 

필요한 부품 목록

 

NO 부품명 수량 상세설명
 1 오렌지 보드  
2 블루투스 모듈 2 HC-06
3 점퍼 케이블 8  

 

 

부품명 오렌지 보드 블루투스 모듈 점퍼케이블
파트

 

 

 

 

 

 

하드웨어 making

 

브레드보드

 

※ 아두이노간 통신이기 때문에 아래와 같은 회로 연결이 2개 필요합니다.

 

 

 

 

 

블루투스 모듈 세팅하기

 

블루투스 간 통신을 하기위해서는 HC-06모듈이 2개 필요하지만 버전도 중요합니다. 

이전에는 HC-06의 모듈이 Master와 Slave가 고정되어 나왔지만 버전이 올라감에 따라 모듈의 Master/Slave를 ATcommand로 세팅할 수 있게 되었습니다.

 

블루투스 모듈의 펌웨어를 확인할 수 있는 ATcommand는 AT+VERSION입니다.

 

<AT+VERSION을 입력 시, 위의 시리얼 모니터와 같이 버전이 출력>

 

 

 

 

 

 

버전을 확인하고 모듈의 버전이 v1.7이상이면 블루투스 간 통신을 할 수 있습니다.

버전을 확인 했으면 블루투스 간 통신을 위해 블루투스 모듈의 역할을 지정해주어야 합니다.

블루투스모듈(hc-06)의 기본 세팅은 Slave로 세팅되있기 때문에 블루투스간  1:1통신을 위해서는 하나는 Master, 다른 하나는 Slave가 되어야 합니다.

 

각각의 모듈은 ATcommand를 통해 역할을 지정할 수 있습니다. 명령어는 AT+ROLE=M 또는 S입니다.

 

 

AT+ROLE = M : 블루투스 모듈을 Master로 지정

AT+ROLE = S : 블루투스 모듈을 Slave로 지정

 

 

<AT+ROLE=M 또는 S을 입력 시, 위의 시리얼 모니터와 같이 모듈의 역할을 지정>

 

 

 

 

 

 

※ 블루투스 모듈이 Slave모드일 때는 LED가 빠르게 깜빡거리지만

Master모드로 변경되었을 때는 LED의 깜빡거리는 속도가 느려집니다. 

만약 모드를 변경했을 때 제대로 변경됐는지 확인하려면 LED의 깜빡거리는 속도를 확인하세요.

(모드 변경 후 모듈을 껐다가 다시 켜야 변경사항이 적용됩니다!!!!) 

 

  블루투스 모듈 A 블루투스 모듈 B
버전(Version) v1.7이상 v1.7이상
역할(Role) M(Master) S(Slave)

 

 

소프트웨어 coding

 

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); //블루투스의 Tx, Rx핀을 2번 3번핀으로 설정

void setup() {
  // 시리얼 통신의 속도를 9600으로 설정
  Serial.begin(9600);
  while (!Serial) {
    ; //시리얼통신이 연결되지 않았다면 코드 실행을 멈추고 무한 반복
  }


  Serial.println("Hello World!");

  //블루투스와 아두이노의 통신속도를 9600으로 설정
  mySerial.begin(9600);
}

void loop() { //코드를 무한반복합니다.
  if (mySerial.available()) { //블루투스에서 넘어온 데이터가 있다면
    Serial.write(mySerial.read()); //시리얼모니터에 데이터를 출력
  }
  if (Serial.available()) {    //시리얼모니터에 입력된 데이터가 있다면
    mySerial.write(Serial.read());  //블루투스를 통해 입력된 데이터 전달
  }
}

 

 

 

 

 

 

두 개의 아두이노에 위 코드를 업로드 후 블루투스 모듈을 서로 가까이 대면 스스로 페어링되면서 통신이 됩니다. 

(꼭 가까이 대지 않더라도 마스터 슬레이브가 통신 공간내에 존재하면 서로 연결이 되는 거 같습니다.)

 

페어링이 됐는지 여부 확인은 블루투스 모듈의 LED를 확인하세요!

서로의 LED가 깜빡거리지 않는다면 페어링이 된 상태입니다.

 

<두 블루투스의 LED가 깜빡거리지 않는다면 페어링이 된 상태이다>

 

 

 

 

 

COM212에 해당하는 아두이노에서 Hi~ bluetooth!를 입력 후 전송하면 COM211에 해당하는 아두이노에 전달됩니다.

<Hi~ bluetooth!를 입력>

 

 

 

 

<반대쪽 아두이노 시리얼 모니터에 출력>

 

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

아두이노, 블루투스, 오렌지보드, kocoafab,통신