Seeed Studio XIAO ESP32-C3でESPresenseをHome Assistantと連携してデプロイする
この文書では、オープンソースのBluetooth存在検知システムESPresenseをSeeed Studio XIAO ESP32-C3と統合する方法について説明します。XIAO ESP32-C3をベースとした存在検知ノードは、Home AssistantのMQTT Roomコンポーネントと連携して屋内位置測定を可能にします。
プロジェクト概要
ESPresenseは、MQTTを使用してHome Assistantと連携するように設計されたオープンソースのBluetooth Low Energy(BLE)存在検知システムです。
この移行では:
1. XIAO ESP32-C3ビルド環境の追加
.ini設定が更新され、Seeed Studio XIAO ESP32-C3専用のビルド環境が追加されました。
[env:seeed_xiao_esp32c3]
extends = esp32c3-cdc ; XIAO ESP32-C3 uses native USB CDC
board = seeed_xiao_esp32c3
board_build.filesystem = spiffs
lib_deps =
${esp32c3.lib_deps}
${sensors.lib_deps}
build_flags =
-D CORE_DEBUG_LEVEL=1
-D FIRMWARE='"xiao-esp32c3"' ; Firmware identifier
-D SENSORS
${esp32c3-cdc.build_flags}
2. レポート応答性の向上
データレポートをより応答性の高いものにするため、defaults.hの複数のパラメータが以下のように調整されました:
A. 移動感度の向上
早期レポートをトリガーする距離閾値が0.5 mから0.1 mに削減されました。小さな移動でも「早期レポート」ロジックが有効になります。
#define DEFAULT_SKIP_DISTANCE 0.1 // changed from 0.5
B. 強制レポート間隔の短縮
最大レポート間隔が5秒から1〜2秒に削減され、移動が最小限の場合でもよりタイムリーなデータ更新が保証されます。
#define DEFAULT_SKIP_MS 1000 // changed from 5000, now is 1 second
C. Wi-FiとBLEの共存改善(2.4 GHz)
2.4 GHz Wi-Fi(非C5チップ)を使用する場合、Bluetoothスキャンは共有アンテナを独占しないように調整されます。BLEスキャンウィンドウはスキャン間隔よりもわずかに小さく設定され、Wi-FiがMQTT接続とデータ送信に十分なエアタイムを確保できます。
#define BLE_SCAN_INTERVAL 0x80 // 128
#define BLE_SCAN_WINDOW 0x60 // reduced from 0x80 (~75% duty cycle)
この変更により、内部競合を削減し、無線リソースの先取りによる遅延を最小限に抑えることができます。
ハードウェア要件
- Seeed Studio XIAO ESP32-C3
- USB-Cケーブル(データ転送対応)
- PC(Windows/macOS/Linux)
- 安定したWi-Fiネットワーク(2.4 GHz)
- Home Assistantインスタンス
ソフトウェア・ツール
| ツール | 目的 |
|---|---|
| PlatformIO | ビルドシステム・フラッシュツール |
| ESP-IDFツールチェーン(ESPresense経由) | ファームウェアビルド |
| Webブラウザ | デバイス設定 |
| Home Assistant | 存在検知統合 |
| Mosquitto Broker(HAアドオン) | MQTTバックエンド |
| MQTT Explorer(オプション) | MQTTデバッグ |
| nRF Connect(Androidのみ) | BLEアドバタイジング |
1. Home Assistant – MQTTブローカーセットアップ
Mosquitto Brokerアドオンのインストール
-
Home Assistantを開く
Home Assistantをまだセットアップしていない場合は、設定についてガイドを参照してください。
-
Settings → Add-ons → Add-on Storeをクリック
-
Mosquitto brokerを検索してインストール。インストール後:
-
Startをクリック
-
有効にする:
- ✔ Start on boot
- ✔ Watchdog
-
MQTT認証情報の作成
-
Configuration → Logins → Addに移動
-
専用のMQTTユーザーを作成(推奨)
-
記録:
- ユーザー名
- パスワード
- Home AssistantのIPアドレス


2. ESPresenseのビルド・フラッシュ
-
ESPresenseコードファイルをダウンロードし、PlatformIOを使用してプロジェクトを開きます。

Platform IOをまだセットアップしていない場合は、ダウンロードについてガイドを参照してください。
-
依存関係のインストールと環境セットアップが完了するまで待ちます。seeed_xiao_esp32c3環境を選択し、正しいポートを選択してビルド・アップロードします。

