본문 바로가기
카테고리 없음

BLE (Bluetooth Low Energy)

by SuldenLion 2026. 6. 14.
반응형
BLE — 임베디드 & IoT | IoT 프로토콜 #04
임베디드 & IoT · IoT 프로토콜#04 of 08

// IoT Protocol — Bluetooth Low Energy

BLE

수십억 스마트폰과 직접 연결되는 초저전력 근거리 무선. GATT 기반 데이터 모델부터 BLE 6.0까지

IoT 프로토콜약 15분중급2.4GHz · GATT · 스마트폰 직접 연동

Section 01

BLE란? — Classic BT와 결정적 차이

BLE(Bluetooth Low Energy)는 Bluetooth 4.0(2010)부터 도입된 초저전력 근거리 무선 프로토콜입니다. Classic BT가 연속 오디오 스트리밍에 최적화된 반면, BLE는 소량의 데이터를 간헐적으로 전송하는 IoT 센서·웨어러블을 위해 재설계되었습니다.

📊
시장 현황 (2024): BLE 연간 출하량 약 50억 개. 스마트폰 100% BLE 지원. AirPods, Apple Watch, Tile 트래커, 혈당 모니터 — 모두 BLE 기반.
항목BLEClassic Bluetooth
최적 용도센서 데이터, 짧은 명령오디오 스트리밍, 파일 전송
피크 전류15 mA (TX)30 mA (TX)
연결 시간3 ms 미만100 ms 이상
광고 평균 전류~0.5 μAh/이벤트항상 연결 유지

Section 02

BLE 프로토콜 스택 구조

Application사용자 앱 코드, 비즈니스 로직
GATTService · Characteristic · Descriptor
GAP광고, 스캔, 연결 설정, 보안 모드
ATT속성 기반 클라이언트/서버 프로토콜
L2CAP논리 링크 제어, 멀티플렉싱
Link Layer연결 관리, AES-128, 광고, 주파수 호핑
Physical Layer2.4GHz · 40채널 · 1M/2M/Coded PHY

Section 03

GATT — 서비스와 특성으로 데이터 모델링

Profile

최상위 사양

여러 서비스의 집합

Service

기능 그룹

16-bit(표준)/128-bit UUID

Characteristic

데이터 값

Read · Write · Notify · Indicate

Descriptor

메타데이터

CCCD: Notify/Indicate 활성화

표준 UUID 예: 0x180D Heart Rate · 0x180F Battery · 0x1809 Health Thermometer

💡
Notify vs Indicate: Notify는 서버가 값 변경 시 자동 전송(ACK 없음). Indicate는 동일하지만 클라이언트 Confirmation을 기다립니다. 센서 데이터는 Notify, 중요 알림은 Indicate.

Section 04

GAP — 광고 패킷과 연결 관리

역할동작예시
Peripheral광고 패킷 브로드캐스트, 연결 수락온도계, 스마트 태그
Central스캔, 연결 시작, GATT 클라이언트스마트폰, 게이트웨이
Broadcaster연결 불가 광고만 (Beacon)iBeacon, Eddystone
Observer광고만 수신, 연결 안 함패시브 스캐너

Section 05

BLE 버전 진화 4.0 → 6.0

4.0

2010

BLE 최초 도입 1Mbps PHY

4.1

2013

듀얼 역할 연결 개선

4.2

2014

LE Secure Privacy

5.0

2016

2Mbps Coded PHY 장거리

5.2

2019

LE Audio LC3 코덱

6.0

2024

Channel Sounding 거리측정

Section 06

전력 최적화 — μA 단위 설계

TX @ 0dBm
4.6 mA
RX 수신 대기
4.4 mA
연결 (100ms 간격)
~15 μA 평균
광고 (1초 간격)
~3.5 μAh/이벤트
System ON 슬립
~2 μA
System OFF
~0.3 μA

Section 07

실전 코드 — ESP32 GATT 서버

Arduino (ESP32) — GATT 서버 온습도 Notify
#include <BLEDevice.h>
#include <BLE2902.h>

#define SVC_UUID  "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define TEMP_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"

BLECharacteristic *pTemp;
bool connected = false;

class CB : public BLEServerCallbacks {{
  void onConnect(BLEServer* s)    {{ connected=true;  BLEDevice::startAdvertising(); }}
  void onDisconnect(BLEServer* s) {{ connected=false; }}
}};

void setup() {{
  BLEDevice::init("ESP32-TempSensor");
  BLEServer* srv = BLEDevice::createServer();
  srv->setCallbacks(new CB());
  BLEService* svc = srv->createService(SVC_UUID);
  pTemp = svc->createCharacteristic(TEMP_UUID,
    BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY);
  pTemp->addDescriptor(new BLE2902());  // CCCD
  svc->start();
  BLEDevice::startAdvertising();
}}
void loop() {{
  if(connected) {{
    float t = readTemp();
    uint8_t buf[4]; memcpy(buf,&t,4);
    pTemp->setValue(buf,4); pTemp->notify();
  }}
  delay(2000);
}}

Section 08

무선 프로토콜 비교 및 선택 가이드

항목BLEWi-FiZigbeeLoRaWAN
범위10~400m30~100m10~100m2~20km
전력매우 낮음높음낮음매우 낮음
스마트폰 직접기본 지원가능허브 필요허브 필요
메시제한적가능네이티브미지원

// Quick Reference

표준Bluetooth 4.0 ~ 6.0 (2010~2024)
주파수2.4GHz · 40채널 · 2MHz 간격
데이터 속도125kbps (Coded) ~ 2Mbps (2M PHY)
데이터 모델GATT (Service → Characteristic)
System OFF 전류~0.3 μA (nRF52840)
주요 라이브러리NimBLE (ESP32) · ArduinoBLE
입문 난이도⭐⭐ 보통
추천 용도웨어러블 · 스마트폰 연동 · 근거리 센서
반응형

댓글