在 Seeed Studio XIAO ESP32-C3 上部署 ESPresense 与 Home Assistant
本文档描述了如何将开源蓝牙存在检测系统 ESPresense 与 Seeed Studio XIAO ESP32-C3 集成。基于 XIAO ESP32-C3 的存在检测节点可以与 Home Assistant 的 MQTT Room 组件配合工作,实现室内定位。
项目概述
ESPresense 是一个开源的蓝牙低功耗(BLE)存在检测系统,设计用于通过 MQTT 与 Home Assistant 配合工作。
在此迁移中:
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 芯片)时,蓝牙扫描会调整以避免独占共享天线。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 环境,选择正确的端口,构建并上传。

-
等待固件烧录完成,按下复位按钮重启 XIAO ESP32-C3。
3. Wi-Fi 和 MQTT 配置(强制门户)
-
给 XIAO ESP32-C3 供电
-
在您的 PC 或手机上,打开 Wi-Fi 设置,连接到 ESPresense AP(例如
ESPresense-XXXX)
-
打开浏览器:
http://192.168.4.1
-
在网页上填写以下字段:
字段 描述 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。
建议: 在不同房间部署至少两个 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 /config确认
configuration.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

技术支持与产品讨论
感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。