블루투스(HC-06) 통신을 이용한 스마트폰 앱으로 센서 데이터 전송하기

블루투스 HC-06 통신을 이용한 스마트폰 앱으로 센서 데이터 전송하기 완벽 가이드

사물 인터넷(IoT) 시대가 도래하면서 주변 환경의 데이터를 수집하고 이를 편리하게 확인하며 제어하는 기술에 대한 관심이 높아지고 있습니다. 특히 스마트폰 앱을 통해 실시간으로 센서 데이터를 확인하는 것은 우리 삶을 더욱 스마트하고 효율적으로 만들어 줄 수 있습니다. 이 가이드에서는 아두이노와 같은 마이크로컨트롤러에 연결된 센서의 데이터를 블루투스 HC-06 모듈을 이용해 스마트폰 앱으로 전송하는 방법에 대해 쉽고 자세하게 알아보겠습니다.

이 기술은 단순히 데이터를 보는 것을 넘어, 특정 조건에 따라 알림을 받거나, 원격으로 장치를 제어하는 등 다양한 스마트 시스템 구축의 기반이 됩니다. 복잡하게 느껴질 수 있지만, 차근차근 따라하면 누구나 자신만의 스마트 환경 모니터링 시스템을 만들 수 있습니다.

블루투스 HC-06 모듈 기본 이해

블루투스 HC-06 모듈은 마이크로컨트롤러와 스마트폰, 또는 다른 블루투스 장치 간에 무선 시리얼 통신을 가능하게 해주는 저렴하고 대중적인 모듈입니다. 주로 슬레이브(Slave) 모드로 동작하며, 마스터(Master) 장치(예: 스마트폰)가 HC-06에 연결을 요청하고 데이터를 주고받는 방식입니다.

  • HC-06의 특징
    • 슬레이브 전용 모듈: 스마트폰이나 PC와 같은 마스터 장치에 의해 연결됩니다.
    • 간단한 사용법: 시리얼 통신(UART) 인터페이스를 사용하여 마이크로컨트롤러와 쉽게 연결할 수 있습니다.
    • 저렴한 가격: 입문자들이 쉽게 접근할 수 있는 가격대를 형성하고 있습니다.
    • 안정적인 연결: 비교적 짧은 거리(약 10미터) 내에서 안정적인 무선 통신을 제공합니다.
  • HC-05와의 차이점

    자주 혼동되는 HC-05 모듈은 마스터/슬레이브 모드를 모두 지원하여 더 유연하게 사용할 수 있지만, 설정이 HC-06보다 복잡합니다. HC-06은 슬레이브 전용으로, 스마트폰 앱과 데이터를 주고받는 용도로는 HC-06이 더 간편하고 적합할 수 있습니다. 즉, HC-06은 “연결을 받는” 역할에 특화되어 있습니다.

스마트폰 앱 연동의 중요성과 다양한 활용 분야

센서 데이터를 스마트폰 앱으로 전송하는 것은 단순한 호기심을 넘어 실질적인 가치를 제공합니다. 스마트폰은 우리에게 가장 친숙하고 휴대성이 높은 장치이므로, 언제 어디서든 필요한 정보를 확인하고 조치할 수 있게 해줍니다.

  • 실시간 모니터링

    집안의 온습도, 공기 질, 토양 습도, 가스 누출 여부 등을 실시간으로 스마트폰 앱에서 확인할 수 있습니다. 예를 들어, 식물 재배 시 토양 습도가 낮아지면 앱에서 알림을 받고 즉시 물을 줄 수 있습니다.

  • 스마트 홈 및 자동화

    특정 센서 값(예: 조도 센서)에 따라 조명을 자동으로 켜거나 끄고, 앱에서 직접 에어컨이나 가습기를 제어하는 등 스마트 홈 시스템의 기반을 마련할 수 있습니다.

  • 헬스케어 및 웨어러블 기기

    심박수, 체온, 활동량 등의 생체 데이터를 센서로 측정하고 스마트폰 앱으로 전송하여 건강 상태를 모니터링하거나 이상 징후 발생 시 알림을 받을 수 있습니다.

  • 스마트 팜

    온실 내부의 온도, 습도, 일조량, 토양 pH 등 다양한 환경 데이터를 수집하여 작물 생장에 최적화된 환경을 유지하고, 앱을 통해 원격으로 관개 시스템을 제어할 수 있습니다.

  • 개인 프로젝트 및 교육

    학생이나 취미 개발자들이 IoT의 기본 원리를 이해하고 실제 프로젝트를 구현하는 데 매우 유용합니다. 복잡한 네트워크 지식 없이도 무선 통신을 경험할 수 있습니다.

