본문 바로가기

Hardware/Arduino and Friends

아두이노 Arduino에서 HC-06 블루투스 Bluetooth 모듈 사용기

아두이노를 처음 접한게 2013년 여름이었습니다. 어찌어찌하다가 아두이노로 엔코더를 해석[바로가기]해야할 일이 있어서 공부한 후 블로그에 올려두었었죠. 그 후 3D 프린터를 곁눈질로 구경하면서 그 어마어마한 Firmware가 아두이노 보드에 탑재되어 있다는 것[바로가기]을 또한 알게 되면서 깜짝 놀랬었습니다. 그리고 나서 최근 아두이노 보드와 ESP8266보드를 이용한 wifi의 사용에 대해 또한 이야기[바로가기1, 바로가기2]를 했었죠. 아무튼 아두이노는 참 대단한 아이인것 같습니다. 이제는 코딩 교육과 IoT까지 집어 먹을 모양입니다.~^^ 뭐 저도 분위기나 파악해 볼 겸 오늘은 블루투스 모듈로 유명한 HC-06보드를 이용해서 블루투스 통신으로 아두이노에서 LED를 제어-라고 쓰고 그냥 깜빡 거리기를 해볼려고 합니다.^^

준비하기 - 회로 구성

당연히~ 회로가 준비되어 있어야지요^^

응? 넵.. 저렇습니다.^^. 아두이노는 5V에서 동작하고, 블루투스 모듈인 HC-06보드는 3.3V에서 동작하기 때문에.. HC-06의 TX가 아두이노 들어갈땐, 문제가 없겠지만, 아두이노의 5V TX가 HC-06으로 들어갈 때는 이를 3.3V로 바꾸어 주어야 합니다. 그래서 위에 보이듯이 1k옴과 2k옴으로 전압을 분배해서 연결해 주었구요. LED도 제어할 거니까 살짝꿍 달아주고.... 아참.. 저는 아두이노 Mega 보드를 사용했기 때문에 HC-06 보드를 Serial1에 물릴 수 있었습니다. 만약 Uno 보드를 사용하시는 분들은 소프트웨어 시리얼 통신을 사용하셔야 할겁니다.

뭐 연결은 저렇다는 거죠^^

손이 요즘 떨려요.. 에휴.. 제 손 탓이지만, 그냥 폰 탓을 하고 싶습니다.^^

아두이노측...

브레드보드측~~~~

블루투스 준비 및 세팅

회로도 끝났고 이제 블루투스 준비 해야죠~~~ 먼저... 

void setup() 
{
  Serial.begin(9600);
  Serial1.begin(9600);
}

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

  if (Serial.available()) 
  {
    Serial1.write(Serial.read());
  }
}

와 같이 코드를 작성합니다. 위 코드는 아두이노 시리얼 모니터에서 제가 직접 입력(Serial.read())한 명령을 그대로 블루투스 모듈 HC-06으로 전달(Serail1.write())하고, HC-06 모듈에서 넘어온 메세지(Serial1.read())는 저에게 전달(Serail.write())하는 것입니다.

그리고 저렇게 시리얼 모니터를 열어서 AT라는 명령을 주어서 OK가 반환되면 성공한 것입니다^^

AT+NAME****은 ****로 블루투스 모듈 HC-06의 이름을 바꾸겠다는 것으로 OKsetname이라는 메세지가 나타나면 성공한 것입니다.

AT+PIN****은 ****로 PIN 넘버를 바꾸겠다는 것으로, OKsetPIN 메세지가 나오면 또한 성공입니다^^

AT+BAUD*는 통신속도를 *번으로 변경하라는 것으로, 4:9600, 5:19200, 6:38400, 8:115200의 속도를 의미합니다.

다 세팅하고 나면... 위 그림처럼 제가 바꾼 pwbt라는 블루투스 모듈 이름이 나타나내요^^

PIN넘버를 입력하지 않아서 오류가 났네요^^

핀 넘버를 세팅해준데로 입력하구요^^

OK~~~ 블루투스에 연결되었습니다.^^

아두이노에서 블루투스 초간단 테스트하기

이제 간단하게 통신상태가 괜찮은지 볼까요...

void setup() 
{
  Serial.begin(9600);
  Serial1.begin(9600);
}

void loop()
{
  if (Serial.available()) 
  {
    Serial.println("-");
    Serial1.write(Serial.read());
  }
}

넵.. 너무 간단해서 또 놀래셨죠.. ㅎㅎ. 이번에는 시리얼 모니터에서 글자를 하나 입력하고 그게 블루투스에서 잘 보내주는지를 볼려고 합니다. 시리얼 모니터에서 한 글자 입력하고 엔터, 시리얼 모니터는 그냥 글자 입력되었다고 '-'로 표기하고, 블루투스에도 동일하게 전송해서 확인하는 거죠^^

그럼 당연히 블루투스에서도 어떤 값이 전송되는지 확인할 프로그램이 필요합니다. 저는 맥을 쓰고 있어서 맥(mac)에서 사용할 시리얼 터미널 프로그램이 필요한데요. CoolTerm[바로가기]이라는 이 아이가 손쉽게 접근해 볼 수 있는 프로그램입니다.

이 프로그램에서 pwbt를 찾아서 연결해 줍니다. 그 전에 당연히 PC에서도 연결되어야죠.

그리고 가볍게 connect~~

아두이노의 시리얼 모니터에서 1부터 4까지 그냥 막 전송했습니다. 블루투스에 연결된 터미널 프로그램에서 잘 받고 있는게 보이네요.. 오케이~~~~

아두이노에서 블루투스를 이용해서 LED 테스트하기

이제.. 아두이노 보드에 붙여둔 LED... 그 아이 이제 사용해야죠^^

char incommingMsg;
int LED = 13;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Serial1.begin(9600);
  pinMode(LED, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  while (Serial1.available()) {
    incommingMsg = Serial1.read();

    if (incommingMsg == '1') {
      Serial.println("LED is ON !");
      digitalWrite(LED, HIGH);
    }
  
    if (incommingMsg == '0') {
      Serial.println("LED is OFF !");
      digitalWrite(LED, LOW);
    }
  }
}

코드는... 위와 같이 바꿉니다. LED는 13번으로 해두고, Serial1은 블루투스 모듈인 HC-06에 연결되어 있는데 여기서 1이면 on, 0이면 off로 인식해서 LED를 끄고 켜는거죠^^

CoolTerm의 Send String 에서

1을 보내면~

켜지고~~

0을 보내면~

꺼지죠~~ 뭐 너무 당연하지만^^. 이렇게.. 아두이노에서 블루투스 통신을 연습해 보았습니다.^^

반응형