강좌 전체보기

.

.

근래에는 블루투스 중에서도 BLE 가 단연 인기입니다. BLE는 저전력으로 동작하기 때문에 센서장치의 소형화가 가능한게 컸습니다.

하지만 여전히 클래식 블루투스는 매력적인 장점들을 가지고 있습니다.

  • 어플리케이션을 만들기 쉽습니다. 모바일 폰이든 서버든 클래식 블루투스 통신 코드는 더 간단하게 작성할 수 있습니다.
  • 호환성이 좋습니다. 오래된 스마트 폰이라도 클래식 블루투스는 지원하는 경우가 많습니다. 따라서 어떤 환경이든 사용자가 가진 모바일 장치와 연결할 수 있는 가능성이 높습니다.
  • 통신 속도가 더 빠릅니다. 데이터 사이즈가 큰 경우 좀 더 이점이 있습니다.
  • 테스트용 모듈이 저렴하고, 구하기도 쉽고, 사용하기도 쉽습니다.

단점을 뽑아보자면 아래와 같습니다.

  • BLE에 비해 배터리 소모량이 큽니다. 센서장치를 만들 때는 이 부분이 치명적입니다.
  • 아이폰 용 어플리케이션 만들기가 어렵습니다. 아이폰은 인증받은 블루투스 칩셋을 이용하고, 제품 설계 후 심사를 받아야 합니다. 소규모 개발자 단위로 이런 제약사항을 극복하고 시간과 돈을 투자해서 만들기는 어렵습니다.
  • BLE 에 비해 활용할 수 있는 형태가 제한됩니다.

따라서 상용 서비스에는 클래식 블루투스를 사용하기에는 어려운 면이 많습니다. 하지만 빠르게 프로토타이핑을 하거나 데모 버전을 제작한다던지, DIY 를 하는 경우 클래식 블루투스가 훨씬 생상성이 높습니다.

이번 파트에서는 hc-06 모듈을 이용해 아두이노와 클래식 블루투스, 모바일 폰(안드로이드)을 연결하고 서로 채팅을 할 수 있도록 만들어 보겠습니다. 이 실습은 센서장치와 모바일 폰이 블루투스를 이용해 통신을 하는 가장 기초적인 방법을 구현해보는 것입니다.

.

.

HC-06 모듈과 아두이노 연결 방법

HC-06 은 단 돈 몇 천원이면 구할 수 있는 클래식 블루투스 모듈입니다. 사용자가 설정할 수 있는 부분이 별로 없지만, 연결도 간단하고 사용도 쉽습니다. 제원은 다음과 같습니다.

  • EDR 블루투스 2.0, 2Mbps – 3Mbps 변조
  • 2.4GHz 안테나 내장
  • 외부 8Mbit FLASH
  • 3.3V 저전압 동작
  • 옵션 PIO 제어
  • 표준 HCI 포트 (UART), SMD 배치 프로세스로 모듈
  • RoHS 규제 절차, 디지털 2.4GHz 무선 송신
  • CSR BC04 블루투스 칩 기술
  • 크기 (27mm × 13mm × 2mm)
  • 블루투스 클래스 2 전력 레벨
  • 보관 온도 : -40 +85도, 작동 온도 : -25으로 75도

일단은 HC-06 모듈을 아두이노에 연결해야 합니다. HC-06 모듈이 시리얼 통신을 지원하기 때문에 아래와 같이 연결하면 됩니다.

Bluetooth HC-06 Arduino
VCC 3.3V
GND GND
TX D2
RX D3

사실 아두이노의 시리얼 통신 핀은 D0, D1 입니다. 하지만 이 핀들은 PC와 시리얼-USB 통신을 하는데 써야합니다. 그래서 일반 디지털 핀 2개를 이용해서 시리얼 통신이 가능하도록 해주는 SoftwareSerial 이란 방법을 사용합니다. 즉, D2-D3 핀을 이용해서 SoftwareSerial 로 아두이노와 HC-06 모듈을 연결하는겁니다.

블루투스 모듈 연결이 끝났으면 아두이노를 PC와 USB 케이블로 연결합니다. 이렇게 연결하면 [PC – 아두이노 – HC06 모듈] 이 일렬로 연결되어서 서로 데이터를 주고 받을 수 있는 상태가 됩니다.

이 상태로 만드는 이유는 PC에서 AT command 라 불리는 문자열을 보내서 HC-06 모듈의 이름을 바꾸기 위해서입니다. 블루투스에 사람이 알아볼 수 있는 이름을 지정해주지 않으면 여러개의 HC-06 모듈이 혼재되어 있을 때, 핸드폰에서 내가 가진 블루투스 모듈이 어떤건지 찾을 수 없기 때문입니다.

.

HC-06 모듈 이름 변경

아두이노에는 아래 코드를 업로드 해줍니다. (GitHub 소스 링크)

#include <SoftwareSerial.h>

SoftwareSerial BTSerial(2, 3); //Connect HC-06. Use your (TX, RX) settings

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

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

void loop()
{
  // BT –> Data –> Serial
  if (BTSerial.available()) {
    Serial.write(BTSerial.read());
  }
  // Serial –> Data –> BT
  if (Serial.available()) {
    BTSerial.write(Serial.read());
  }
}