필요한 준비물과 기본적인 연결 과정

이 프로젝트를 시작하기 전에 몇 가지 기본적인 준비물이 필요합니다. 대부분 온라인 쇼핑몰에서 저렴하게 구매할 수 있습니다.

준비물

  • 마이크로컨트롤러 보드 아두이노 우노(Arduino Uno) 또는 나노(Nano)
  • 블루투스 모듈 HC-06
  • 센서 모듈 (예: DHT11 온습도 센서, CDS 조도 센서, 초음파 센서 등 원하는 센서)
  • 브레드보드 (회로 구성용)
  • 점퍼선 (수수, 암수)
  • 스마트폰 (안드로이드 또는 iOS)
  • USB 케이블 (아두이노 연결용)
  • 저항 (필요에 따라, 예: 전압 분배 저항)

HC-06과 아두이노 연결하기

HC-06 모듈은 4개의 주요 핀을 가지고 있습니다. 이를 아두이노와 연결하는 방법을 소개합니다.

HC-06 핀 아두이노 핀 설명
VCC 5V 전원 공급 (3.3V 또는 5V, 모듈 사양 확인)
GND GND 접지
TXD (송신) RX (수신) HC-06이 데이터를 보내면 아두이노가 받음
RXD (수신) TX (송신) 아두이노가 데이터를 보내면 HC-06이 받음

주의사항:

  • HC-06의 RXD 핀은 일반적으로 3.3V 로직 레벨을 사용합니다. 아두이노 우노의 TX 핀은 5V를 출력하므로, HC-06의 RXD 핀에 직접 연결하면 모듈이 손상될 수 있습니다. 이 경우 1kΩ과 2kΩ 저항을 사용하여 전압 분배 회로를 구성하여 5V를 3.3V로 낮춰주는 것이 안전합니다. 하지만 많은 HC-06 모듈은 5V 허용 입력 회로가 내장되어 있어 직접 연결해도 동작하는 경우가 많으므로, 모듈 구매 시 사양을 확인하는 것이 가장 좋습니다. 안전을 위해 전압 분배 저항을 사용하는 것을 권장합니다.
  • 아두이노의 하드웨어 시리얼(핀 0, 1)은 USB 통신에도 사용되므로, HC-06 연결 시 소프트웨어 시리얼(SoftwareSerial 라이브러리)을 사용하는 것이 일반적입니다. 이렇게 하면 HC-06과 통신하면서 동시에 USB 시리얼 모니터를 통해 디버깅할 수 있습니다.

아두이노 코드 작성 핵심 가이드

아두이노 코드는 센서에서 데이터를 읽고, 이를 블루투스 HC-06 모듈로 전송하는 역할을 합니다. 여기서는 DHT11 온습도 센서를 예시로 들어 설명하겠습니다.

소프트웨어 시리얼 설정

아두이노의 특정 디지털 핀을 가상 시리얼 포트로 사용하여 HC-06과 통신합니다.

#include <SoftwareSerial.h>

#include <DHT.h> // DHT11 센서 라이브러리


// HC-06의 RX 핀을 아두이노의 10번 핀에, TX 핀을 아두이노의 11번 핀에 연결

SoftwareSerial btSerial(10, 11); // (RX, TX)


// DHT11 센서 설정

#define DHTPIN 2     // DHT11 센서 데이터 핀을 아두이노 2번 핀에 연결

#define DHTTYPE DHT11   // DHT 11

DHT dht(DHTPIN, DHTTYPE);


void setup() {

  Serial.begin(9600); // USB 시리얼 모니터 통신 속도

  btSerial.begin(9600); // 블루투스 HC-06 통신 속도 (기본 9600)

  Serial.println("아두이노 시작");

  dht.begin();

}


