ESPHome 蓝牙网关实战:BLE 传感器到 MQTT 的完整配置与排障 📅 发布时间:2026/9/14 6:17:50 👁 浏览次数: ESPHome 蓝牙网关实战BLE 传感器到 MQTT 的完整配置与排障【免费下载链接】esphomeESPHome is a system to control your ESP32, ESP8266, BK72xx, RP2040 by simple yet powerful configuration files and control them remotely through Home Automation systems.项目地址: https://gitcode.com/GitHub_Trending/es/esphome清晨六点厨房温湿度在 Home Assistant 里卡在昨天晚上的数值。Aqara 门窗传感器显示未知因为家里唯一连了蓝牙的笔记本正在关机充电。ESPHome 蓝牙网关就是为这个场景准备的一块 ESP32 常驻家里把 BLE低功耗蓝牙设备的数据持续转进 MQTT不再依赖手机中转。 交付物清单接入小米等广播型 BLE 温湿度传感器数据经 ESPHome 网关进入 MQTT用ble_client主动连接 BLE 开关并控制状态可订阅可回写调整连接槽位与扫描参数让 BLE 与 WiFi 共存不互相挤占按故障速查表在 3 分钟内定位设备离线类问题✅ 前置条件项目要求备注主控芯片ESP32带 BLE如 esp32dev、ESP32-C3ESP8266 无 BLE不可用编译环境Python pip install esphome或直接用 Home Assistant 的 ESPHome 集成消息通道局域网 MQTT broker网关固件本身不直连 broker发布由 HA 完成WiFi2.4 GHz信号 -65 dBm 以上BLE 与 WiFi 共用射频信号弱会互相影响目标设备已确认 MAC 地址的 BLE 设备加密设备小米系还需 bindkey解密密钥pip install esphome esphome version 原理速览网关固件只做两件事扫描、连接。桥接层源码 bluetooth_proxy把广播包按批打包经 ESPHome API 推给 Home Assistant由 HA 把数据发布到 MQTT控制指令原路返回。 分场景实施场景一接入第一个广播型传感器这类设备周期性广播温度、湿度、电量网关不需要连接它监听即可。esp32: board: esp32dev bluetooth_proxy: active: true connection_slots: 3 # 给后续主动连接预留 esp32_ble_tracker: scan_parameters: interval: 320ms window: 320ms sensor: - platform: xiaomi_lywsd02mmc mac_address: A4:C1:38:XX:XX:XX bindkey: 0123456789abcdef # 小米设备解密密钥从米家 App 获取 temperature: name: 厨房温度 humidity: name: 厨房湿度 battery_level: name: 传感器电量验证刷写固件 → Home Assistant 的 ESPHome 集成里确认网关在线 → 传感器实体出现数值 → 拿设备贴近网关再远移 5 米观察更新间隔变化。数据没变化先看 bindkey 对不对。场景二主动连接并控制一个 BLE 设备广播型设备只读开关、锁这类设备要写。用ble_client组件 ble_client建立 GATT 连接每个客户端占一个连接槽位auto_connect默认开启断线自动重连。ble_client: - mac_address: 00:1A:7D:DA:71:13 id: ble_switch on_disconnect: then: - lambda: ESP_LOGW(\ble\, \disconnected, will retry\); switch: - platform: ble_client name: 车库门磁 ble_client_id: ble_switch service_uuid: 0000ffe0-0000-1000-8000-00805f9b34fb characteristic_uuid: 0000ffe1-0000-1000-8000-00805f9b34fb value_on: [0x01] value_off: [0x00] on_notify: - switch.template: # 设备主动上报时同步状态验证在 HA 切换开关 → 日志出现 connect、write 事件 → 再让设备端主动上报看on_notify是否触发。场景三多设备并发与参数调优ESP32 同时跑扫描、WiFi、多个 BLE 连接所有客户端共享 9 个连接槽位esp32_ble_tracker 的射频仲裁器负责分配。槽位不够时日志会提示设备在排队。bluetooth_proxy: connection_slots: 3 # 代理占用 3 槽 3 个 ble_client 各 1 槽 6 ≤ 9 ble_client: - mac_address: AA:BB:CC:DD:EE:01 id: client_a - mac_address: AA:BB:CC:DD:EE:02 id: client_b - mac_address: AA:BB:CC:DD:EE:03 id: client_c调参顺序先保 WiFi再谈 BLE。扫描窗口超过 600 ms 会长时间占用射频导致 WiFi 掉包默认 30 ms 窗口在较新 ESP-IDF 下利用率低又容易漏广播。interval设为 320 ms 并让两个参数相等交给软件共存仲裁器按 WiFi 空闲自动分配时隙。验证多设备跑满 24 小时日志无wifi: Disconnecting、无槽位告警。⚙️ 参数速查表参数作用推荐值影响范围active代理是否转发广播true全部 BLE 设备connection_slots代理预留连接槽数1~93远端主动连接能力cache_services服务信息落盘缓存加快重连ESP32 专属true重连时延scan_parameters.interval扫描周期320ms射频占用、漏包率scan_parameters.window单次扫描时长≤600ms与 interval 相等WiFi 共存稳定性ble_client.auto_connect断线自动重连true单个客户端esp32_ble_tracker扫描 active主动/被动扫描按设备类型功耗、可发现性 故障速查现象原因动作传感器数据不更新bindkey 错、MAC 写错、信号弱核对 bindkey 与 MAC把设备贴近网关测试WiFi 间歇掉线扫描窗口过长挤占射频window压到 600 ms 内interval/window 都设 320 ms设备偶发连不上9 个槽位被占满连接排队降低connection_slots或减少ble_client数量网关在 HA 离线WiFi 断连或 API 超时看日志中api/wifi段重启网关检查电源是否 5V/2A 进阶清单window压到 600 ms 内保住 WiFi 不掉线保持cache_services: trueBLE 重连从秒级降到亚秒级MQTT 侧启用 TLS8883 端口 certificate_authorityOTA 加密码并开safe_mode防误刷、防劫持日志分级常态 INFO排障时仅给bluetooth_proxy、esp32_ble_tracker开 DEBUG大户型按楼层分区部署多台网关BLE 广播半径有限就近扫描最稳收尾本文覆盖 ESP32 网关上 BLE 转 MQTT 的完整链路广播采集、主动读写、槽位调度、共存调参与故障排查。网关只负责 BLE 到 ESPHome API 这一段MQTT 发布由 Home Assistant 完成。下一步查仓库内bluetooth_proxy组件文档遇 schema 校验报错把完整编译输出贴到仓库 issue。【免费下载链接】esphomeESPHome is a system to control your ESP32, ESP8266, BK72xx, RP2040 by simple yet powerful configuration files and control them remotely through Home Automation systems.项目地址: https://gitcode.com/GitHub_Trending/es/esphome创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考