-
ファームウェアのフラッシュが完了するまで待ち、Resetボタンを押してXIAO ESP32-C3を再起動します。
3. Wi-Fi・MQTT設定(キャプティブポータル)
-
XIAO ESP32-C3に電源を供給
-
PCまたはスマートフォンでWi-Fi設定を開き、ESPresense AP(例:
ESPresense-XXXX)に接続
-
ブラウザを開く:
http://192.168.4.1
-
Webページで以下のフィールドを入力:
フィールド 説明 Room Name 論理的な部屋識別子(例: room1)Wi-Fi SSID 2.4 GHzネットワーク Wi-Fi Password ネットワークパスワード MQTT Broker IP Home AssistantのIP MQTT Port 1883(デフォルト)MQTT Username Mosquittoセットアップから MQTT Password Mosquittoセットアップから -
Saveをクリック
-
保存後、XIAO ESP32-C3を再起動します。デバイスは自動的にWiFiとMQTTに接続します。
推奨事項: 意味のある存在比較のために、異なる部屋に少なくとも2つのXIAO ESP32-C3ノードをデプロイしてください。
-
次に、Home Assistantを開き、Settings → Devices & Servicesに移動
-
ESPresenseノードが自動的に表示され、デバイス名の形式は:
ESPresense + <Room Name>

4. BLEデバイスブロードキャスト
次に、個人デバイスをBLE経由でESPresenseが検出できるようにする必要があります。場合によっては、デバイスがBLE経由でブロードキャストできるようにするアプリをインストールする必要があります。
iOSデバイス
Appleデバイスは様々なBTLE連続性メッセージを発信し、多くの場合apple:100?:*-*のフィンガープリントで識別されます。
複数のiPhoneがある家庭では、近接情報が衝突し、重複したフィンガープリントが発生する可能性があります。この問題を解決するには、https://espresense.com/devices/apple を参照してください。
Androidデバイス(手動アドバタイジング)
Androidデバイスは通常口が重く、BLEアドバタイズメントを発信させるためにアプリが必要です。そのため、デバイスを見つけるためのアプリが必要になります。
-
nRF Connectをインストールしてアプリを開く
-
ADVERTISER → "+" → ADD RECORDに移動し、Manufacturer Dataを選択
-
入力:
フィールド 値 Company ID 0x004C(これはApple Inc.の固定IDで、すべてのiBeaconはこのメーカーIDを使用する必要があります。)Data 0215E2C56DB5DFFB48D2B060D0F5A71096E000010001C5データ形式の説明
セクション 説明 0215iBeaconプレフィックス E2C56D...96E0UUID(16バイト) 0001Major 0001Minor C5測定電力 -
保存してアドバタイジングをONに切り替え


その他のサポートされているデバイス:
https://espresense.com/devices
MQTTデータ検証
MQTT Explorerを使用して、ESPresenseが公開するすべてのトピックを表示できます。
- 接続先:
- Host:HAのIP
- Port:1883
- Username / Password


- UUIDの最初の8文字を使用して検索

5. MQTT Roomセンサーによる部屋の存在検知
configuration.yaml を編集
-
Settings → Add-ons → Terminal に移動し、ターミナルを開く
-
実行:
ls /configconfiguration.yamlが存在することを確認します。 -
ファイルを編集:
nano /config/configuration.yaml
-
追加:
sensor:
- platform: mqtt_room
device_id: "iBeacon:e2c56db5-dffb-48d2-b060-d0f5a71096e0-1-1"
name: "My iBeacon"
state_topic: "espresense/devices/iBeacon:e2c56db5-dffb-48d2-b060-d0f5a71096e0-1-1"
timeout: 60
away_timeout: 120
⚠ YAML のインデントは重要です
- スペースのみを使用
- TAB は使用しない
-
保存:
Ctrl + O→ EnterCtrl + X
検証と再起動
- Settings → System → Developer Tools に移動
- YAML タブを開き、Check Configuration をクリック、有効な場合は Restart をクリック

6. ダッシュボードにエンティティを追加
再起動後:
-
Developer Tools → States に移動
-
検索:
sensor.my_ibeacon -
エンティティが部屋名で更新される場合、セットアップは完了です

センサーの初期化には時間がかかる場合があります。ステータスが not_home と表示される場合は、しばらくお待ちください。長時間経過しても状態の更新がない場合は、MQTT Explorer を使用して ESPresense がオフラインになっていないか確認するか、個人デバイスが正常にスキャンできることを確認することをお勧めします。
-
エンティティを Dashboard に追加

技術サポートと製品ディスカッション
弊社製品をお選びいただき、ありがとうございます!弊社製品での体験が可能な限りスムーズになるよう、さまざまなサポートを提供いたします。さまざまな好みやニーズに対応するため、複数のコミュニケーションチャネルを提供しています。