ここでは、Bluetoothのバージョン別・通信距離の“目安”を初心者向けに整理しています。
屋内ではなぜ短くなる? Long Range(LE Coded PHY)とは? Raspberry PiでRSSIを記録し自分の環境で実距離を測る手順を紹介しています。
Bluetoothの“距離”をどう考える?
- 表示される距離は多くが見通し(LoS)環境の理想値。
- 屋内では反射・遮蔽物・人体の影響で、1/5〜1/10 程度まで短くなることが一般的。
- Bluetooth 5.x は Long 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/EDR | 3 Mbps | 約 10 m | EDR (Enhanced Data Rate) 導入。 |
Bluetooth 2.1 + EDR (2007) | BR/EDR | 3 Mbps | 約 10 m | SSP(Secure Simple Pairing)でセキュリティ強化。 |
Bluetooth 3.0 + HS (2009) | BR/EDR + 802.11 | 24 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 m | LTE干渉対策、IoT向け強化。 |
Bluetooth 4.2 (2014) | BLE 4.2 | 1 Mbps | 最大 60 m | IPv6(6LoWPAN over BLE)対応。 |
Bluetooth 5.0 (2016) | BLE 5 | 2 Mbps / Long Range(125 / 500 kbps) | 最大 240 m(見通し・Long Range) | 4.2比:距離4倍/速度2倍。 |
Bluetooth 5.1 (2019) | BLE 5.1 | 2 Mbps / Long Range | 最大 240 m | 方向検知(AoA/AoD)。 |
Bluetooth 5.2 (2020) | BLE 5.2 | 2 Mbps / Long Range | 最大 240 m | LE Audio(Isochronous Channels)。 |
Bluetooth 5.3 (2021) | BLE 5.3 | 2 Mbps / Long Range | 最大 240 m | 電力効率・信頼性改善。 |
Bluetooth 5.4 (2023) | BLE 5.4 | 2 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) ざっくり距離推定(目安)
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))
print(estimate_distance(-70, -59, 2.5)) # 例: 3.5m くらい
重要:推定は外れることが多いです。実測の補助と割り切り、ログの平均化・向き/高さの固定・金属面を避けるなどを徹底しましょう。
距離を伸ばすコツ(実践メモ)
- アンテナ:外付けアンテナ付き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 5.x の Long Range は距離が伸びるが低速
- Raspberry Pi で実測して、機材・設置・PHYを最適化しよう