3 回答
TA贡献1834条经验 获得超8个赞
是! 您可以使用Raspberry Pi扫描iBeacons。我们在下面组合了一个脚本来执行此操作,您也可以按照以下步骤自行进行操作:
启动进行蓝牙LE扫描的后台进程:
sudo hcitool lescan --duplicates &
使用该--duplicates设置,扫描将不会忽略来自同一iBeacon的多个数据包。
启动hcidump并将原始输出通过管道传递到脚本,该脚本将过滤iBeacon数据包:
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指出的那样,除了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"
TA贡献1876条经验 获得超7个赞
您是正确的,iBeacon开发套件并非旨在检测iBeacon,而是旨在作为iBeacon进行传输。
也就是说,可以使用@ChrisStratton在他的评论中建议的变体,用Raspberry Pi检测iBeacon 。
添加回答
举报