이 코드는 PC에서 받은 데이터는 HC-06 모듈로 던져주고, HC-06에서 받은 데이터는 PC로 던져주도록 되어 있습니다. 따라서 PC에서 AT 커맨드를 보내주면 HC-06 모듈이 처리하고 그 결과를 PC에 알려줄 수 있습니다.

스케치 업로드가 끝났으면 PC의 아두이노 개발환경에서 [시리얼 모니터]를 실행합니다. 시리얼 모니터에 아래처럼 AT command 를 보내보세요.

  • 블루투스 모듈이 반응하는지 확인 : AT
    • 정상적으로 반응하는 경우 OK 라고 메시지를 보내줍니다.
    • OK 가 표시되지 않으면 아두이노와 HC-06 모듈의 연결을 확인하세요.
  • 장치명 변경: AT+NAMExxxx (이름을 mybt01 로 바꾼다면 : AT+NAMEmybt01)
    • 정상적으로 변경되면 OKsetname xxx 와 같은 메시지가 시리얼 모니터에 출력될 것입니다.

.

.

채팅 테스트

HC-06 블루투스 모듈의 설정을 바꿨으니 이제는 모바일 장치(안드로이드 폰) 까지 연결해서 무선으로 채팅이 되는지 확인해 보겠습니다. (아이폰은 HC-06 모듈로 통신이 안됩니다!)

아두이노에 소스코드를 따로 올릴 필요는 없습니다. 안드로이드 폰에 실습을 위해 제작한 앱을 설치하고 블루투스 모듈을 찾아서 연결만 해주면 됩니다.

모바일 폰 앱에서 Pairing 과정까지 완료되면 PC -> 아두이노 -> HC-06 모듈로 전달된 데이터는 자동으로 모바일 폰으로 전달됩니다. 마찬가지로 반대 방향으로도 데이터가 흐르게 됩니다.

아래 링크에서 앱을 다운로드 받아 실행해보세요.

아래 순서로 연결이 되는지 테스트하세요.

  1. 먼저 아두이노를 PC에 연결해서 HC-06 슬레이브 모듈이 페어링 대기상태에 들어가도록 합니다. (LED 깜빡깜빡)
  2. 구글 플레이스토어에서 BtChat 앱을 다운로드 받아 설치합니다.
  3. 앱을 실행해서 Permission 동의해줍니다.
  4. 폰의 설정 > 블루투스 에서 off 상태이면 BT on 으로 바꿉니다.
  5. 앱 내에서 Connect a device 버튼 선택
  6. Device List 에 HC-06 슬레이브 모듈이 보이는지 확인. 안보이면 Scan 버튼을 눌러서 찾아보고 그래도 안되면 3부터 다시합니다.
  7. HC-06 모듈이 내가 지정한 이름으로 보이면 선택 – 연결이 정상적으로 완료되면 챗팅 가능
  8. 폰으로 글 적으면 PC의 Serial Monitor에서 보이는지 확인합니다. 반대도 확인!!

테스트를 직접 해보시면 아시겠지만 상당히 단순한 코딩만으로 센서장치(아두이노)와 모바일 폰을 연결했습니다. 블루투스 모듈도 이름만 바꿔주면 바로 사용이 가능합니다. 이처럼 간단하게 사용이 가능한 것은 클래식 블루투스 프로토콜이 단순한 면도 있고, HC-06 모듈과 안드로이드 폰이 SPP 라는 프로파일을 지원하기 때문이기도 합니다.

SERIAL PORT PROFILE (SPP)

  • 블루투스를 이용해 serial communication interface (like RS-232 or a UART) 를 무선으로 대체하고 싶은 경우 SPP 프로파일을 사용합니다. SPP 프로파일은 두 장치가 많은 양의 데이터를 교환하는데 초점이 맞춰져 있습니다. 이 프로파일은 블루투스의 가장 기본적인 프로파일 중 하나이기도 합니다. (블루투스의 원래 목적이 RS-232 케이블 통신을 대체하는 것이기 때문)
  • SPP 프로파일을 사용하면 두 장치는 RX, TX 라인이 마치 유선으로 연결된 것 처럼 데이터터를 주고 받을 수 있습니다. 두 개의 아두이노 컨트롤러를 예로 들면, 블루투스가 유선으로 연결된 통신 라인을 대체하는 효과를 냅니다. (아두이노 입장에서는 유선이든 무선이든 코드의 변화를 최소화 해서 거의 유사하게 사용할 수 있습니다.)

52153610757b7f964a8b456a

여기서는 단순히 채팅을 하는데 클래식 블루투스를 사용했지만, 원한다면 이를 응용해서 다양한 곳에 사용할 수 있습니다. 흔히 Tech DIY 하시는 분들이 아두이노를 원격에서 제어할 때 많이 사용합니다.

테스트를 위해 제작한 안드로이드 앱 소스는 GitHub 에 업로드 되어 있습니다. 아래 링크에서 참고하세요.

주의!!! [사물 인터넷 네트워크와 서비스 구축 강좌] 시리즈 관련 문서들은 무단으로 내용의 일부 또는 전체를 게시하여서는 안됩니다. 계속 내용이 업데이트 되는 문서이며, 문서에 인용된 자료의 경우 원작자의 라이센스 문제가 있을 수 있습니다.

.

강좌 전체보기

.