近距離無線

BLE(Bluetooth Low Energy)

低消費電力のBluetooth。IoT・ウェアラブルの定番。

概要

BLE(Bluetooth Low Energy)は、Bluetooth 4.0(2010年)で導入された低消費電力向けの無線通信規格です。単三電池1本で数ヶ月〜数年の動作を可能にする超省電力設計が特徴で、IoTセンサー・ウェアラブルデバイス・医療機器・スマートホームデバイスなど、電池駆動が求められる機器の定番通信手段となっています。

Bluetooth Classicとは同じ2.4GHz帯を使用しながら、通信プロトコルを根本から再設計した別規格です。消費電力は数µA〜数mAレベルで、同じBluetooth規格ながらClassicとは互換性がありません(デュアルモードチップは両方をサポート)。

スマートフォン・PC・タブレットのほぼ全機種がBLEに対応しており、専用アプリや専用ゲートウェイなしでも既存スマートフォンからセンサーデータを取得できる点が大きな強みです。

歴史・背景

BLEの前身は、2006年にNokiaが独自に開発した「Wibree」です。Nokiaは2007年にBluetooth SIGにWibreeの仕様を提供し、「Bluetooth Ultra Low Power(ULP)」として標準化作業が始まりました。2010年、Bluetooth 4.0仕様の一部として「Bluetooth Low Energy」が正式採用されました。

その後の主なバージョン進化:

  • Bluetooth 4.0(2010年): BLE初版。最大1Mbps PHY、最大通信距離約10〜30m
  • Bluetooth 4.1(2013年): マスター/スレーブの同時動作、接続パラメータ改善
  • Bluetooth 4.2(2014年): パケットサイズ拡大(最大251バイト)、IPv6 over BLE(6LoWPAN)対応、セキュリティ強化
  • Bluetooth 5.0(2016年): 2Mbps PHY、LE Coded PHY(長距離最大400m)、広告チャンネル拡張
  • Bluetooth 5.1(2019年): AoA/AoD方向探知、アドバタイズ間隔の細分化
  • Bluetooth 5.2(2020年): LE Audio(LC3コーデック)、EATT、LE Power Control
  • Bluetooth 5.3(2021年): 接続サブレーティング、チャンネル分類改善
  • Bluetooth 5.4(2023年): PAwR(Periodic Advertising with Responses)、双方向放送通信

技術仕様

物理層(PHY)

PHY種別データレート距離目安用途
LE 1M PHY1 Mbps〜30m標準(Bluetooth 4.x)
LE 2M PHY2 Mbps〜20m高スループット(Bluetooth 5.0+)
LE Coded PHY (S=2)500 kbps〜100m長距離(Bluetooth 5.0+)
LE Coded PHY (S=8)125 kbps〜400m超長距離(Bluetooth 5.0+)

周波数チャンネル

2.4GHz帯の40チャンネルを使用:

  • アドバタイジングチャンネル: 3チャンネル(ch37: 2402MHz、ch38: 2426MHz、ch39: 2480MHz)
    • Wi-Fiの主要チャンネル(1/6/11)と干渉しない周波数を選択
  • データチャンネル: 37チャンネル(2MHz間隔)
    • FHSS(Frequency Hopping Spread Spectrum)で干渉回避

パケット構造

BLE パケット(最大255バイト)
┌─────────────┬─────────────┬──────────────────┬──────────────┐
│ Preamble    │ Access Addr │ PDU              │ CRC          │
│ (1バイト)   │ (4バイト)   │ (2〜257バイト)   │ (3バイト)    │
└─────────────┴─────────────┴──────────────────┴──────────────┘

消費電力

BLEの消費電力の目安:

状態消費電流(目安)
Deep Sleep / オフ0.1 µA 以下
アドバタイズ(1秒間隔)平均 5〜30 µA
接続待機(スレーブ)5〜50 µA
接続・データ送受信時3〜15 mA
アドバタイズ送信ピーク10〜20 mA(数ms)

