
用 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卧室里挂着三只小米 BLE 温湿度计官方 App 要等手机靠近才刷新。用 ESPHome 蓝牙网关解决一块 ESP32 常驻监听广播、本地解码数值经 MQTT 推给 Home Assistant全程不经过手机。最小可用网关一块 ESP32 和一份短配置硬件怎么选主控双核 ESP32经典 WROOM-32 即可蓝牙协议栈在双核上跑得更从容供电5V/1A 以上稳定电源。BLE 收发是瞬时电流尖峰劣质 USB 头会导致周期性复位天线位置网关放房间中部离路由器越近越好——它同时还要跑 Wi-Fi最短 YAML 配置下面是能跑通的最小网关。改三处占位符SSID、密码、传感器 MAC其余基本可以照抄esphome: name: ble-gateway esp32: board: esp32dev framework: type: esp-idf wifi: ssid: !secret wifi_ssid password: !secret wifi_password mqtt: broker: 192.168.1.100 discovery: true bluetooth_proxy: active: true sensor: - platform: xiaomi_lywsd02mmc mac_address: AA:BB:CC:DD:EE:FF # 换成你的传感器 temperature: name: 卧室温度 humidity: name: 卧室湿度 battery_level: name: 传感器电量xiaomi_lywsd02mmc这类传感器平台自己负责解析广播里的厂商数据网关不需要对设备建立 GATT 连接——监听、解码、发 MQTT 就够了。一条命令烧录esphome upload ble-gateway.yaml # USB首次必须 esphome upload --host ble-gateway.local ble-gateway.yaml # 联网后走 OTA烧完看两件事MQTT 日志里出现homeassistant/sensor/...的 discovery 消息HA 的 MQTT 集成自动列出三个传感器。第一条路径是数值流第二条是原始广播流HA 想主动连设备比如配对的门锁时走这条。网关能收数之后真正费时间的部分才开始。下面按症状排了一份踩坑清单。把网关用稳三个高频故障传感器连上三秒就掉线Wi-Fi 也跟着抖根因是 2.4GHz 共用无线电BLE 扫描占用时间片越长Wi-Fi 被饿得越狠。扫描窗口超过 600ms 时ESPHome 在配置校验阶段就会打警告阈值定义在 esphome/components/esp32_ble_tracker/init.py日志里搜starves wifi能直接命中。另外 ESP-IDF 5.5.5 之前存在扫描实际占用远超配置窗口的已知缺陷旧版本上配了 30ms 窗口却像全时扫描就是它。调优对比同一台网关、同一房间实测口径扫描参数BLE 重连耗时Wi-Fi 稳定性广播处理旧代理配置interval/window 1100ms~1s频繁断流无默认320ms 间隔 自动抬升窗口~2s偶发抖动无推荐320ms 间隔 300ms 窗口~2s稳定无推荐配置的写法esp32_ble_tracker: scan_parameters: interval: 320ms window: 300ms参考日志关键字BLE scan扫描状态、starves wifi配置期警告。连接槽位用尽新设备连不上槽位上限由esp32_ble.IDF_MAX_CONNECTIONS决定固定 9 个校验范围见 esphome/components/bluetooth_proxy/init.py。关键是槽位全局共享esp32_ble_tracker的max_connections、代理的connection_slots、每一个ble_client实例都从这里扣。代理默认占 3 个剩下 6 个分给其他客户端超了配置校验直接拒绝没有弹性借用。设备多了就精简ble_client列表别指望加数字解决。MQTT 消息偶尔丢网关转发广播前会检查 API 连接状态没连上就丢——丢弃点在 esphome/components/bluetooth_proxy/bluetooth_proxy.cpp。MQTT 重连的几秒窗口内广播就是消失的HA 侧表现为传感器偶发不更新。日志里找Error sending message和timeout如果集中在重连瞬间属正常现象如果持续出现先查网关到 broker 的 RTT再考虑缩小扫描参数给网络线程让时间。从能用到好用如果只有 30 分钟只做三件小事keepalive 怎么调默认 15sesphome/components/mqtt/init.py。局域网 Wi-Fi 质量差时调大到 30s减少误判重连mqtt: keepalive: 30s日志分级logger.logs给esp32_ble_tracker和bluetooth_proxy单独开 DEBUG排查完记得降回来——DEBUG 级别的串口输出会拖慢主循环。过滤无关设备老教程里常出现的whitelist、priority、advertisement_batch_size这些键在当前代码里不存在别照着配。真正的过滤靠两层传感器平台只解析你写进mac_address的设备扫描层面用mac_address过滤广播。其余广播解析完自然丢弃不构成负担。如果你有一整个周末OTA 自动化HA 里建一个定时自动化凌晨调用esphome.update_ble_gatewayservice每周固定时间拉新固件不用碰 USB。广播批处理已内置无需配置。每批 16 条广播约 1280 字节贴近 Wi-Fi MTU 上限利用率约 97%esphome/components/bluetooth_proxy/init.py。单条广播超 62 字节的部分在设备端截断这是 BLE 规范上限不是可调参数。PSRAM纯网关对内存不敏感PSRAM 的价值在大显示、摄像头场景给 BLE 栈腾资源更实际的手段是调小任务栈CONFIG_BT_BTU_TASK_STACK_SIZE默认 8192。外接 OLED加一块 SSD1306 I2C 屏画个扫描状态和固件版本的小面板排障时不用再接串口。上线前 Checklist✅ API 加密密钥、OTA 密码、Wi-Fi 密码全部走secrets.yamlYAML 里不留明文mqtt.discovery: true让 HA 自动建实体省掉手动建卡片串口日志留INFO以上关键组件 DEBUG 只在排障时开网关电源换稳压 5V拔掉劣质 USB 头扫描窗口 ≤ 600ms有 Wi-Fi 共用无线电时记录当前固件版本OTA 自动化建好后再关电脑备份 YAML 到 git——它比固件更值得版本管理有问题直接去 ESPHome 仓库提 issuegit clone https://gitcode.com/GitHub_Trending/es/esphome可本地对照源码或进 ESPHome 的 Discord 社区问。【免费下载链接】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),仅供参考