void loop() {

  delay(2000); // 센서 데이터 읽는 주기 (2초)


  // 센서에서 온습도 데이터 읽기

  float h = dht.readHumidity();

  float t = dht.readTemperature();


  // 데이터 읽기 실패 시

  if (isnan(h) || isnan(t)) {

    Serial.println("DHT 센서에서 데이터를 읽을 수 없습니다!");

    return;

  }


  // USB 시리얼 모니터로 출력 (디버깅용)

  String dataToPrint = "습도: " + String(h) + "%, 온도: " + String(t) + "도";

  Serial.println(dataToPrint);


  // 블루투스로 데이터 전송

  btSerial.println(dataToPrint);

}

코드 설명:

  • SoftwareSerial btSerial(10, 11);: 아두이노 10번 핀을 HC-06의 TX (HC-06이 보내는 데이터를 아두이노가 받음), 11번 핀을 HC-06의 RX (아두이노가 보내는 데이터를 HC-06이 받음)로 설정합니다.
  • btSerial.begin(9600);: HC-06 모듈의 기본 통신 속도는 9600bps입니다. 만약 모듈의 통신 속도를 AT 명령어로 변경했다면 해당 속도로 맞춰주어야 합니다.
  • dht.readHumidity();, dht.readTemperature();: DHT11 센서에서 습도와 온도를 읽어옵니다.
  • btSerial.println(dataToPrint);: 읽어온 센서 데이터를 문자열 형태로 블루투스를 통해 스마트폰 앱으로 전송합니다. println() 함수는 데이터를 보낸 후 줄 바꿈 문자를 추가하여 앱에서 데이터를 쉽게 구분할 수 있도록 합니다.

스마트폰 앱과의 통신 구현 방법

스마트폰에서 HC-06 모듈과 통신하려면 앱이 필요합니다. 앱을 직접 개발할 수도 있고, 기존의 범용 블루투스 시리얼 터미널 앱을 사용할 수도 있습니다.

1. 범용 블루투스 시리얼 터미널 앱 활용 (초보자에게 가장 실용적)

가장 쉽고 빠르게 센서 데이터를 확인하는 방법입니다. 구글 플레이 스토어(안드로이드)나 앱스토어(iOS)에서 “Bluetooth Serial Terminal”, “블루투스 시리얼 모니터” 등으로 검색하면 다양한 무료 앱을 찾을 수 있습니다.

    • 블루투스 페어링: 스마트폰의 블루투스 설정에서 HC-06 모듈을 검색하고 페어링합니다. HC-06의 기본 이름은 “HC-06” 또는 “linvor” 등이며, 기본 비밀번호는 “1234” 또는 “0000”입니다.
    • 앱 실행 및 연결: 다운로드한 블루투스 시리얼 터미널 앱을 실행하고, 앱 내에서 HC-06 모듈을 선택하여 연결합니다.
    • 데이터 수신 확인: 연결이 성공하면 아두이노에서 전송하는 센서 데이터가 앱 화면에 실시간으로 표시되는 것을 확인할 수 있습니다.

2. 스마트폰 앱 직접 개발

데이터 시각화, 특정 조건 알림, 장치 제어 등 더 복잡한 기능을 원한다면 앱을 직접 개발해야 합니다.

    • MIT App Inventor (안드로이드)

      코딩 경험이 적은 사용자도 블록 코딩 방식으로 안드로이드 앱을 쉽게 만들 수 있습니다. 블루투스 클라이언트 컴포넌트를 사용하여 HC-06 모듈과 연결하고 데이터를 수신하는 앱을 만들 수 있습니다. 데이터 수신 시 특정 레이블에 값을 표시하거나 그래프로 나타내는 기능을 구현할 수 있습니다.

    • Android Studio (안드로이드) / Xcode (iOS)

      전문적인 앱 개발을 위한 통합 개발 환경입니다. Java/Kotlin(안드로이드), Swift/Objective-C(iOS) 언어를 사용하여 블루투스 통신 API를 직접 제어하고 앱을 개발합니다. 이 방법은 학습 곡선이 높지만, 가장 강력하고 유연한 기능을 구현할 수 있습니다.

성공적인 프로젝트를 위한 유용한 팁과 조언