コイン電池(CR2032、225mAh)で計算すると、1秒間隔アドバタイズ+10秒に1回センサー送信なら、1〜2年以上の動作が可能です。

動作原理

プロトコルスタック

アプリケーション
├── Profiles(Health Thermometer / Heart Rate / Battery など)
├── GATT(Generic Attribute Profile):データの読み書き
├── GAP(Generic Access Profile):接続管理・アドバタイズ
├── SM(Security Manager):ペアリング・暗号化
├── ATT(Attribute Protocol):属性データの交換
├── L2CAP(Logical Link Control and Adaptation Protocol)
├── HCI(Host Controller Interface)
└── LL(Link Layer):物理層制御・チャンネルホッピング

接続モードとロール

BLEデバイスは以下のいずれかのロールで動作します:

  • Broadcaster(送信専用): アドバタイズパケットのみ送信。接続を受け付けない(ビーコンなど)
  • Observer(受信専用): アドバタイズパケットを受信するだけ
  • Peripheral: アドバタイズを送信し、接続を受け入れる(センサーなど、旧称スレーブ)
  • Central: スキャンしてPeripheralに接続を開始する(スマートフォンなど、旧称マスター)

接続シーケンス

Central(スマートフォン)        Peripheral(センサー)
        |                              |
        |        ADV_IND               |  ← アドバタイズ送信(定期的)
        |<-----------------------------|
        |                              |
        |       CONNECT_IND            |  ← 接続要求
        |----------------------------->|
        |                              |
        |   接続確立(Connection)      |
        |<===========================> |
        |                              |
        |   ATT Read / Write            |  ← GATTでデータ交換
        |<===========================> |

コネクションレス通信(アドバタイズ)

接続を確立せず、アドバタイズパケットだけでデータを配信するモードです。電力効率が非常に高く、ビーコンアドバタイズによる位置情報発信・センサーデータのブロードキャストに使用されます。

用途・ユースケース

ウェアラブル・ヘルスケア

  • スマートウォッチ・フィットネストラッカー: 心拍数・歩数・血中酸素濃度の計測・通知
  • 血糖値モニター(CGM): 植え込み型センサーからスマートフォンへのリアルタイム送信
  • 血圧計・体重計: 計測データをスマートフォンアプリへ自動転送
  • 補聴器: 低遅延音声ストリーミング(LE Audio / LC3)

スマートホーム・建物管理

  • スマートロック: スマートフォンでドア施錠・解錠
  • 照明制御: BLE Meshによる複数ライトの一括制御
  • 環境センサー: 温湿度・CO2・PM2.5モニタリング
  • 資産管理: タグをつけた物品のロケーショントラッキング

産業・物流

  • 工場内センサー: 振動・温度・圧力センサーのワイヤレス化
  • 物流トラッキング: パレット・コンテナへのタグ取り付け
  • 工具管理: 工具の使用状況・所在地管理

位置情報・近接検知

  • 屋内測位: BLEアンカーの電波強度(RSSI)または方向探知(AoA/AoD)で位置推定
  • スマートフォンへの近接通知: 小売店でのクーポン配信など

実装・開発のポイント

代表的な開発ボード・モジュール

製品メーカーSoC特徴
nRF52840 DKNordicnRF52840BLE5 + Thread + Zigbee + USB
nRF52 DKNordicnRF52832BLE5 標準的な開発ボード
ESP32EspressifESP32Wi-Fi + BT Classic + BLE
Arduino Nano 33 BLEArduinonRF52840ArduinoフォームファクターでBLE

nRF5 SDK を使ったPeripheral実装例(C言語)

#include "nrf_sdh.h"
#include "nrf_sdh_ble.h"
#include "ble_advdata.h"
#include "ble_advertising.h"

#define APP_ADV_INTERVAL    MSEC_TO_UNITS(100, UNIT_0_625_MS)  // 100ms間隔
#define APP_ADV_DURATION    18000  // 180秒間アドバタイズ

