找回密码
 立即注册

微信扫码登录

搜索
查看: 29561|回复: 36

[技术探讨] 【足够强大】ESPHome+ESP32打造通用蓝牙网关,比小米自家的好

  [复制链接]

104

主题

2846

回帖

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

积分
12259
金钱
9244
HASS币
460

教程狂人突出贡献

发表于 2022-5-8 21:22:39 | 显示全部楼层 |阅读模式
本帖最后由 XCray 于 2023-4-26 18:56 编辑

玩ESPHome已经一年多了,碰到了很多问题,有的解决了,有的放弃了,有的耿耿于怀至今。。。

简单小结一下蓝牙通用网关

其实说通用有一点点夸张哈,大部分使用蓝牙广播的设备都可以接入,由于esphome的限制,基于ble_client的还不能与基于广播的用一个esp32搞定。

我自己现在在用的设备可以分为两类:

1. ESPHome内置组件,根据文档直接在yaml里面配置即可:
- 花花草草传感器
- 蓝牙温湿度计2
- 云米燃气灶
2. 自制组件(把ESPHome内置组件拿来修改),把代码保存至指定目录后与前面的设备一起在yaml里配置,即一个esp32即可:
- 榉树门锁
- yeelight调光开关
- 云麦好轻体脂秤
这几个代码之前已经发过帖子,感兴趣的找来看吧。

~~~~~~~~~~~~~~~~~~~~~~~~~
重点说说一个难题,就是广播扫描参数的设置问题。前期试过多种设置,总会偶尔发生收不到设备发出的广播消息的现象

其它设备都还好,或者说偶尔丢一次消息无所谓,最关心的是蓝牙门锁,一次也不想错过。

错过门锁广播消息的现象,大概十几天能观察到一次,而同时在用小米的蓝牙网关却每次都能收到。

这几个组件都是基于 esp32_ble_tracker 的,反复阅读官方文档以及其中提到的TI的文档,可能影响的参数就两个:
扫描间隔和扫描窗口

esphome默认的设置分别时320ms和30ms,丢消息的现象比较明显;目前我在用的是160/120ms,有明显改善,但仍然会丢。

一个极端的想法是把扫描窗口设置为和扫描间隔一样大,但必须把网络连接方式改成以太网,难度太大。

如果继续使用WiFi,那么注定扫描窗口就必须小于扫描间隔(必须为WiFi预留出必要的时间),也就意味着这个简单的思路总会有错过蓝牙广播消息的可能。

小米自己的网关也是用的WiFi,它是怎么设置能够做到不错过广播消息的呢?一直也没有看到有具体的说明,小米设备蓝牙广播的参数设置也没看到过说明

那么我们应该怎么设置才好呢?耗电的事情都可以完全忽视,只求不错过广播消息!
~~~~~~~~~~~~~~~~
根据TI的文档(详见),简单描述一下技术背景:

广播发送设备可以设置使用1~3各广播信道、也可以设置广播间隔(20ms~10.24s),每次在一个信道上的广播最多需要10ms:

                               
登录/注册后可看大图

而广播接收侧不能选择信道,必须3个信道顺序扫描:

                               
登录/注册后可看大图


~~~~~~~~~220621补充~~~~~~~~~
把间隔设置为120ms、窗口设置为100ms,已经观察了两个多月了,未再发生丢消息的现象,wifi连接也没啥问题,感觉基本可以解决之前头疼的问题了。

~~~~~~~~~230426补充~~~~~~~~~
ESPHome自2022.12.x版本开始,存在严重bug,个人能力有限无法判定具体问题,但现象很明确:
运行5个小时左右会出现蓝牙功能失效,就是esp32硬件本身还在运行,但不再接收解析任何蓝牙消息,其他功能正常。只有断电重启才能恢复,然后过几个小时又会出现(2023.3.x~2023.4.x好像若干小时会自行崩溃重启)。


经多次尝试,发现最后一个稳定可靠的版本是2022.11.5。
另外,论坛里有些朋友用于连接LD2410B,也存在非常相像的问题,怀疑根因是一个(帖子)。


供参考。
回复

使用道具 举报

104

主题

2846

回帖

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

积分
12259
金钱
9244
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2022-5-21 17:00:14 | 显示全部楼层
trz0332 发表于 2022-5-15 21:42
其实我也遇到了这个问题,自己diy的蓝牙称的时候也出现了有时候扫描不到蓝牙广播,,一直无解,后来就放弃 ...

我最近在用的配置:
wifi:
  ssid: $wifi_ssid
  password: $wifi_password
  fast_connect: on
  reboot_timeout: 23min
  
esp32_ble_tracker:
  scan_parameters:
   interval: 120ms
   window: 100ms


每次蓝牙广播的时长接近 30ms,我现在只拿出20ms给wifi(只有一个ssid故不用扫描),应该可以达到不错过蓝牙广播的效果,这几天用着还行,wifi没啥异常、也没碰到丢消息的现象,继续观察ing
回复

使用道具 举报

0

主题

59

回帖

381

积分

中级会员

积分
381
金钱
322
HASS币
0
发表于 2025-1-14 10:56:10 | 显示全部楼层
学习学习
回复

使用道具 举报

1

主题

82

回帖

290

积分

中级会员

积分
290
金钱
207
HASS币
0
QQ
发表于 2024-12-9 14:05:47 | 显示全部楼层
学习大佬
回复

