是的!您可以使用树莓派扫描iBeacon。下面我们提供了一个脚本来完成此操作,您也可以按照以下步骤自己完成:
Start a background process that does a bluetooth LE scan:
sudo hcitool lescan --duplicates &
With the --duplicates
setting the scan will not ignore multiple packets from the same iBeacon.
Start an hcidump
and pipe the raw output to a script that will filter for iBeacon packets:
sudo hcidump --raw
过滤是棘手的部分,
hcidump
的原始输出格式不好,并且显示了不是 iBeacon 传输的数据包。为了解决这个问题,我们编写了一个过滤脚本,逐行读取输出并将原始数据包与其他输出(例如 MAC 地址等)分离开来。在 Radius Networks,我们进行了大量研究
iBeacon 蓝牙配置文件,用于识别 iBeacon 数据包并将它们从其他设备的数据包中过滤出来。
我们将所有内容整合到一个名为
ibeacon_scan
的脚本中,包括将原始标识符转换为可读形式。你可以
在此处下载它。很快,我们将在
iBeacon 开发套件中包含它以添加扫描功能。
以下是脚本输出的示例:
$ ./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
你可以使用此选项并将脚本的输出导入到您的脚本中,以在检测到具有特定标识符的iBeacon时触发操作。
编辑:我们已经重新制作了这个脚本,使其更加响应和健壮,并将其纳入了
开发套件的最新版本中。更新可在
此处下载。
编辑2:如
@sai-ramachandran所指出的那样,您可以增强此脚本以捕获每个iBeacon数据包的RSSI,除了POWER之外。要实现此目的,请将以下行添加到脚本中:
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"
sudo hcitool lescan
可以检测到包括“iBeacon”格式在内的BLE广告,但只会显示硬件地址,这可能足够或不足以满足您的目的。您可能需要运行hcidump或修改hcitool的源代码,以便从中转储广告数据包内容,从中提取iBeacon样式的UUID、major、minor和传输功率字段。阅读文档和/或代码可以帮助您找到接收功率水平,并与传输级别一起使用,进行非常粗略的距离估计。 - Chris Strattonsudo hcitool lescan
时,我能够在RaspPi上看到RadBeacon,并收到MAC地址的响应。然后在另一个SSH窗口中,我运行了sudo hcidump -a
命令,并能够看到一些统计数据,包括RSSI。但我无法看到UUID、Major和Minor。使用sudo hcidump -a -w outfile
命令,我可以找出UUID、Major和Minor。我也看到了功率数据的位置,但尚未对其进行解码。 - user1153660