【保存版】Bluetoothの通信距離まとめ|バージョン別の目安とRaspberry Piでの実測手順

ラズパイ

ここでは、Bluetoothのバージョン別・通信距離の“目安”を初心者向けに整理しています。

屋内ではなぜ短くなる? Long Range(LE Coded PHY)とは? Raspberry PiでRSSIを記録し自分の環境で実距離を測る手順を紹介しています。

スポンサーリンク
スポンサーリンク

Bluetoothの“距離”をどう考える?

  • 表示される距離は多くが見通し(LoS)環境の理想値
  • 屋内では反射・遮蔽物・人体の影響で、1/5〜1/10 程度まで短くなることが一般的。
  • Bluetooth 5.xLong Range(LE Coded PHY: 125 / 500 kbps) で距離を伸ばせますが、速度は低下します。
  • 機器ごとに対応PHY・送信電力・アンテナ設計が違うため、実測が必須です。

Bluetooth バージョン別 通信可能距離(目安)

スマホやラズパイの対応バージョン/機能(2M PHY・Coded PHY など)は機種により異なります。

バージョン主な規格名通信速度通信距離(目安)備考
Bluetooth 1.0 / 1.1 (1999–2001)BR (Basic Rate)721 kbps約 10 m初期仕様。相互接続性に課題あり。
Bluetooth 2.0 + EDR (2004)BR/EDR3 Mbps約 10 mEDR (Enhanced Data Rate) 導入。
Bluetooth 2.1 + EDR (2007)BR/EDR3 Mbps約 10 mSSP(Secure Simple Pairing)でセキュリティ強化。
Bluetooth 3.0 + HS (2009)BR/EDR + 802.1124 Mbps(理論値)約 10 m(BTリンク)実データはWi-Fiで転送。距離はBTリンクに依存。
Bluetooth 4.0 (2010)BLE導入1 Mbps約 50 m(BLE)/ 10 m(BR/EDR)超低消費電力。IoT普及に貢献。
Bluetooth 4.1 (2013)BLE拡張1 Mbps約 50 mLTE干渉対策、IoT向け強化。
Bluetooth 4.2 (2014)BLE 4.21 Mbps最大 60 mIPv6(6LoWPAN over BLE)対応。
Bluetooth 5.0 (2016)BLE 52 Mbps / Long Range(125 / 500 kbps)最大 240 m(見通し・Long Range)4.2比:距離4倍/速度2倍。
Bluetooth 5.1 (2019)BLE 5.12 Mbps / Long Range最大 240 m方向検知(AoA/AoD)。
Bluetooth 5.2 (2020)BLE 5.22 Mbps / Long Range最大 240 mLE Audio(Isochronous Channels)。
Bluetooth 5.3 (2021)BLE 5.32 Mbps / Long Range最大 240 m電力効率・信頼性改善。
Bluetooth 5.4 (2023)BLE 5.42 Mbps / Long Range最大 240 m周期広告同期などIoT向け拡張。

注意
・上記は理論値/理想環境の目安。屋内は 1/5〜1/10 まで短くなることが一般的です。
・「最大240 m」は LE Coded PHY(125 kbps) を用いた場合の理想値です。
・距離・速度・消費電力はトレードオフです。

Raspberry Piで“自分の環境の距離”を実測する

1) 準備(Raspberry Pi OS)

sudo apt update
sudo apt install -y bluez python3-pip
pip3 install bleak

内蔵BTが弱いと感じる場合は、外部アンテナ付きUSB BTドングルの導入で安定することがあります。

2) スキャンしてRSSI(受信強度)を記録する

import asyncio
from bleak import BleakScanner

async def main():
    def on_detect(device, advertisement_data):
        # RSSI は advertisement_data.rssi に入る
        name = device.name or "Unknown"
        print(f"{name} {device.address} RSSI:{advertisement_data.rssi} dBm")

    scanner = BleakScanner(on_detect)
    await scanner.start()
    await asyncio.sleep(5.0)  # 走査時間を調整
    await scanner.stop()

if __name__ == "__main__":
    asyncio.run(main())

