从 Raspberry Pi 检测 iPhone 5s 的接近度

Posted

技术标签:

【中文标题】从 Raspberry Pi 检测 iPhone 5s 的接近度【英文标题】:Detecting proximity of an iPhone 5s from a RaspberryPi 【发布时间】:2014-04-05 05:40:03 【问题描述】:

我最近购买了几个 Raspberry Pi 和 CSR 蓝牙 4.0 USB 加密狗。我已经尝试了所有的博客和教程(其中最好的来自 Radius Networks 和 Adafruit),但我要么缺少重要的行为行为,要么缺少配置步骤。

我正在使用从源代码编译的 Bluez 5.17。我的 CSR 4.0 BLE 加密狗似乎也可以正常工作:

$ sudo hciconfig
hci0:   Type: BR/EDR  Bus: USB
        BD Address: 00:1A:7D:DA:71:0F  ACL MTU: 310:10  SCO MTU: 64:8
        UP RUNNING PSCAN
        RX bytes:12649 acl:0 sco:0 events:464 errors:0
        TX bytes:2658 acl:0 sco:0 commands:124 errors

当我开始 lescan 时,我什么也看不到。我的 iPhone 5s 已启用蓝牙。

$ sudo hcitool lescan
LE Scan ...

从我的 iPhone 5s 我启动“Beacon Toolkit”,创建一个带有随机 UUID 的新 iBeacon 并激活它。大量的 lescan 活动被收录。

$ sudo hcitool lescan
LE Scan ...
5E:EE:91:0C:BE:2E (unknown)
5E:EE:91:0C:BE:2E (unknown)
5E:EE:91:0C:BE:2E (unknown)
...

所以我决定尝试做广告:

$ sudo hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61 00 00 00 00 C8 00
< HCI Command: ogf 0x08, ocf 0x0008, plen 32
  1E 02 01 1A 1A FF 4C 00 02 15 E2 0A 39 F4 73 F5 4B C4 A1 2F
  17 D1 AD 07 A9 61 00 00 00 00 C8 00
> HCI Event: 0x0e plen 4
  01 08 20 00
$ sudo hciconfig hci0 leadv 3

我不知道此时我应该期待什么。 “Locate iBeacon”应用程序位于 Locate iBeacon 视图中,带有“正在寻找 iBeacon...”。什么都没有发生。

无论哪种方式,这个测试的全部目的是看看我是否可以让一个 RaspberryPi/Linux 通过 BLE 检测我的 iPhone 5s 与它的接近程度。

这甚至可能吗?所有 iBeacon 和 BLE 博客和教程都完全不清楚这项技术或它们所涵盖的工具实际上可以做什么。一方面,为了测量接近度而不断运行应用程序是不太实际的。

如何让我的 iPhone 5s 在不运行应用程序的情况下为自己做广告?

提前感谢您提供的任何提示。我认为我们中的一些人正在跌跌撞撞,试图了解如何在应用内场景之外使用此功能。

【问题讨论】:

【参考方案1】:

当您在 Raspberry Pi 上扫描 iBeacon 时,您需要一个脚本来解析 iBeacon 标识符。我公司发了一个here.

“Locate iBeacon”应用程序只是位于“正在查找 iBeacon...”的 Locate iBeacons 视图中。什么都没有发生。

除非您首先告诉 ios 查找它的邻近 UUID,否则您无法在 iOS 上看到 iBeacon。在您的情况下,您使用proximityUUID E20A39F4-73F5-4BC4-A12F-17D1AD07A961 进行Raspberry Pi 传输。您必须使用此邻近 UUID 为 iBeacon 配置 Locate 才能使其可见。

如何让我的 iPhone 5s 在不运行应用程序的情况下为自己做广告?

很遗憾,你不能。 iOS 设备需要运行一个应用程序来让自己发送 iBeacon 传输。如果您想让树莓派成为接收器,您必须让手机用户激活一个应用程序并将其置于前台。

另一种方法是让 Raspberry Pi 作为发射器。手机仍然需要安装一个应用程序来检测 Pi 并测量距离,但该应用程序可能在后台。当 iOS 首次检测到 iBeacon 时,它会在后台短暂启动寻找 iBeacon 的应用程序,在那里它可以快速估算距离,然后请求用户允许进入前台进行更多测距。

考虑到 iOS 安全模型,恐怕这是你能做的最好的了。对于这种用例,android 更加灵活,应用程序可以在后台进行全方位的测试(尽管 Android 不能充当发​​射器)。

全面披露:我是 Radius Networks 的首席工程师。

【讨论】:

谢谢大卫。是的,ibeacon 似乎只支持应用程序。我希望有一种方法可以使用接近配置文件检测 BLE 设备,但看起来它必须由用户设备处理。这对于被动自动化来说并不是很好,并且确实将所有内容都与设备操作系统联系在一起。老实说,我真的厌倦了物联网的应用化。 ibeacon 就像一个没有合理用例的演示。这种实现的有用案例很少。谁会在他们的应用程序运行并且屏幕打开的情况下在沃尔玛周围走来走去,以防他们路过销售? 另外,说真的,非常感谢您在周五晚上的回复,Radius Networks 的工程师!您的 ibeacon 教程很棒。 很高兴为您提供帮助。请记住,这些是针对节省电池的 iOS 特定限制。 Android 没有这些限制(尽管您仍然需要安装一个应用程序来设置所有内容。)即使在 iOS 上有限制,您仍然可以在用户第一次看到 iBeacon 时触发手机上的处理,即使该应用程序没有已开始。您只需要接受操作系统第一次注意到 iBeacon 时就会发生的限制。除非用户选择将托管触发器的应用程序置于前台,否则您的处理时间不能超过 5 秒。【参考方案2】:

我同意你的挫败感。我一直在尝试做同样的事情......

大卫你的解释完全有道理..

但我能够以某种方式让它在我的树莓派上运行几天。每次,我接近 RPI,LED 都会亮起。当我走大约 20 米时立即关闭。我能够使用您的 testblescan 程序搜索特定信号,然后我破解了它,让它在看到带有“minor = 513”的信号时点亮 LED ......它工作得很好......然后我在胡闹,操作系统损坏了,所以我不得不从头开始……现在我不能重复了。无论我的 iphone6 处于什么状态,它似乎都能正常工作..我在天堂,现在我无法让它做同样的事情..

我一直有蓝牙,我有一块鹅卵石手表..应该,我至少看不到蓝牙的信号..不知何故,如果我关闭我 iphone 上的蓝牙,我可以看到鹅卵石Hcitool 扫描/lescan。所以想知道iphone是否以某种方式拦截了蓝牙信号......

【讨论】:

以上是关于从 Raspberry Pi 检测 iPhone 5s 的接近度的主要内容,如果未能解决你的问题,请参考以下文章

Raspberry Pi 4B 颜色检测

Raspberry Pi 上的 OpenCV 人脸检测速度很慢

Raspberry Pi:检测声音并触发网络摄像头 [关闭]

基于Raspberry Pi4 64位系统的口罩检测

Raspberry Pi 摄像头模块无法被普通应用程序检测到

Raspberry Pi - Python 中的 GPIO 事件