본문 바로가기
아두이노 통신

[통신/블루투스] Bluetooth 2.0을 구현하는 HC-06모듈, 스마트폰과 아두이노 연동

by 작동미학 2015. 2. 16.
반응형

HC-06모듈을 통해 Arduino에서 블루투스를 구현해보자.

 

▶ 이 가이드를 따라하면

- 안드로이드폰, 아이폰과 블루투스 통신하는 기능을 아두이노에 구현할 수 있다.

- HC-06모듈과의 시리얼 통신을 통하여 셋팅 및 블루투스 통신을 가능하게 할 수 있다.

 

▶ 같이 읽으면 좋은 강의

- HM-10을 통한 BLE 구현 : http://bbangpan.tistory.com/17

 

▶ 부품 설명 및 회로 구성

HC-06 모듈은 1만원 미만의 가격으로 일반적인 블루투스 통신을 시리얼 통신을 통해 가능하게 해준다. 일단 생긴 건 아래와 같이 생겼다. VCC(5V)/GND만 제대로 연결되면 불이 깜빡이며 접속 대기 상태가 된다.

<HC-06모듈을 아두이노와 연결한 모습, TX->D2, RX->D3, VCC->5V, GND->GND로 연결>

이 블루투스 모듈은, Arduino의 네트워크 모듈들과 동일하게 시리얼 통신으로 제어할 수 있다. 시리얼 통신이란 SoftwareSerial이라는 내장 라이브러리를 통해 제어 가능한데, 해당 모듈의 TX,RX를 Arduino의 D2,D3핀에 꼽고 D2핀을 RX, D3핀을 TX로 설정한다. 즉 Arduino의 송신(TX)은 블루투스 모듈의 수신(RX)으로 설정시키면 된다.


(추가) TX, RX에 Level 3.3V라고 씌여진 모델은 해당 모듈의 RX핀으로의 입력은 데이터핀 5V의 전압을 낮추기 위해 아래 1K, 2K 옴 저항으로 회로를 구성하는 권고하고 있는 것을 추가한다. 없이도 작동하는 경우가 많으나, 지속 사용되는 경우 역시 전압이 다소 높게되면 모듈에 손상을 줄수 있기 때문이다)

