可以使用BLE软件狗的RaspberryPi检测iBeacons吗?

我从Radius Networks购买了一个开发工具包,包括一个ioGear GBU521 BLE 4.0 dongle和一个Raspberry Pi 。 我也买了一台RadBeacon iBeacons 。 他们都像广告一样工作,但是我对我得到的东西感到有些惊讶。

我曾假设RaspPi可以检测到iBeacons 。 相反,该套件是安装创build一个iBeacon 。 我的使用案例是检测forklift何时进入特定房间,以便我可以将工作交给他们。 我的想法是把叉车上的iBeacon,然后把RaspPisearchiBeacons。 当检测到iBeacon(叉车)时,您可以断定它在附近。 我会将RaspPi连接到LAN并通过REST or similar传递信息。 我知道我可以把一个合适的Android or Apple device ,这样做,但我不明白为什么这个encryption狗不能检测这些iBeacons并告诉我他们的UUID's是什么? 我错过了什么?

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

  1. 开始一个蓝牙LE扫描的后台进程:

     sudo hcitool lescan --duplicates & 

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

  2. 启动一个hcidump并将原始输出传输到一个脚本,该脚本将过滤iBeacon数据包:

     sudo hcidump --raw 

过滤是棘手的部分,来自hcidump的原始输出格式hcidump ,也显示不是iBeacon传输的数据包。 为了解决这个问题,我们制作了一个filter脚本,它逐行读取输出,并将原始数据包从其他输出(即MAC地址等)中分离出来。 我们在Radius Networks的iBeacon蓝牙configuration文件上做了大量的研究,我们用它来识别iBeacon数据包,并从其他设备的数据包中过滤出来。

我们把这一切放到了一个ibeacon_scan所有工作的ibeacon_scan脚本中,包括将原始标识符转换成可读的forms。 你可以在这里下载。 不久,我们将在iBeacon开发工具包中添加这个function来增加扫描function。

以下是脚本输出的示例:

 $ ./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选项,可以很容易地parsing为其他脚本,下面是一个例子:

 $ ./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时触发操作。

编辑:我们已经重新编写了这个脚本,使其更具响应性和可靠性,并将其整合到最新版本的开发工具包中 。 更新可以在这里下载。

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" 

你是正确的, iBeacon开发工具包没有devise来检测iBeacons – 它被devise为作为iBeacon进行传输。

也就是说,可以使用@ChrisStratton在他的评论中提出的变化来检测带有Raspberry Pi的iBeacons 。 看到我的同事@jjnebeker的答案,他已经写了一个脚本来做你想要的。

https://github.com/RadiusNetworks/android-ibeacon-service

用它来检测iBeacons。

它允许Android设备像iOS设备一样使用iBeacon。 当一个或多个iBeacons出现或消失时,应用程序可以请求获取通知。 应用程序还可以请求以1Hz的频率从一个或多个iBeacons获得范围更新。