5주차: 블루투스 통신 실습 - dhryu60/SmartDevice_2025-1 GitHub Wiki
ESP32의 블루투스 기능을 활용하여 데이터 송수신 방법을 학습합니다. BLE(Bluetooth Low Energy)와 클래식 블루투스 방식의 차이를 이해하고, 각각의 방식을 이용한 실습을 진행합니다.
- 블루투스 통신의 기본 개념을 이해한다.
- ESP32의 클래식 블루투스 및 BLE 방식을 활용하여 데이터를 송수신한다.
- BLE를 이용하여 RGB LED를 제어하는 실습을 진행한다.
ESP32, 블루투스, BLE, 클래식 블루투스, RGB LED
- ESP32 개발 보드
- ESP32 확장 실드 (선택 사항)
- RGB LED 모듈
블루투스는 근거리 무선 통신 기술로, 스마트폰, 스피커, IoT 기기 등에서 널리 사용됩니다. ESP32에서는 **클래식 블루투스(Classic Bluetooth)**와 BLE(Bluetooth Low Energy) 두 가지 방식을 지원합니다.
- 블루투스 소개
https://www.youtube.com/watch?v=46KWIyvCZEk&t=242s - 블루투스 기초
https://github.com/dhryu60/SmartDevice_2025-1/wiki/5%EC%A3%BC%EC%B0%A8_%EC%B0%B8%EA%B3%A0-:-%EB%B8%94%EB%A3%A8%ED%88%AC%EC%8A%A4-%EA%B8%B0%EC%B4%88
방식 | 전력 소비 | 데이터 전송 속도 | 연결 범위 |
---|---|---|---|
BLE | 저전력 | 낮음 | 짧음 |
클래식 블루투스 | 상대적으로 높음 | 높음 | 김 |
IoT 시스템에서는 BLE가 주로 사용되며, 센서 데이터 전송, 게이트웨이 연결 등의 역할을 수행합니다.
ESP32를 블루투스 장치로 설정하고 스마트폰과 데이터를 주고받는 실습을 진행합니다.
- 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); // 블루투스 데이터를 시리얼로 출력
}
}
-
스마트폰에서 “Serial Bluetooth Terminal” 앱을 다운로드.
-
블루투스 설정에서 ESP32-BT-Slave를 검색 후 페어링.
-
앱에서 연결 후 데이터 송수신 테스트.
BLE 방식으로 ESP32와 스마트폰 간 통신을 통해 RGB LED 색상을 변경하는 실습을 진행합니다.
-
RGB LED 모듈
- R 핀 → D4
- G 핀 → D15
- B 핀 → D2
- VCC → 3.3V
- GND → GND
#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 값 출력
}
}
-
스마트폰에서 “nRF Connect for Mobile” 앱을 다운로드.
-
BLE 스캔 후 ESP32-RGB-Control 장치에 연결.
-
RGB 값을 변경하여 LED 색상 확인.
실습 내용 | 개념 설명 및 기능 |
---|---|
클래식 블루투스 | 스마트폰과 ESP32 간 데이터 송수신 |
클래식 블루투스 | LED 제어 |
BLE | RGB LED 색상 제어 |
- 심화 : https://www.youtube.com/watch?v=uIa9nvGawdY
- BLE를 이용한 센서 데이터 송신
- ESP32 블루투스 오디오 스트리밍
- ESP32 블루투스 메시 네트워크 구축
- BLE를 이용한 센서 데이터 송신