static ble_uuid_t m_adv_uuids[] = {
    {BLE_UUID_HEART_RATE_SERVICE, BLE_UUID_TYPE_BLE}
};

void advertising_init(void) {
    ble_advertising_init_t init;
    memset(&init, 0, sizeof(init));

    init.advdata.name_type = BLE_ADVDATA_FULL_NAME;
    init.advdata.include_appearance = true;
    init.advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE;

    init.srdata.uuids_complete.uuid_cnt = ARRAY_SIZE(m_adv_uuids);
    init.srdata.uuids_complete.p_uuids  = m_adv_uuids;

    init.config.ble_adv_fast_enabled  = true;
    init.config.ble_adv_fast_interval = APP_ADV_INTERVAL;
    init.config.ble_adv_fast_timeout  = APP_ADV_DURATION;

    ble_advertising_init(&m_advertising, &init);
}

ESP32-Arduino でBLE Notifyを使う例

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

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

BLEServer* pServer = nullptr;
BLECharacteristic* pCharacteristic = nullptr;
bool deviceConnected = false;

class MyServerCallbacks : public BLEServerCallbacks {
    void onConnect(BLEServer* pServer) override {
        deviceConnected = true;
    }
    void onDisconnect(BLEServer* pServer) override {
        deviceConnected = false;
        pServer->startAdvertising();  // 切断後、再アドバタイズ
    }
};

void setup() {
    BLEDevice::init("ESP32-BLE-Sensor");
    pServer = BLEDevice::createServer();
    pServer->setCallbacks(new MyServerCallbacks());

    BLEService* pService = pServer->createService(SERVICE_UUID);
    pCharacteristic = pService->createCharacteristic(
        CHARACTERISTIC_UUID,
        BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY
    );
    pCharacteristic->addDescriptor(new BLE2902());
    pService->start();

    BLEAdvertising* pAdvertising = BLEDevice::getAdvertising();
    pAdvertising->addServiceUUID(SERVICE_UUID);
    pAdvertising->setScanResponse(true);
    BLEDevice::startAdvertising();
}

void loop() {
    if (deviceConnected) {
        float temperature = readTemperatureSensor();
        String value = String(temperature, 2);
        pCharacteristic->setValue(value.c_str());
        pCharacteristic->notify();  // 接続中のCentralへ通知
        delay(1000);
    }
}

BLE Mesh(Bluetooth Mesh)

Bluetooth 5.x以降ではBLE Meshが標準化され、メッシュネットワーク構成が可能です。数十〜数百台のBLEデバイスが中継しあい、広い範囲をカバーします。スマートビルの照明・ビルオートメーションで採用が増えています。

OTAアップデート

組み込みBLE機器のファームウェア更新にはOTA(Over-The-Air)更新が重要です。NordicのDFU(Device Firmware Update)、ESP32のOTA更新機能などを利用できます。

他技術との比較

BLE vs Bluetooth Classic vs Wi-Fi

項目BLEBluetooth ClassicWi-Fi
消費電力非常に低い(µA〜mA)中〜高(mA〜百mA)高め(十〜数百mA)
スループット1〜2 Mbps最大3 Mbps数十Mbps〜数Gbps
通信距離10〜400m(PHYによる)10〜100m数十〜数百m
主用途センサー・IoT・ウェアラブル音声・ストリーミングデータ通信全般
インフラ不要はいはい通常AP必要

BLE vs Zigbee

項目BLEZigbee
スマートフォン対応ネイティブ対応ゲートウェイ必要
メッシュBLE Mesh(5.x以降)標準でメッシュ対応
消費電力低い非常に低い
エコシステム非常に大きいスマートホームに特化

ZigbeeはBLEよりも古くからメッシュに対応し、スマートホーム用途ではMatter規格の採用も進んでいます。スマートフォンとの直接接続が必要な場合はBLEが有利です。

関連用語

参考リンク