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

 找回密码
 立即注册
查看: 1775|回复: 4

[基础教程] ESPHomeI2C通讯及通过蓝牙追踪iOS设备的分享体会

[复制链接]

6

主题

75

帖子

673

积分

高级会员

Rank: 4

积分
673
金钱
598
HASS币
10
发表于 2022-11-23 10:33:53 | 显示全部楼层 |阅读模式
本帖最后由 shenbo 于 2022-11-23 10:35 编辑

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

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


Screenshot 2022-11-23 at 09.55.23.png

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

Screenshot 2022-11-23 at 09.56.16.png
上面说了关于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[size=15.008px],用来修复iOS的ble overflow area[size=15.008px],如果你的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,然后触发自动化,大家可以下载
Screenshot 2022-11-23 at 10.27.18.png

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


下面是我的code:

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



##传感器---------------------------------------------------------------
sensor:
  - platform: wifi_signal   ##Wifi信号
    name: "WiFi Signal Sensor"
    update_interval: 600s
  
  - platform: ble_rssi   ##Benons12-iBeacon-信号强度&开锁&关锁
    ibeacon_uuid: 'XXXXXXXXXXXXXXX'
    name: "Benson12-iBeacon-RSSI"
    id: benson12_ibeacon_rssi


binary_sensor:

  - platform: template  ##ibeacon开锁
    name: "Benson12-iBeaconKey"
    id: benson12_ibeaconkey
    lambda: |-
      if (id(benson12_ibeacon_rssi).state > -85) {
        return true;
      } else {
        return false;
      }
    filters:
      - delayed_off: 10s
    on_press:
      then:
        - switch.turn_on: unlockcar
            

  - platform: template  ##ble控制锁
    name: "Benson12 BLE"
    id: benson12_ble
    filters:
      - delayed_off: 30s
    on_press:
      then:
        - switch.turn_on: unlockcar
    on_release:
      then:
        - switch.turn_on: lockcar




评分

参与人数 1金钱 +20 HASS币 +10 收起 理由
+ 20 + 10 感谢楼主分享!

查看全部评分

回复

使用道具 举报

47

主题

1659

帖子

6700

积分

论坛元老

Rank: 8Rank: 8

积分
6700
金钱
5031
HASS币
40
发表于 2022-11-23 12:15:31 | 显示全部楼层
i2c,ic本身就是芯片与芯片之间的通信,远距离还得用485和can之类的
折腾精神永存,感恩感谢论坛每一位愿意分享和帮助过我的大佬,论坛有你更精彩
回复

使用道具 举报

6

主题

75

帖子

673

积分

高级会员

Rank: 4

积分
673
金钱
598
HASS币
10
 楼主| 发表于 2022-11-27 17:25:49 | 显示全部楼层
ESP32关于蓝牙追踪的再一个解决方案:
Screenshot 2022-11-27 at 17.20.45.png


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

使用道具 举报

26

主题

555

帖子

1965

积分

金牌会员

Rank: 6Rank: 6

积分
1965
金钱
1405
HASS币
40
发表于 2022-11-27 18:28:52 | 显示全部楼层
期待你的更新
回复

使用道具 举报

6

主题

75

帖子

673

积分

高级会员

Rank: 4

积分
673
金钱
598
HASS币
10
 楼主| 发表于 2022-11-27 23:06:44 | 显示全部楼层
前文的I2C中继模块到货了,效果很确定,一侧(PN532)5v vcc,一侧(ESP32)3.3v vdd,i2c线缆长度5米,工作稳定。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-28 15:53 , Processed in 0.114950 second(s), 31 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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