5주차: 블루투스 통신 실습 - dhryu60/SmartDevice_2025-1 GitHub Wiki

5주차: 블루투스 통신 실습

1. 개요

ESP32의 블루투스 기능을 활용하여 데이터 송수신 방법을 학습합니다. BLE(Bluetooth Low Energy)와 클래식 블루투스 방식의 차이를 이해하고, 각각의 방식을 이용한 실습을 진행합니다.

🔹 학습 목표

  • 블루투스 통신의 기본 개념을 이해한다.
  • ESP32의 클래식 블루투스 및 BLE 방식을 활용하여 데이터를 송수신한다.
  • BLE를 이용하여 RGB LED를 제어하는 실습을 진행한다.

🔹 핵심 키워드

ESP32, 블루투스, BLE, 클래식 블루투스, RGB LED

🔹 준비물

  • ESP32 개발 보드
  • ESP32 확장 실드 (선택 사항)
  • RGB LED 모듈

2. 블루투스 개요

블루투스는 근거리 무선 통신 기술로, 스마트폰, 스피커, IoT 기기 등에서 널리 사용됩니다. ESP32에서는 **클래식 블루투스(Classic Bluetooth)**와 BLE(Bluetooth Low Energy) 두 가지 방식을 지원합니다.

✅ 블루투스 방식 비교

방식 전력 소비 데이터 전송 속도 연결 범위
BLE 저전력 낮음 짧음
클래식 블루투스 상대적으로 높음 높음

IoT 시스템에서는 BLE가 주로 사용되며, 센서 데이터 전송, 게이트웨이 연결 등의 역할을 수행합니다.


3. 클래식 블루투스 데이터 송수신

ESP32를 블루투스 장치로 설정하고 스마트폰과 데이터를 주고받는 실습을 진행합니다.

image

🔹 회로 연결

  • ESP32 단독 사용 (별도의 회로 연결 없음)

🔹 코드 작성

#include "BluetoothSerial.h"

BluetoothSerial SerialBT;

void setup() {
  Serial.begin(115200);
  SerialBT.begin("ESP32-BT-Slave"); // 블루투스 장치 이름 설정
  Serial.println("Bluetooth Started! Pair with ESP32-BT-Slave");
}

void loop() {
  if (Serial.available()) {
    char incoming = Serial.read();
    SerialBT.write(incoming); // 시리얼 데이터를 블루투스로 전송
  }
  if (SerialBT.available()) {
    char incoming = SerialBT.read();
    Serial.write(incoming); // 블루투스 데이터를 시리얼로 출력
  }
}

BluetoothSerial 클래스

https://github.com/dhryu60/SmartDevice_2025-1/wiki/5%EC%A3%BC%EC%B0%A8_%EC%B0%B8%EA%B3%A0-:-BluetoothSerial-%ED%81%B4%EB%9E%98%EC%8A%A4

🔹 실행 방법

  1. 스마트폰에서 “Serial Bluetooth Terminal” 앱을 다운로드. image

  2. 블루투스 설정에서 ESP32-BT-Slave를 검색 후 페어링. image

  3. 앱에서 연결 후 데이터 송수신 테스트. image


4. 클래식 블루투스를 이용한 LED 제어

https://github.com/dhryu60/SmartDevice_2025-1/wiki/5%EC%A3%BC%EC%B0%A8_%EC%B0%B8%EA%B3%A0-:-LED-ON-OFF

5. BLE를 이용한 RGB LED 제어

BLE 방식으로 ESP32와 스마트폰 간 통신을 통해 RGB LED 색상을 변경하는 실습을 진행합니다.

image

🔹 회로 연결

  • RGB LED 모듈
    • R 핀 → D4
    • G 핀 → D15
    • B 핀 → D2
    • VCC → 3.3V
    • GND → GND

🔹RGB LED 제어

image

🔹 코드 작성

#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>

BLEServer* pServer;
BLECharacteristic* pCharacteristic;

void setup() {
  Serial.begin(115200);
  BLEDevice::init("ESP32-RGB-Control");
  pServer = BLEDevice::createServer();
  BLEService *pService = pServer->createService(BLEUUID((uint16_t)0x1812));
  pCharacteristic = pService->createCharacteristic(
                     BLEUUID((uint16_t)0x2A56),
                     BLECharacteristic::PROPERTY_WRITE | BLECharacteristic::PROPERTY_NOTIFY
                   );
  pService->start();
  BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
  pAdvertising->addServiceUUID(pService->getUUID());
  pAdvertising->start();
}

void loop() {
  if (pCharacteristic->getValue().length() > 0) {
    std::string rgbValue = pCharacteristic->getValue();
    Serial.println(rgbValue.c_str()); // 수신된 RGB 값 출력
  }
}

🔹 코드 설명

https://github.com/dhryu60/SmartDevice_2025-1/wiki/5%EC%A3%BC%EC%B0%A8_%EC%B0%B8%EA%B3%A0-:-%EC%BD%94%EB%93%9C-%EC%84%A4%EB%AA%85

🔹 실행 방법

  1. 스마트폰에서 “nRF Connect for Mobile” 앱을 다운로드. image image

  2. BLE 스캔 후 ESP32-RGB-Control 장치에 연결. image

  3. RGB 값을 변경하여 LED 색상 확인. image image image


6. 실습 정리

실습 내용 개념 설명 및 기능
클래식 블루투스 스마트폰과 ESP32 간 데이터 송수신
클래식 블루투스 LED 제어
BLE RGB LED 색상 제어

7. 추가 학습


8. 참고 자료

  • BLE를 이용한 센서 데이터 송신

챕터4.블루투스통신.pdf 스디_BT.pdf

⚠️ **GitHub.com Fallback** ⚠️