ESPHomeでESP32C3にBluetooth Proxyを構築してBLE機器をネットワーク経由で使う方法
なぜBluetooth Proxyが必要なのか?
Home Assistantでスマートホームを構築していて、こんな悩みを抱えていませんか?
- 「Bluetoothデバイスが遠すぎて認識しない…」
- 「内蔵Bluetoothだと電波が届かない部屋がある」
- 「BLE温湿度センサーをもっと広い範囲でカバーしたい」
私も同じ課題に直面し、試行錯誤の末にたどり着いたのがESPHomeのBluetooth Proxyでした。
ESP32C3という安価なマイコン(送料込み約1500円)を使うことで、Bluetoothの電波を中継し、Home Assistantからネットワーク経由で遠くのBLE機器を制御できるようになります。
この記事では、実際に私が構築したリポジトリ(bluetooth-proxy-for-esp32c3)を使って、Bluetooth Proxyを構築する手順を解説します。
この記事で得られるもの
- ESP32C3を使ったBluetooth Proxyの構築方法(コピペ可能な設定付き)
- ESPHome Web Toolsを使った環境構築不要の書き込み手順
- 実際に遭遇したエラーと解決方法
- Home Assistantへの統合手順
前提条件・ターゲット読者
対象読者
- Home Assistantと連携したい方
- Bluetoothデバイスの電波範囲を広げたい方
必要なもの
項目 | 詳細 | 参考価格 |
---|---|---|
Seeed XIAO ESP32C3 | 小型で安価なESP32C3ボード | 約1500円 (送料込み) |
USB-Cケーブル | データ転送対応のもの | 手持ちでOK |
Home Assistant環境 | インストール済みであること (連携したい方のみ) | - |
Chromiumベースのブラウザ | Chrome、Edge、Opera | 無料 |
動作確認環境
- OS: Windows 11 (WSL2)
- ブラウザ: Brave
- Home Assistant: Core 2025.10.1
- ESPHome: 2025.9.3
Bluetooth Proxyとは?
仕組みの概要図
Bluetooth Proxyの役割
- BLE機器からの信号を受信(Bluetooth範囲内)
- WiFi経由でHome Assistantへデータを転送
- Home AssistantからBLE機器への制御コマンドを中継
通常、Home Assistantのサーバーからは届かない距離にあるBLE機器でも、ESP32C3をその近くに配置することで、ネットワーク経由で通信できるようになります。
構築手順:実際にやってみよう
ステップ1: リポジトリをクローン
まず、私が公開している設定ファイル一式をダウンロードします。
git clone https://github.com/saitogo555/bluetooth-proxy-for-esp32c3.git
cd bluetooth-proxy-for-esp32c3
リポジトリには以下のファイルが含まれています:
-
esphome-config.yaml
: ESPHomeのメイン設定ファイル -
secrets.sample.yaml
: WiFi情報などの機密情報のテンプレート -
.gitignore
: Gitで管理しないファイルの指定 -
README.md
: セットアップ手順
ステップ2: ESPHomeのインストール
# Pythonのバージョン確認
python --version # Python 3.9以降であること
# ESPHomeをインストール
pip install esphome
ステップ3: 設定ファイルの準備
3-1. secrets.yamlの作成
secrets.sample.yaml
をコピーしてsecrets.yaml
を作成します。
cp secrets.sample.yaml secrets.yaml
3-2. secrets.yamlの編集
エディタでsecrets.yaml
を開き、以下の情報を記入します。
# WiFi Configuration
wifi_ssid: "あなたのWiFi SSID"
wifi_password: "あなたのWiFiパスワード"
# API Encryption Key
api_key: "ここに生成したキーを貼り付け"
# OTA Password
ota_password: "任意の更新用パスワード"
# Fallback AP Password
ap_password: "任意のフォールバックAPパスワード"
3-3. APIキーの生成
Home AssistantとESP32C3間の通信を暗号化するためのキーを生成します。
openssl rand -base64 32
出力された32バイトのキーを、secrets.yaml
のapi_key
欄にコピペします。
ステップ4: ファームウェアのコンパイル
設定ファイルをもとに、ESP32C3に書き込むファームウェアを生成します。
esphome compile esphome-config.yaml
コンパイルが成功すると、以下の場所にファームウェアが生成されます。
.esphome/build/xiao-esp32c3-bluetooth-proxy/.pioenvs/xiao-esp32c3-bluetooth-proxy/firmware.factory.bin
ステップ5: ESP32C3への書き込み
ESP32C3へ書き込む方法としてブラウザとCLIの2種類がありますが、ESPHome Web Toolsを使えばブラウザだけで完結します。
5-1. ESP32C3をPCに接続
USB-CケーブルでESP32C3とPCを接続します。
5-2. ESPHome Web Toolsにアクセス
ブラウザで以下のURLにアクセス。
5-3. デバイスを接続
- 「CONNECT」ボタンをクリック
- シリアルポート選択ダイアログが表示される
- ESP32C3のポートを選択(通常「USB JTAG/serial debug unit」や「USB Serial」と表示)
5-4. ファームウェアの書き込み
- 「INSTALL」ボタンをクリック
- 「ファイルを選択」をクリック
- 先ほど生成した
firmware.factory.bin
を選択 - 「INSTALL」をクリックして書き込み開始
書き込み中は進捗バーが表示されます。(通常30秒程度)
5-5. 動作確認
書き込み完了後、「LOGS」ボタンをクリックするとリアルタイムログが表示されます。
ステップ6: Home Assistantへの統合
6-1. ESPHome統合の追加
- Home Assistantの「設定」 → 「デバイスとサービス」を開く
- 右下の「統合を追加」をクリック
- 検索ボックスに「ESPHome」と入力して選択
6-2. デバイスの追加
通常、ESP32C3が同じネットワーク内にあれば自動検出されます。
- 自動検出された場合: 「XIAO ESP32C3 Bluetooth Proxy」という名前で表示されるのでクリック
-
手動で追加する場合:
-
ホスト:
192.168.1.123
(LOGSで確認したIPアドレス) -
ポート:
6053
(デフォルト)
-
ホスト:
6-3. 動作確認
統合が完了すると、「デバイス」タブに「XIAO ESP32C3 Bluetooth Proxy」が表示されます。
デバイスページを開くと、以下の情報が確認できます:
- WiFi Signal Strength: WiFi電波強度
- Uptime: 稼働時間
- Bluetooth connections: 接続中のBLE機器数
設定ファイルの詳細解説
esphome-config.yamlの構造
リポジトリのesphome-config.yaml
は以下のような構造になっています。
esphome:
name: xiao-esp32c3-bluetooth-proxy
friendly_name: XIAO ESP32C3 Bluetooth Proxy
# ESP32C3固有の設定
esp32:
board: seeed_xiao_esp32c3 # ボード指定
variant: esp32c3 # チップバリアント
framework:
type: arduino # Arduinoフレームワーク使用
# ログレベル設定
logger:
level: DEBUG # 開発時はDEBUG、本番はINFO推奨
# Home Assistant API(暗号化通信)
api:
encryption:
key: !secret api_key
# OTA(Over-The-Air)更新
ota:
- platform: esphome
password: !secret ota_password
# WiFi設定
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# フォールバックAP(WiFi接続失敗時)
ap:
ssid: "XIAO-ESP32C3-Fallback"
password: !secret ap_password
# Webサーバー(デバッグ用)
web_server:
port: 80
# Bluetooth Proxy の核心部分
esp32_ble_tracker:
scan_parameters:
interval: 1100ms # スキャン間隔
window: 1100ms # スキャン窓
active: true # アクティブスキャン有効
bluetooth_proxy:
active: true
重要なパラメータの解説
パラメータ | 説明 | 推奨値 |
---|---|---|
logger.level |
ログの詳細度 | DEBUG(開発時)/ INFO(本番) |
esp32_ble_tracker.interval |
BLEスキャン間隔 | 1100ms(デフォルト) |
esp32_ble_tracker.window |
スキャン窓の長さ | 1100ms(連続スキャン) |
esp32_ble_tracker.active |
アクティブスキャンON/OFF | true(デバイス名取得のため) |
「スキャン間隔」と「スキャン窓」とは
スキャン間隔(interval):
スキャン動作を開始する周期です。例えばinterval: 1100ms
の場合、1.1秒ごとにスキャンを開始します。
スキャン窓(window):
実際にBLE電波を受信し続ける時間です。例えばwindow: 1100ms
の場合、1.1秒間電波を聞き続けます。
時間軸 →
|-------- interval: 1100ms --------|-------- interval: 1100ms --------|
|========= window: 1100ms =========|========= window: 1100ms =========|
↑ 電波を受信している期間 ↑ 電波を受信している期間
設定のポイント:
-
interval = window
の場合(例: 両方1100ms): 連続スキャン- メリット: BLE機器を見逃しにくい、検出が速い
- デメリット: 消費電力が高い
-
interval > window
の場合(例: interval: 1100ms, window: 500ms): 間欠スキャン- メリット: 消費電力を抑えられる
- デメリット: BLE機器の信号を見逃す可能性がある
本リポジトリの設定では、確実にBLE機器を検出することを優先して、連続スキャン(interval = window)を採用しています。ESP32C3は常時給電されるため、消費電力はあまり気にする必要がありません。
応用編:さらに使いこなすために
Static IPの設定
IPアドレスが変わるたびに再設定するのは面倒なので、固定IPを割り当てましょう。
esphome-config.yaml
のwifi
セクションで、コメントアウトされているmanual_ip
を有効化します。
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Static IP設定(コメントを外す)
manual_ip:
static_ip: 192.168.1.100 # 任意の固定IP
gateway: 192.168.1.1 # ルーターのIP
subnet: 255.255.255.0
dns1: 1.1.1.1 # CloudflareのDNS
dns2: 8.8.8.8 # GoogleのDNS
設定変更後は再コンパイルして書き込みます。
esphome compile esphome-config.yaml
# Web Toolsで再度書き込み
OTA(Over-The-Air)更新
初回はUSB経由で書き込みましたが、次回からはWiFi経由で更新できます。
esphome upload esphome-config.yaml --device 192.168.1.100
これにより、ESP32C3を設置したまま遠隔でファームウェアを更新できます。
複数のBluetooth Proxyを配置
大きな家やオフィスでは、複数のESP32C3を配置することで、広範囲をカバーできます。
配置のコツ:
- BLE機器の設置場所を中心に半径5〜10mの範囲に1台配置
- WiFiの電波状況も考慮(ESP32C3自身がWiFiに接続できる場所)
- 各ESP32C3に異なる
name
を設定(例:xiao-esp32c3-living
,xiao-esp32c3-bedroom
)
まとめ
この記事では、ESP32C3を使ったBluetooth Proxyの構築方法を解説しました。
記事のポイント振り返り
✅ 1500円のESP32C3でBluetoothの電波範囲を劇的に拡張
✅ ESPHome Web Toolsでブラウザだけで書き込み完了
✅ コピペ可能な設定ファイルで迷わず構築
✅ OTA更新で設置後もメンテナンスが簡単
次のステップ:こんなこともできます
- BLE温湿度センサーをリビング・寝室・玄関に配置して一元管理
- BLEスマートロックをネットワーク経由で制御
- BLE人感センサーで自動照明制御
- 複数のBluetooth Proxyで家全体をカバー
参考リンク
- 📦 GitHub: bluetooth-proxy-for-esp32c3
- 📚 ESPHome公式ドキュメント
- 🛠️ ESPHome Web Tools
- 📖 Bluetooth Proxy公式ガイド
- 🔧 Seeed XIAO ESP32C3公式Wiki
最後に
もし、この記事が役に立ったらいいねをお願いします!
質問やつまずいた点があれば、コメント欄でお気軽にどうぞ。
また、リポジトリへの⭐️スターや、実際に構築してみた感想もお待ちしています。
一緒にスマートホームを楽しみましょう!🏠✨
Discussion