带有BLE Dongle的Raspberry Pi能否检测到iBeacons?

时间:2014-02-12 16:07:34

标签: raspberry-pi ibeacon

我从Radius Networks购买了一个开发工具包,其中包含ioGear GBU521 BLE 4.0 dongleRaspberry Pi。我还买了他们的一个RadBeacon iBeacons。他们都像宣传的那样工作,但我对我得到的东西感到惊讶。

我原以为RaspPi可以检测到iBeacons。相反,该套件设置为创建 iBeacon。我的用例是检测forklift何时进入特定房间,以便我可以将工作发送给他们。我的想法是在叉车上放一个iBeacon然后把RaspPi搜索到iBeacons。当检测到iBeacon(叉车)时,您可以断定它在附近。我会将RaspPi连接到LAN并让它通过REST or similar传达信息。我知道我可以放一个合适的Android or Apple device并以这种方式完成它,但我不明白为什么这个加密狗无法检测到这些iBeacons并告诉我他们的UUID's是什么?我错过了什么?

3 个答案:

答案 0 :(得分:70)

是的!您可以使用Raspberry Pi扫描iBeacons。我们在下面编写了一个脚本,你可以自己完成这些步骤:

  1. 启动执行蓝牙LE扫描的后台进程:

    sudo hcitool lescan --duplicates &
    

    使用--duplicates设置,扫描不会忽略来自同一iBeacon的多个数据包。

  2. 启动hcidump并将原始输出通过管道传输到将过滤iBeacon数据包的脚本:

    sudo hcidump --raw 
    
  3. 过滤是一个棘手的部分,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获取测距更新。