数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 8016|回复: 28

[Arduino] iPhone蓝牙广播随机地址的识别

[复制链接]
发表于 2019-11-29 10:33:08 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
默认的IOS开启了连续服务功能,会用蓝牙4.0的低功耗不断的发送“广告”包。 本来想利用这个来制作一个接近开关,比如带着手机到门口,能自动解锁门。自动解锁电动车之类的。

但是这个广告包用的是一个随机蓝牙地址。而且其附带的厂商数据,是苹果自定义的,至今网上未有人能解析出来。

后来研究蓝牙规范,发现这个随机地址是可解析的,前提是你要有相应的Key。 这个key就是 IRK。

于是我复制粘贴,终于组装出了一个函数,来判断空中的“广告”包的蓝牙地址是否属于自己的手机。
项目开源,上传到了GitHub。

https://github.com/fryefryefrye/Decoding-Random-Bluetooth-Address

里面包含两个小项目:

No.1   获得你的iPhone 的 IRK
用Arduino环境,把get_irk项目烧进一块ESP32板子,这块板子就会打开一个蓝牙服务。 然后在iPhone上安装LightBlue软件,找到“ESP_BLE_SECURITY”服务,点击连接,就会有提示是否配对。确定后手机端连接成功,ESP32端就会打印出IRK。

No.2   低成本监听蓝牙广播包
用Arduino环境,把nrf_ble_add项目烧进一块nano板子,连接上一块nRF24L01,即可监听广播包,提取其中的随机MAC地址,然后与之前获得的IRK进行比较,就能判断是不是自己的手机。

打赏

参与人数 3家元 +45 收起 理由
rimet + 5 優秀文章
老攻 + 30 優秀文章
qrut + 10 優秀文章

查看全部打赏

发表于 2022-7-30 23:00:05 | 显示全部楼层
需要烧录的固件
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-10 15:22:52 | 显示全部楼层
kindzhon 发表于 2022-6-10 11:32
不如用手机的NFC功能更爽。

我的关键是不用掏东西。双手捧着快递也能正常开门。
回复 支持 反对

使用道具 举报

发表于 2022-6-10 11:32:57 | 显示全部楼层
fryefryefrye 发表于 2022-6-10 10:14
的确有这个问题。我的解决方案如下:
1:接收器放在楼道下去半层的地方。为了尽量远离家门。
2:门口有个 ...

不如用手机的NFC功能更爽。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-10 10:14:32 | 显示全部楼层
kindzhon 发表于 2022-6-10 10:04
创意不错。
但不能用在门上,如果你在家的时候那门一直是开着的。 ...

的确有这个问题。我的解决方案如下:
1:接收器放在楼道下去半层的地方。为了尽量远离家门。
2:门口有个类似门铃的按钮,放在接近地面的位置,用脚踢一下,才是确认开门的命令,收到手机信号,只是一个许可。
3:到家手机只能放房间去,不能放客厅。放在客厅,接收器偶尔会收到。
4:室内有个蜂鸣器,如果室外接收器收到手机信号,蜂鸣器会轻微响几声,提示把手机收好。

虽然有以上问题,但是确实比每次掏钥匙开门方便多了。
而且我的门也是自动打开的,经常两手抱着快递回家,用脚踢一下,门就解锁,并且自动打开。
然后超声波距离传感器感应有人进门之后,再自动关闭。一键即可自动开门,自动关门,非常的方便。
回复 支持 反对

使用道具 举报

发表于 2022-6-10 10:04:35 | 显示全部楼层
创意不错。
但不能用在门上,如果你在家的时候那门一直是开着的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-9 22:01:15 | 显示全部楼层

github上修复了。
回复 支持 反对

使用道具 举报

发表于 2022-6-9 12:37:26 | 显示全部楼层
这个好,先收藏起来,万一哪天要用。
回复 支持 反对

使用道具 举报

发表于 2021-12-19 19:34:58 | 显示全部楼层
网站上更新了吗
回复 支持 反对

使用道具 举报

发表于 2021-7-15 11:32:30 | 显示全部楼层
fryefryefrye 发表于 2021-7-1 18:18
bug已经修复,但是github连不上去,先把固件放这儿。

网站上更新了吗?:shy:
回复 支持 反对

使用道具 举报

发表于 2021-7-6 12:26:51 | 显示全部楼层
fryefryefrye 发表于 2021-7-1 18:18
bug已经修复,但是github连不上去,先把固件放这儿。

用esphome_flash刷的时候提示
Using 'COM14' as serial port.
Connecting......
Detecting chip type... ESP32
Connecting......

Chip Info:
- Chip Family: ESP32
- Chip Model: ESP32D0WDQ6 (revision 1)
- Number of Cores: 2
- Max CPU Frequency: 240MHz
- Has Bluetooth: YES
- Has Embedded Flash: NO
- Has Factory-Calibrated ADC: YES
- MAC Address: 3C:61:05:14:DD:20
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
- Flash Size: 4MB
Unexpected error: Error while retrieving firmware file 'https://raw.githubusercontent.com/espressif/arduino-esp32/1.0.4/tools/sdk/bin/bootloader_dio_80m.bin': ('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))
回复 支持 反对

使用道具 举报

发表于 2021-7-3 12:15:08 | 显示全部楼层

感谢楼主回复。:handshake:
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-3 08:23:02 | 显示全部楼层
lyy-cy 发表于 2021-7-3 00:24
“安卓的话就简单了,装个软件,自己发广播就行了”

能具体说是哪个软件么?谢谢!!! ...

比如: nRF Connect
回复 支持 反对

使用道具 举报

发表于 2021-7-3 00:24:34 | 显示全部楼层
“安卓的话就简单了,装个软件,自己发广播就行了”

能具体说是哪个软件么?谢谢!!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-1 18:18:13 | 显示全部楼层

bug已经修复,但是github连不上去,先把固件放这儿。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

发表于 2021-7-1 12:45:58 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

发表于 2020-10-8 00:34:26 | 显示全部楼层
我和楼主一样,有各种好玩的想法,但就没有楼主的技术。:mad:
回复 支持 反对

使用道具 举报

发表于 2020-9-8 14:45:07 来自手机浏览器 | 显示全部楼层
息屏就搜索不到了、是版本问题,还是手机本身的问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-24 16:48:43 | 显示全部楼层
anshilike 发表于 2020-4-24 02:25
我是将例程ble-notify改了下 手机读取rssi强度 返回给esp32开或关的指令 刚开始学BLE 多交流 ...

ESP32 成本高一点,但是可以获得RSSI,然后估计距离。

用nRF24L01成本低,但是没RSSI,只能获得 “有” 或者 “没有” 两个状态。
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-6-28 08:33 , Processed in 0.436801 second(s), 15 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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