ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ESPHome 蓝牙网关完整指南:用一块 ESP32 打通 BLE 与 Home Assistant

ESPHome 蓝牙网关完整指南:用一块 ESP32 打通 BLE 与 Home Assistant ESPHome 蓝牙网关完整指南用一块 ESP32 打通 BLE 与 Home Assistant【免费下载链接】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设备信号穿墙能力弱没法直接连 Wi-Fi更进不了 Home Assistant。ESPHome 蓝牙网关要解决的正是这件事——把一块 ESP32 变成翻译官它一边用 BLE 扫描并连接这些设备另一边通过 MQTT 把数据投递给 Home Assistant反向的控制指令也能原路传回。读完本文你会得到一份可直接编译的网关配置模板、两种典型设备被动监听传感器、主动连接开关的接法以及刷固件、查问题的完整操作步骤。1. 先搞懂数据在链路里怎么走整个桥接过程可以拆成一条单向数据流加一条反向指令流实现这条链路靠两个组件bluetooth_proxy负责扫描、连接管理、把收到的广播转发出去。它是 ESPHome 内置组件bluetooth_proxy 组件的默认参数设计得比较保守改配置前先了解默认值见下表。mqtt负责与消息 broker 的收发支持自动发现discovery让 Home Assistant 免手工建模。两点值得新手注意广播转发默认是分批的。固件内部把每批最多 16 个广播包单包打包后约 80 字节16 包约 1280 字节正好贴近 Wi-Fi 可用载荷上限一次发完这个批大小是编译期常量不需要也不应该在 YAML 里配置。主动连接模式会占用 BLE 连接槽位被动监听模式则完全不占槽位只转发广播。2. 环境准备安装并验证 CLI安装命令行工具pip install esphome克隆项目仓库查看组件源码或跑测试时用到git clone https://gitcode.com/GitHub_Trending/es/esphome cd esphome验证安装成功esphome version硬件方面一块带 PSRAM 的 ESP32如 ESP32-WROOM-32 模组、ESP32-C3-MINI-1配 5V/2A 电源即可。带 PSRAM 的板子留给 BLE 协议栈和 Wi-Fi 的内存余量更大长时间运行更稳。3. 一份能直接编译的网关配置模板创建bluetooth-gateway.yaml以下模板覆盖了网关所需的全部基础段落esphome: name: bluetooth-gateway platformio_options: board_build.f_cpu: 240000000L # 拉满 CPU 主频换取更好的处理余量 esp32: board: esp32dev framework: type: esp-idf sdkconfig_options: CONFIG_BT_BLE_50_FEATURES_SUPPORTED: y # 打开 BLE 5.0 特性 wifi: ssid: YOUR_WIFI_SSID password: YOUR_WIFI_PASSWORD power_save_mode: NONE # 关掉 Wi-Fi 省电避免扫描与休眠互相干扰 mqtt: broker: 192.168.1.100 username: mqtt_user password: mqtt_password discovery: true # 让 Home Assistant 自动建实体 discovery_retain: true keepalive: 15s # 心跳间隔默认即 15s可按需调整 bluetooth_proxy: active: true # true允许主动连接纯监听可设 false connection_slots: 5 # 预留 5 个 GATT 连接槽位 cache_services: true # 缓存服务信息加速重连 logger: level: INFO logs: esp32_ble_tracker: DEBUG # BLE 相关日志调到 DEBUG bluetooth_proxy: DEBUG api: encryption: key: your_encryption_key_here ota: password: your_ota_password其中bluetooth_proxy三个参数的取值范围建议对照组件源码esphome/components/bluetooth_proxy/init.py确认参数默认值允许范围说明activetrue布尔关闭后仅转发广播不占连接槽位connection_slots31~9上限来自 ESP-IDF 的IDF_MAX_CONNECTIONS9cache_servicestrue布尔仅 ESP32 生效服务缓存写入 NVS 闪存如果设备多到槽位不够最稳妥的做法是减小connection_slots并把只发广播的传感器温湿度计之类全部放在监听模式把槽位留给真正需要双向通信的设备。4. 设备接入两种模式各接一个4.1 被动监听小米温湿度计只收不连这类电池供电设备周期广播数据网关不用和它建立连接只需声明扫描参数 一个传感器平台。注意xiaomi_lywsd02mmc要求提供bind_key绑定密钥用于解密加密广播缺一不可esp32_ble_tracker: scan_parameters: interval: 1100ms # 扫描间隔 window: 1100ms # 扫描窗口与间隔相同即占空 100% active: false # 被动扫描降低功耗 sensor: - platform: xiaomi_lywsd02mmc mac_address: A4:C1:38:XX:XX:XX bind_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxx # 设备绑定密钥必填 temperature: name: 客厅温度 humidity: name: 客厅湿度 battery_level: name: LYWSD02 电量提示组件默认的扫描间隔是 320ms。间隔拉大到 1s 左右能明显减轻对 Wi-Fi 的空口争用代价是数据上报更慢一些——对温湿度这类慢变量完全无感。4.2 主动连接BLE 开关双向通信需要写特征值的设备走ble_client它会从bluetooth_proxy申请一个连接槽位ble_client: - mac_address: 00:1A:7D:DA:71:13 id: ble_switch 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: !binary AQ # 0x01 的 base64 value_off: !binary AA # 0x00 的 base64两种模式的取舍一句话设备会自己广播数据就用监听必须读写特征值才用连接。能少占一个槽位就少占一个。5. 刷写固件与验证# 1. 本地校验 编译 esphome compile bluetooth-gateway.yaml # 2. 首次用 USB 刷入 esphome upload bluetooth-gateway.yaml --device /dev/ttyUSB0 # 3. 之后都可以走无线 OTA esphome upload bluetooth-gateway.yaml刷完后用串口日志确认两件事bluetooth_proxy组件 setup 成功、目标 MAC 的广播包周期性出现esp32_ble_tracker的 DEBUG 日志里能看到。6. 常见问题排查清单 按出现频率排了序遇到对号入座连接不稳定、频繁掉线先用万用表量一下 5V 引脚供电不足是 BLE 掉链子的头号原因把connection_slots从 9 往下降槽位越多协议栈内存压力越大确认wifi.power_save_mode是NONE省电模式会让扫描窗口时断时续。MQTT 消息延迟高看 Wi-Fi 信号强度低于 -65dBm 时优先考虑换位置或加天线而不是调参数缩短scan_parameters的 interval 会加剧 Wi-Fi/BLE 抢射频反而可能更慢——两者是同一根天线在分时工作。设备扫描不到用esp32_ble_tracker的广播回调on_ble_advertise自动化打印收到的 MAC 和 RSSI确认设备到底有没有在广播小米系加密广播必须配bind_key密钥不对时广播能收到但数据解不出来表现像有设备没数据。7. 安全加固与进阶方向通信加密MQTT 走 TLS 只需改 broker 地址、端口与证书字段例如broker: mqtt.example.com、port: 8883、certificate_authority: ca.pem用户名密码建议放进!secret引用的密文文件。固件安全ota保留强密码并启用safe_mode配合 ESPHome 的api加密 key能堵住局域网侧的主要入口。内存余量PSRAM 板子可在配置中启用 PSRAMpsram: true为后续加显示缓冲区、音频缓存这类大块内存需求留空间。展示与控制面需要本地界面时挂一个web_server配auth用户比纯远程维护多一条保底链路。总结ESPHome 蓝牙网关的本质是bluetooth_proxy 收、mqtt 发active、connection_slots、cache_services三个参数决定它的容量和重连速度按能监听就不连接的原则分配槽位即可稳定运行。后续可以朝两个方向延伸用 ESP-NOW 把多台网关串成网状扩大覆盖或者基于广播的 RSSI 做粗略定位。遇到具体组件的行为差异直接翻esphome/components/下对应源码比二手资料可靠得多。【免费下载链接】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),仅供参考
返回列表