当前位置: 首页 > 知识库问答 >
问题:

RaspberryPi与BLE东乐可以检测iBeacons?

安博文
2023-03-14

我从Radius Networks公司购买了一个开发工具包,其中包括一个ioGear GBU521 BLE 4.0加密狗和一个Raspberry Pi。我还买了一个他们的RadBeacon iBeacons。他们都像广告上说的那样工作,但我对我所得到的有点惊讶。

我假设RaspPi可以检测iBeacons。相反,该套件被设置为创建一个iBeacon。我的用例是检测叉车何时进入特定房间,以便我可以向他们发送工作。我的想法是在叉车上放一个iBeacon,然后放一个RaspPi搜索iBeacon。当发现一辆iBeacon(叉车)时,你可以断定它就在附近。我将把RaspPi连接到局域网中,并让它通过REST或类似的方式传递信息。我知道我可以放一个合适的Android或苹果设备并以这种方式完成它,但是我不明白为什么这个加密狗不能检测这些iBeacons并告诉我它们的UUID是什么?我错过了什么?


共有3个答案

谷梁晟
2023-03-14

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

使用此选项可检测iBeacons。

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

苏彦君
2023-03-14

您是对的,iBeacon开发工具包不是设计用来检测iBeacons的——它是设计用来作为iBeacon进行传输的。

也就是说,使用@ChrisStratton在评论中建议的变体,用树莓派检测iBeacons是可能的。看看我的同事@jjnebeker的回答,他做了一个脚本来做你想要的。

章玮
2023-03-14

是的。您可以使用Raspberry Pi扫描iBeacons。我们已经在下面编写了一个脚本来实现这一点,您也可以通过以下步骤自己完成:

>

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

    sudo hcitool lescan --duplicates &
    

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

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

    sudo hcidump --raw 
    

    过滤是棘手的部分,来自hciload的原始输出没有很好地格式化,并且还显示了非iBeacon传输的数据包。为了解决这个问题,我们制作了一个过滤脚本,逐行读取输出,并将原始数据包从其他输出(即MAC地址等)中分离出来。)。我们在Radius Networks对iBeacon蓝牙配置文件进行了大量研究,我们使用该配置文件来识别iBeacon数据包,并从其他设备的数据包中过滤出来。

    我们将所有这些都整合到一个ibeacon\u 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
    

    您可以使用此选项并将脚本的输出管道传输到脚本,以便在检测到具有特定标识符的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"
    

  •  类似资料:
    • 我试过看http://developer.android.com/guide/topics/connectivity/bluetooth-le.html搜索谷歌,但我无法找到以下信息: 如果我使用的是常规的支持蓝牙的Android设备,我可以与BLE设备通信吗?提前感谢!

    • All the Cokes are the same and all the Cokes are good. Liz Taylor > knows it, the President knows it, the bum knows it, and you know > it. ——Andy Warhol “在美国,所有人喝到的可乐的都是一样的,无论是总统或者是流浪汉”。波普艺术家 Andy War

    • meta-raspberrypi 是针对树莓派的 OpenEmbedded BSP layer,树莓派是开源硬件的掌上电脑,OpenEmbedded是用于构建linux 操作系统的工具。

    • 以下术语是什么意思:A2DP、LE、APTX?

    • 问题内容: 我将扮演一个恶魔的拥护者片刻。我一直想知道为什么将浏览器检测(而不是功能检测)视为一种不好的做法。如果我测试某个浏览器的某个版本并确认该功能以某种可预测的方式运行,则可以决定对其进行特殊处理。这样做的理由是将来会万无一失,因为此部分浏览器版本不会更改。另一方面,如果我检测到DOM元素具有函数X,则不一定表示: 此功能在所有浏览器中的工作方式相同,并且 更重要的是,即使在所有未来的浏览器

    • 太感谢你了,Pouya