使用道具 举报

1

主题

3

回帖

36

积分

新手上路

积分
36
金钱
32
HASS币
0
发表于 2024-11-19 22:41:10 | 显示全部楼层
我是小白,我想问下,按照我的理解,树莓派上既有 Wi-Fi 也有蓝牙,能否自建蓝牙网关呢?目前遇到的问题是不知道为什么 bluetoothctl 没办法连接小米蓝牙开关。
回复

使用道具 举报

9

主题

61

回帖

702

积分

高级会员

积分
702
金钱
632
HASS币
0
发表于 2023-9-8 10:20:58 | 显示全部楼层
neroxps 发表于 2022-6-30 17:21
我的鹿客 Q2 门锁,广播包,1秒会发两个,用USB 蓝牙接收器抓的话,几乎全部都能抓到,很少丢,esp32 还是 ...

大佬,不好意思,请教一下,你的鹿客门锁如何实现本地接入的?我通过几位大佬的资料,找到了beaconkey,但不知道为啥是40位字符,是还需要怎么转换么?
回复

使用道具 举报

104

主题

2846

回帖

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

积分
12259
金钱
9244
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2023-7-23 22:22:27 | 显示全部楼层
kkkkllll08 发表于 2023-7-23 13:17
PVVX/ATC_MiThermometer项目里面写道“If you have many BLE devices, the adapter must be able to receiv ...

确实是个值得琢磨的说法,虽然我还琢磨不明白
3ms,这是个非常短的时间,不能用esp32的说法也显得很夸张不过ESPHome对蓝牙5.0的支持度确实是个问题

无论如何,对于esp32来说,以太网肯定比wifi更好
回复

使用道具 举报

2

主题

53

回帖

655

积分

高级会员

积分
655
金钱
600
HASS币
0
发表于 2023-7-23 13:17:35 | 显示全部楼层
本帖最后由 kkkkllll08 于 2023-7-23 13:20 编辑

PVVX/ATC_MiThermometer项目里面写道“If you have many BLE devices, the adapter must be able to receive BLE advertisements every 3 ms. UART speeds of 921600 baud and even USB1.1 are not enough to transfer information in binary form in the HCI format. Requires BT adapter with USB2.0 HS. Otherwise, there will be many gaps in the reception.

Do not use ESP32xxx - it cannot work with BLE at normal speed and drains the batteries of all BLE devices when connected!

ESPHome does not work with Bluetooth 5.0 and misses a lot of advertising packets from BLE devices.”
不知这个和丢消息是否有关
以及,有很多开源的以太网esp32项目,我现在在调试的就是用以太网的esp32,不过我目前只是接入小米温湿度计,对消息的即时性要求没那么高,不过之前esp32用WiFi接入时会有wifi连接困难的情况,所以改用以太网接入。
回复

使用道具 举报

35

主题

383

回帖

2710

积分

金牌会员

积分
2710
金钱
2292
HASS币
10
发表于 2023-4-2 09:09:24 | 显示全部楼层
两个帖子看下来有点儿懵。
把手头的esp32c3刷成普通的ble网关,能把智能门锁接进来吗?
回复

使用道具 举报

104

主题

2846

回帖

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

积分
12259
金钱
9244
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2022-12-13 07:50:15 | 显示全部楼层
bainiu 发表于 2022-11-24 11:32
大佬,我之前在esp8266 nodemcu 上搞雷达人体、光电传感器、温探传感器都搞过。首次买了个esp32 .
1、在esp ...

代码和步骤我在其它帖子里能说的都说过了,慢慢看吧,这东西没办法三言两语交代清楚。
回复

使用道具 举报

56

主题

878

回帖

4245

积分

论坛元老

积分
4245
金钱
3311
HASS币
0
发表于 2022-11-24 11:32:00 | 显示全部楼层
大佬,我之前在esp8266 nodemcu 上搞雷达人体、光电传感器、温探传感器都搞过。首次买了个esp32 .
1、在esphome上面用https://esphome.github.io/bluetooth-proxies,网站在线刷写固件,能在hass前端配置(输入KEY)接入小米温度计,人体传感器能看到除了触发传感器外的所有传感器,也能看到小米的全自动智能门锁配置,但是我不知道怎么搞门锁key(提取token和key的软件提取不了门锁的蓝牙key)所以门锁接不了。
2、按https://bbs.hassbian.com/forum.php?mod=viewthread&tid=16331&highlight=esp32自制开源ESPHome通用蓝牙网关(ESP32)帖子,修改相应代码能刷好固件,也能看到网关能识别小米蓝牙设备,但就是在 Passive BLE Monitor 集成上看不到设备(我在82楼有回贴)。
玩到这个时候我开始迷糊了,不知道怎么玩下去了,如果能通过esp32接入小米门锁和其他蓝牙设备,我的多模网关可以关机了(其他设备全在z2m下),请教大佬的esp32固件esphome代码及接入步骤,谢谢。
回复

使用道具 举报

4

主题

100

回帖

393

积分

中级会员

积分
393
金钱
289
HASS币
0
发表于 2022-7-12 01:33:28 | 显示全部楼层
真的是非常细致的思路,感谢楼主分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian ( 晋ICP备17001384号-1 )

GMT+8, 2025-7-16 13:49 , Processed in 0.179303 second(s), 17 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表