測定方法:発信側(スマホのビーコンアプリ/BLE機器)を一定の高さで固定。
ラズパイを 1m → 3m → 5m → … と離してRSSIの落ち方を記録します。

RSSIは揺れます。10〜20回の平均を取ると傾向が掴みやすいです。

結果

測定したら以下の用に検出します。

Y****** **:**:**:**:**:** RSSI:-54 dBm
Unknown **:**:**:**:**:** RSSI:-67 dBm

3) ざっくり距離推定(目安)

import asyncio
from bleak import BleakScanner

def estimate_distance(rssi_dbm: int, tx_power_dbm: int = -59, n: float = 2.0) -> float:
    """
    距離推定(非常に大雑把な目安)
    rssi_dbm: 受信RSSI(例: -65)
    tx_power_dbm: 1mでの送信基準(デバイス依存。-59は仮値としてよく使われる)
    n: 環境係数(屋外LoS ≈ 2.0、室内 2.0〜3.5 程度)
    return: 推定距離[m]
    """
    return 10 ** ((tx_power_dbm - rssi_dbm) / (10 * n))

async def main():
    # 検出時に呼ばれるコールバック
    def on_detect(device, advertisement_data):
        name = device.name or "Unknown"
        rssi = advertisement_data.rssi
        # RSSIが取得できないケースに備えてチェック
        if rssi is None:
            print(f"{name} {device.address} RSSI: N/A")
            return

        # 距離の大雑把な推定(仮の tx_power=-59, 室内 n=2.5 など)
        dist_m = estimate_distance(rssi_dbm=rssi, tx_power_dbm=-59, n=2.5)
        print(f"{name} {device.address} RSSI:{rssi} dBm  ->  ~{dist_m:.2f} m")

    # コールバックを登録したスキャナ
    scanner = BleakScanner(detection_callback=on_detect)
    # あるいは次の2行でもOK:
    # scanner = BleakScanner()
    # scanner.register_detection_callback(on_detect)

    try:
        await scanner.start()
        # スキャン時間(秒)
        await asyncio.sleep(5.0)
    finally:
        await scanner.stop()

if __name__ == "__main__":
    asyncio.run(main())

重要:推定は外れることが多いです。実測の補助と割り切り、ログの平均化・向き/高さの固定・金属面を避けるなどを徹底すると良いです。

結果

Unknown **:**:**:**:**:** RSSI:-83 dBm  ->  ~9.12 m
TEST **:**:**:**:**:** RSSI:-82 dBm  ->  ~8.32 m

距離を伸ばすコツ(実践メモ)

  • アンテナ:外付けアンテナ付きBTドングルで受信S/Nが改善する場合あり
  • 設置:床/金属面から離す、高さを合わせる、人体で遮らない
  • PHY:距離重視→ LE Coded PHY(125 kbps)、速度重視→ 2M PHY(対応機限定)
  • 広告間隔:短めにするとスキャンで捉えやすい(ただし消費電力は増加)

よくある質問(FAQ)

Q. スマホとラズパイで240 mは届きません
A. 多くのスマホはLE Coded PHYに非対応だったり、アンテナ/出力が控えめです。屋外LoS+対応機+外付けアンテナなど条件が揃って初めて長距離化が狙えます。

Q. 室内で10 mも届きません
A. 壁・家具・人体で減衰します。設置位置/高さ/向きの見直し、外付けBTドングルの検討が有効です。

Q. 数値が安定しません
A. RSSIは変動します。平均化し、端末の向きを固定。Wi-Fi干渉が強ければチャンネルも見直します。

製品対応アンテナ特徴リンク
エレコム Bluetooth USB アダプタBLE 5.3外付け安定志向Amazonで見る
MoYa Goa ドングルBLE 5.3外付け安価Amazonで見る
BLEビーコン 加速度トリガー搭載 発信機BLE 5.1外付けオリジナルティが高いAmazonで見る

まとめ

  • 表の数値は理想条件の目安。屋内は大きく短くなる
  • Bluetooth 5.x の Long Range は距離が伸びるが低速
  • Raspberry Pi で実測して、機材・設置・PHYを最適化しよう

タイトルとURLをコピーしました