[http://acoptex.com/project/151/ 발췌]


블루투스 모듈이 깜빡이는 상태, 즉 블루투스 연결 전 상태일 때는 AT??명령에 의하여 해당 모듈을 제어할 수 있다. AT라고 명령을 보내면 OK라는 응답이 떨어지고 기타 다른 몇 가지 제어 명령이 가능하다. 간단하게는 아래와 같고 세부 내용은 매뉴얼 링크(http://www.instructables.com/id/AT-command-mode-of-HC-05-Bluetooth-module/step5/AT-commands/)를 참조한다. 간단한 명령을 소개해보면 다음과 같다.

 

AT : 명령확인

AT+NAMExxx: 이름 변경

AT+VERSION: 버전표시

AT+PINxxxx: 암호 변경

 

블루투스 연결이 이루어지고 난 후는 위 제어명령은 작동하지 않고, 해당 시리얼로 보낸 내용이 반대편 블루투스 연결된 기기쪽으로 송신되고 반대로 수신내용은 역시 시리얼로 수신 가능하다. 소스 소개 란에서 상세히 살펴보자

 

▶ 소스 코드 입력 및 구동

아래 소스를 컴파일하여 작동시키고, 9600bps로 시리얼 모니터를 작동시키자(CTRL+SHIFT+M).

송신 모듈 소스 원본 GitHub 링크 : https://github.com/bbangpan/bbangpan.com/blob/master/neibc_hc06/neibc_hc06.ino

http://www.bbangpan.com ----------------------------------

/* Originally posted on www.bbangpan.com


Program Description: HC-06 bluetooth 2.0 test code

DataPin : 2,3 to TX, RX of HC-06(cross connection)

Tested on : Arduino 1.0.6, Arduino UNO R3, HC-06


Copyright (c) 2015 www.bbangpan.com. All rights reserved.

This program can be used for any non-commercial purpose freely. */


#include <SoftwareSerial.h>


#define RXPIN 2 //to TX of HC-06

#define TXPIN 3 //to RX of HC-06

SoftwareSerial BTSerial(RXPIN, TXPIN);

 

void setup(){

  Serial.begin(9600);

  BTSerial.begin(9600);

}

 

void loop(){

  if (BTSerial.available()) {

    Serial.write(BTSerial.read());

  }

  if (Serial.available()) {

    BTSerial.write(Serial.read());

  }

}


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

시리얼 모니터에서는 입력창에 전송할 내용을 입력하고 Send버튼을 누르면 시리얼로 내용 송부가 가능하다. 앞서 배웠던 AT, AT+VERSION을 입력하고 엔터를 치면 다음과 같이 볼 수 있다. 아직 블루투스 끼리 연결(페어링/pairing이라고 한다)이 안된상태여야만 해당 명령이 작동한다.

<AT명령을 두번 보내고, AT+VERSION을 한번 보냈을 때 표시되는 화면>

내용 수신시 별도의 엔터코드를 받지 않기 때문에 공백없이 한줄로 출력되는 점에 유의한다. 또한, 어떤 시리얼 통신은 입력완료시 ("\n")이나("\r\n")을 보내야만 작동하는 것이 있으니, 보유하고 있는 네트워크 모듈이 작동하지 않으면 시도해본다. (아두이노 Sketch의 시리얼 모니터 툴의 하단의 옵션-기본:No line ending-을 통해서도 \n, \r\n 전송 옵션 변경 가능하다). 디폴트 시리얼 통신 속도는 9600bps이다.

 

이번에는 블루투스 연결을 해보자. Android폰의 플레이스토어에서Moongle이 업로드한 Arduino Bluetooth echo프로그램을 다운받아 구동해보자.(안드로이드 버전에 따라 미지원할 수 있다. 해당 안드로이드 앱 소스 등은 http://dev.re.kr/38 참조)

<Arduino 테스트 코드>

해당 앱을 실행하고, 이번에는 메뉴에서 Connect device를 선택하여 페어링을 해보자.

<Scan하여 HC-06을 확인하고 선택한다.필요시 암호(디폴트1234)를 입력한다>

페어링이 끝나면 Arduino에 연결된 시리얼 모니터에 입력하는 내용이 상기 안드로이드 앱에서 출력되고, 반대로 상기 앱에서 입력한 것이 아두이노 스케치의 시리얼 모니터에 출력됨을 알 수 있다. 앱을 종료하여 다시 페어링이 끊어지면, 모듈에 불이 다시 깜빡이며 AT명령을 입력하는 상태로 바뀐다.

<앱에서 test hi Bluetooth message를 차례로 입력한다>

<시리얼모니터 화면에서 해당 메세지를 볼 수 있다>

상기 기능을 활용하면, 채팅 앱만으로도 아두이노를 다양하게 제어할 수 있으며. 이러한 간단한 블루투스 안드로이드 앱 소스는 오픈되어 있어서 안드로이드 개발자라면 응용 앱들을 다양하게 만들 수 있다. https://github.com/ice3x2/HC-06_Arduino_Echohttps://github.com/godstale/BTChat 를 참조한다.

 

▶ 구매 가이드

HC-06 : http://www.aliexpress.com/item/HC-06-Bluetooth-serial-pass-through-module-wireless-serial-communication-from-machine-Wireless-HC06-for-arduino/1620402298.html 이나 http://search.auction.co.kr/search/search.aspx?keyword=HC-06+arduino&itemno=&nickname=&frm=hometab&dom=auction&isSuggestion=No&retry=&Fwk=HC-06+arduino&acode=SRP_SU_0100&arraycategory=&encKeyword=HC-06%2520arduino 를 참조한다.

 

강의 키워드

아두이노 블루투스, Arduino Bluetooth, hc-06, HC-06, Bluetooth 2.0, 아두이노 블루투스 채팅, hc-06 at commands, hc-06 at명령

 

반응형