프로젝트를 진행하면서 발생할 수 있는 문제들을 해결하고 더 나은 결과를 얻기 위한 팁입니다.

  • 전원 공급의 안정성

    HC-06 모듈은 전원 공급이 불안정하면 제대로 작동하지 않거나 통신 오류를 일으킬 수 있습니다. 아두이노의 5V 핀에서 충분한 전류를 공급하고 있는지 확인하세요. 많은 전문가들은 안정적인 전원 공급이 통신 오류를 줄이는 핵심이라고 조언합니다.

  • 핀 연결의 정확성

    TX-RX, RX-TX 교차 연결은 블루투스 통신의 기본 원칙입니다. VCC와 GND가 올바르게 연결되었는지도 다시 한번 확인하세요.

  • 시리얼 통신 속도 일치

    아두이노 코드의 btSerial.begin() 함수에 설정된 통신 속도(보통 9600)와 HC-06 모듈의 실제 통신 속도가 일치해야 합니다. HC-06 모듈의 통신 속도는 AT 명령어를 통해 변경할 수 있지만, 기본 설정으로 시작하는 것이 좋습니다.

  • 블루투스 페어링 상태 확인

    HC-06 모듈의 LED는 연결 상태를 나타냅니다. 보통 페어링 대기 중에는 빠르게 깜빡이고, 스마트폰과 연결되면 느리게 깜빡이거나 계속 켜져 있습니다. 연결이 제대로 되었는지 LED 상태로 확인하세요.

  • 디버깅 요령

    문제가 발생하면 아두이노의 USB 시리얼 모니터를 통해 센서 데이터가 제대로 읽히고 있는지, 블루투스로 전송하기 직전의 데이터가 올바른지 먼저 확인하세요. 이 과정에서 Serial.println() 함수를 적극적으로 활용하여 변수 값을 확인하는 것이 큰 도움이 됩니다.

  • 센서 데이터 형식 통일

    앱으로 여러 종류의 센서 데이터를 보낼 때는 특정 구분자(예: 쉼표, 콜론)를 사용하여 데이터를 파싱하기 쉽게 만드는 것이 좋습니다. 예를 들어, “T:25.5,H:60.2″와 같이 보내면 앱에서 온도와 습도를 쉽게 분리할 수 있습니다.

흔한 오해와 사실 관계

블루투스 HC-06 통신에 대해 자주 오해하는 부분들을 짚어봅니다.

  • 오해 HC-06으로도 여러 장치를 동시에 연결할 수 있다.

    사실: HC-06은 슬레이브 전용 모듈이며, 한 번에 하나의 마스터 장치(예: 스마트폰)하고만 연결될 수 있습니다. 여러 개의 센서 노드를 동시에 모니터링하려면 각각의 센서 노드에 HC-06을 사용하고 스마트폰 앱에서 순차적으로 연결하거나, Wi-Fi(ESP32/ESP8266)나 메시(Mesh) 네트워크와 같은 다른 통신 방식을 고려해야 합니다.

  • 오해 블루투스 통신은 항상 빠르고 지연이 없다.

    사실: 블루투스 시리얼 통신은 일반적으로 초당 수 KB에서 수십 KB 정도의 속도를 가집니다. 센서 데이터를 주기적으로 보내는 데는 충분하지만, 고해상도 비디오 스트리밍이나 대용량 파일 전송에는 적합하지 않습니다. 또한, 무선 통신 환경에 따라 약간의 지연이 발생할 수 있습니다.

  • 오해 HC-06은 보안에 매우 취약하다.

    사실: HC-06은 기본적인 페어링 비밀번호 외에 강력한 암호화 기능을 제공하지 않습니다. 매우 민감한 데이터를 전송할 때는 블루투스 LE (Low Energy)의 보안 기능이나 데이터 자체를 암호화하는 방식을 고려해야 합니다. 하지만 일반적인 환경 모니터링에는 큰 문제가 되지 않습니다.

비용 효율적인 활용 방법

