我从Radius Networks
购买了一个开发工具包,其中包含ioGear GBU521 BLE 4.0 dongle
和Raspberry Pi
。我还买了他们的一个RadBeacon iBeacons
。他们都像宣传的那样工作,但我对我得到的东西感到惊讶。
我原以为RaspPi
可以检测到iBeacons
。相反,该套件设置为创建 iBeacon
。我的用例是检测forklift
何时进入特定房间,以便我可以将工作发送给他们。我的想法是在叉车上放一个iBeacon然后把RaspPi搜索到iBeacons。当检测到iBeacon(叉车)时,您可以断定它在附近。我会将RaspPi连接到LAN
并让它通过REST or similar
传达信息。我知道我可以放一个合适的Android or Apple device
并以这种方式完成它,但我不明白为什么这个加密狗无法检测到这些iBeacons
并告诉我他们的UUID's
是什么?我错过了什么?
答案 0 :(得分:70)
是的!您可以使用Raspberry Pi扫描iBeacons。我们在下面编写了一个脚本,你可以自己完成这些步骤:
启动执行蓝牙LE扫描的后台进程:
sudo hcitool lescan --duplicates &
使用--duplicates
设置,扫描不会忽略来自同一iBeacon的多个数据包。
启动hcidump
并将原始输出通过管道传输到将过滤iBeacon数据包的脚本:
sudo hcidump --raw
过滤是一个棘手的部分,hcidump
的原始输出格式不好,并且还显示不是iBeacon传输的数据包。为了解决这个问题,我们制作了一个过滤脚本,逐行读取输出,并从其他输出中分离出原始数据包(即MAC地址等)。我们在iBeacon bluetooth profile上对Radius Networks进行了大量研究,我们用它来识别iBeacon数据包并从其他设备的数据包中过滤出来。
我们将这些全部放在一个ibeacon_scan
脚本中,该脚本可以完成所有操作,包括将原始标识符转换为人类可读的形式。您可以下载here。很快,我们会在iBeacon Development Kit中添加此功能以添加扫描功能。
以下是脚本输出的示例:
$ ./ibeacon_scan
UUID: 74278BDA-B644-4520-8F0C-720EAF059935 MAJOR: 0 MINOR: 73 POWER: -50
UUID: 2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 MAJOR: 1 MINOR: 6 POWER: -59
UUID: E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 MAJOR: 6 MINOR: 9 POWER: -55
我们还为裸输出添加了一个-b
选项,这个选项很容易解析为其他脚本,这是一个例子:
$ ./ibeacon_scan -b
2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 1 6 -59
E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 6 9 -55
74278BDA-B644-4520-8F0C-720EAF059935 0 73 -50
您可以使用此选项并将脚本的输出传递给脚本,以便在检测到具有特定标识符的iBeacons时触发操作。
编辑:我们重新设计了此脚本,使其更具响应性和强大功能,并将其合并到最新版本的development kit中。此更新可供下载here。
EDIT2:正如@sai-ramachandran所指出的,您可以扩充此脚本以捕获除POWER之外的每个iBeacon数据包的RSSI。为此,请将以下行添加到脚本中:
RSSI=`echo $packet | sed 's/^.\{132\}\(.\{2\}\).*$/\1/'`
RSSI=`echo "ibase=16; $RSSI" | bc`
RSSI=$[RSSI - 256]
并确保将RSSI添加到输出中:
echo "UUID: $UUID MAJOR: $MAJOR MINOR: $MINOR POWER: $POWER RSSI: $RSSI"
答案 1 :(得分:2)
你是正确的iBeacon Development Kit并非设计用于检测iBeacons - 它被设计为以iBeacon传输。
也就是说,可以使用Raspberry Pi中的@ChrisStratton在其评论中建议的变体来检测iBeacons。查看我的同事@jjnebeker的答案,他已经制作了一个你想要的脚本。
答案 2 :(得分:-1)
https://github.com/RadiusNetworks/android-ibeacon-service
用它来检测iBeacons。
它允许Android设备像iOS设备一样使用iBeacons。当一个或多个iBeacons出现或消失时,应用可以请求获取通知。应用程序还可以请求以1Hz的频率从一个或多个iBeacons获取测距更新。