『瀚思彼岸』» 智能家居技术论坛

标题: ESPHomeI2C通讯及通过蓝牙追踪iOS设备的分享体会 [打印本页]

作者: shenbo    时间: 2022-11-23 10:33
标题: ESPHomeI2C通讯及通过蓝牙追踪iOS设备的分享体会
本帖最后由 shenbo 于 2022-11-23 10:35 编辑

最近一直在折腾通过ESPHOME控制车辆锁、后备箱等设备,由于担心网络连接问题,所以希望有一个本地可以触发解锁的自动化,论坛里https://bbs.hassbian.com/thread-17221-1-1.html,这位兄台是通过NFC解决,实践过程中发现不论通过I2C或SPI总线,只要ESP32到PN532的线缆超过一定长度后,通讯就变得很不稳定,查阅大量资料后发现,两类总线确实对于线缆有长度要求,确保信号稳定,一般情况下I2C可以通过“上拉电阻”方式稳定信号,连接方式可以看下图:
[attach]43554[/attach]

这样可以把线缆控制在5-7米左右,但是ESP32的VDD是3.3V,PN532的VCC是5V,在这样的情况下简单的上拉电阻无法解决问题,网上资料建议的连接方式如下图:


[attach]43555[/attach]

在shadowba提示下,也可以通过I2C中继芯片解决,taobao上找到了下面这个chip(价格10元有找),不过我暂时还没收到,所以不知到底是否能解决问题,看到这里的朋友,不要骂人哈,等我测试后再补充。

[attach]43556[/attach]
上面说了关于I2C通讯问题,下面说说蓝牙追踪iOS设备问题,由于I2C通讯上遇到的问题,所以我就一直尝试通过蓝牙追踪设备来触发自动化,由于本人的Code能力也是弱鸡,所以只能是抄作业为主,查了大量资料后,最终找到了两篇比较重要的参考,分享给大家:
http://www.davidgyoungtech.com/2 ... g-the-overflow-area   
https://community.home-assistant ... nt-detection/332914
简单总结一下资料内容,首先iOS设备目前只支持BLE蓝牙连接,Classic蓝牙是不支持的,而且iOS设备在做ble advertising data时,为了安全考虑,mac地址是随机产生的,大概45mins更新一次,并且除了iOS系统自己,所有的APP都不允许在后台发送ble advertising data,关键是iOS自己的ble advertising data有自己独有的编码规则,所以在使用ESPHOME的相关BLE组件时,无法简单直接使用iOS设备的BLE Data或者mac地址,这样自然也无法追踪iOS设备,我总结了两个思路解决问题:
1、解读iOS的ble advertising data。
这也是上述两文的重点!首先要安装一个叫“crownstone”APP用来修复iOS的ble overflow area如果你的iOS设备重启后,需要再次启动这个APP,还好iPhone几个月也不会重启一次,接下就是编写ESPHOME的YAML文件,基本上就是通过获取特定ble advertising data后,通过RSSI来判断设备远近,然后触发自动化控制,大家可以看原文,我在后面也会分享我的code。
2、通过UUID来调用ESPHOME BLE组建。
鉴于我的目的是解锁,而且是备用方案,所以还有一个简单的方式是iOS设备官方允许可以建成一个iBeacon,https://developer.apple.com/docu ... o_an_ibeacon_device,这样可以通过自己生成一个UUID来作为解锁的唯一识别ID,然后触发自动化,大家可以下载
[attach]43560[/attach]

这个APP来实现,当然如果有大神在,可以考虑做一个集成iBeacon和fixi OS ble overflow area的APP,那就完美啦


下面是我的code:

  1. ##BLE追踪器
  2. esp32_ble_tracker:
  3.   scan_parameters:
  4.     interval: 1s
  5.     window: 1s
  6.     duration: 30s
  7.   on_ble_advertise:
  8.     - then:
  9.       - lambda: |-   ##追踪iPhone,并确保信号强度大于-85分贝时认定为开锁
  10.             bool benson12_ble_status = false;
  11.            
  12.             for (auto data : x.get_manufacturer_datas()) {
  13.               if (strcmp(format_hex_pretty(data.data).c_str(), "01.XXXXXXXXXXXXXXXXXXX.00 (17)") == 0) {
  14.                 if (x.get_rssi() > -85){
  15.                   ESP_LOGD("ble_adv", "benson12_ble found in the car");
  16.                   benson12_ble_status = true;
  17.                 }
  18.               }
  19.               ESP_LOGD("ble_adv", "    - %s", format_hex_pretty(data.data).c_str());
  20.             }
  21.             id(benson12_ble).publish_state(benson12_ble_status);



  22. ##传感器---------------------------------------------------------------
  23. sensor:
  24.   - platform: wifi_signal   ##Wifi信号
  25.     name: "WiFi Signal Sensor"
  26.     update_interval: 600s
  27.   
  28.   - platform: ble_rssi   ##Benons12-iBeacon-信号强度&开锁&关锁
  29.     ibeacon_uuid: 'XXXXXXXXXXXXXXX'
  30.     name: "Benson12-iBeacon-RSSI"
  31.     id: benson12_ibeacon_rssi


  32. binary_sensor:

  33.   - platform: template  ##ibeacon开锁
  34.     name: "Benson12-iBeaconKey"
  35.     id: benson12_ibeaconkey
  36.     lambda: |-
  37.       if (id(benson12_ibeacon_rssi).state > -85) {
  38.         return true;
  39.       } else {
  40.         return false;
  41.       }
  42.     filters:
  43.       - delayed_off: 10s
  44.     on_press:
  45.       then:
  46.         - switch.turn_on: unlockcar
  47.             

  48.   - platform: template  ##ble控制锁
  49.     name: "Benson12 BLE"
  50.     id: benson12_ble
  51.     filters:
  52.       - delayed_off: 30s
  53.     on_press:
  54.       then:
  55.         - switch.turn_on: unlockcar
  56.     on_release:
  57.       then:
  58.         - switch.turn_on: lockcar
复制代码





作者: jjcs    时间: 2022-11-23 12:15
i2c,ic本身就是芯片与芯片之间的通信,远距离还得用485和can之类的
作者: shenbo    时间: 2022-11-27 17:25
ESP32关于蓝牙追踪的再一个解决方案:
[attach]43694[/attach]


ESPresense,一个专用固件,刷入后可以追踪大量的蓝牙随身设备,对于iPhone的支持不错,唯一不足是距离更新很慢,感觉至少有10s左右的延迟。

作者: dgmax    时间: 2022-11-27 18:28
期待你的更新
作者: shenbo    时间: 2022-11-27 23:06
前文的I2C中继模块到货了,效果很确定,一侧(PN532)5v vcc,一侧(ESP32)3.3v vdd,i2c线缆长度5米,工作稳定。




欢迎光临 『瀚思彼岸』» 智能家居技术论坛 (https://bbs.hassbian.com/) Powered by Discuz! X3.5