이 프로젝트는 비교적 저렴한 비용으로 시작할 수 있습니다. 다음은 비용을 더욱 절감하고 효율을 높이는 방법입니다.

  • 오픈소스 하드웨어 및 소프트웨어 활용

    아두이노는 대표적인 오픈소스 하드웨어이며, 아두이노 IDE도 무료로 사용할 수 있습니다. 스마트폰 앱 개발도 MIT App Inventor와 같은 무료 플랫폼을 활용하면 개발 비용을 크게 절감할 수 있습니다.

  • 저렴한 센서 모듈 선택

    DHT11, CDS, LM35 등 기본적인 기능의 센서 모듈은 가격이 매우 저렴합니다. 처음에는 이러한 센서들을 활용하여 프로젝트를 시작하는 것이 좋습니다. 필요한 기능에 따라 점차 더 복잡하고 비싼 센서로 업그레이드할 수 있습니다.

  • 재활용 부품 활용

    오래된 전자기기에서 분리한 전선, 케이스 등을 재활용하여 프로젝트 비용을 줄일 수 있습니다. 예를 들어, 스마트폰 충전기를 아두이노의 전원 공급 장치로 활용할 수 있습니다.

  • 모듈 세트 구매

    아두이노 스타터 키트나 센서 모음 세트 등을 구매하면 개별 부품을 구매하는 것보다 저렴한 경우가 많습니다. HC-06 모듈 또한 아두이노와 함께 세트로 판매되는 경우가 있습니다.

자주 묻는 질문과 답변

이 주제에 대해 독자들이 궁금해할 만한 질문들을 모아봤습니다.

Q1 HC-06 모듈의 이름이나 비밀번호를 변경할 수 있나요?

A1: 네, 아두이노를 통해 AT 명령어를 전송하여 HC-06의 이름이나 비밀번호, 통신 속도 등을 변경할 수 있습니다. HC-06은 AT 명령 모드로 진입하는 별도의 핀이 없으며, 전원이 켜진 상태에서 아두이노 시리얼 모니터를 통해 특정 명령어를 보내면 됩니다. 예를 들어, AT+NAME새이름, AT+PIN새비밀번호 와 같은 명령어들을 사용합니다. 이때 아두이노와 HC-06의 TX/RX 연결을 잠시 바꿔주는 과정이 필요할 수 있습니다.

Q2 블루투스 통신 거리는 어느 정도인가요?

A2: HC-06 모듈은 일반적으로 클래스 2 블루투스 모듈로, 이론적으로는 최대 10미터(33피트)의 통신 거리를 가집니다. 하지만 벽이나 다른 무선 간섭 요인에 따라 실제 통신 거리는 더 짧아질 수 있습니다.

Q3 스마트폰 앱에서 데이터가 제대로 수신되지 않을 때 무엇을 확인해야 하나요?

A3: 다음 사항들을 순서대로 확인해보세요:

    • 아두이노의 시리얼 모니터에서 센서 데이터가 올바르게 출력되는지 확인합니다.
    • HC-06과 아두이노의 TX/RX 핀 연결이 정확한지 다시 확인합니다 (TX-RX, RX-TX).
    • HC-06 모듈의 LED가 스마트폰과 페어링 및 연결되었음을 나타내는지 확인합니다.
    • 아두이노 코드의 btSerial.begin() 통신 속도와 HC-06의 실제 통신 속도가 일치하는지 확인합니다 (대부분 9600).
    • 스마트폰 블루투스 설정에서 HC-06이 올바르게 페어링되었는지 확인하고, 앱 내에서 HC-06에 연결되어 있는지 확인합니다.

Q4 여러 개의 센서에서 데이터를 읽어 스마트폰으로 보내려면 어떻게 해야 하나요?

A4: 아두이노는 여러 개의 센서를 동시에 연결하여 데이터를 읽을 수 있습니다. 각 센서에서 읽은 데이터를 하나의 문자열로 합쳐서 블루투스로 전송하면 됩니다. 이때 각 데이터 값을 구분할 수 있는 특정 구분자(예: 쉼표, 슬래시)를 사용하는 것이 중요합니다. 스마트폰 앱에서는 이 구분자를 기준으로 문자열을 분리하여 각 센서 데이터를 파싱(parsing)할 수 있습니다.

// 예시: 온도와 습도 데이터를 함께 전송

String combinedData = "T:" + String(t) + ",H:" + String(h);

btSerial.println(combinedData);

댓글 남기기