树莓派 iBeacon 无法检测到。

6
我最近在尝试将iBeacon配置到树莓派上的BLE dongle(剑桥硅谷)上。 参考资料:http://developer.radiusnetworks.com/2013/10/09/how-to-make-an-ibeacon-out-of-a-raspberry-pi.html 我收到了以下消息:
HCI Command: ogf 0x08, ocf 0x0008, plen 44
  1E 02 01 1A 1A FF 4C 00 02 15 E2 C5 6D B5 DF FB 48 D2 B0 60
  D0 F5 A7 10 96 E0 00 00 00 00 C9 00 00 00 00 00 00 00 00 00
  00 00 00 00
> HCI Event: 0x0e plen 4
  01 08 20 12

应用程序甚至无法定位信标。虽然我可以看到在这个命令上闪烁一些光的插头:

sudo hciconfig hci0 leadv 0

但是没有任何东西被检测到。

所以去AppStore下载一个名为LIGHTBLUE的应用程序,它使用不同的UUID检测到蓝牙。

我已经尝试了多次。并完成了教程中的所有步骤。但是这个蓝牙设备就是不会出现。

此外,我想知道0x08和0x0008是什么,如果我想投射其他UUID应该怎么做?但这是后话...

现在,蓝牙不会将Estimote UUID投射为Radius Networks'教程中所说。

希望能尽快收到回复。

我写的命令(在此之后,由于无法正常工作,我将功率更改为C9):

$ sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00 00 00 00 00 00 00 00 00 00 00 00 00

令人惊讶的是,错误为:Error: Invalid HCI Command Parameters。为什么是无效的?是因为CSR支持128位而不是64位十六进制数吗?

谢谢!


它是否能够使用教程中提供的确切UUID正常工作,或者您看到了相同的结果? - davidgyoung
嗨!不行,什么都不起作用,我甚至尝试将Bluez从5.8更新到5.11;现在完全困惑了。顺便说一句,我正在使用CSR(剑桥硅谷4.0)。这有影响吗? - Videep Mishraa
你说的“我把电源改成了C9”是什么意思?你在hcitool命令中改变了什么东西吗? - Tim Tisdall
Tim:是的,我把c5改成了c9(如果你在博客上检查启动脚本,应该就是这个功率)。 - Videep Mishraa
6个回答

11

我看到和memoryhole一样的问题,需要删除多余的零。 在配置广告数据之前,我还需要启用广告功能,以便在我的dongle上正常工作。

以下是对我有效的确切序列/命令:

sudo hciconfig hci0 up
sudo hciconfig hci0 leadv 3
sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00

这是我版本的Radius脚本最终的样子:

#!/bin/sh
. ./ibeacon.conf
echo "Launching virtual iBeacon..."
sudo hciconfig $BLUETOOTH_DEVICE up
sudo hciconfig $BLUETOOTH_DEVICE leadv 3
sudo hcitool -i $BLUETOOTH_DEVICE cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 $UUID $MAJOR $MINOR $POWER 00
echo "Complete"

这是在一个树莓派上使用了品牌为ORICO BTA-402-BK的BLE dongle (CSR8510 A10)。

(我原本想留言,但是声望不够)


3

我还有一个在香港购买的基于CSR的USB Dongle。将额外填充物去掉后,我成功使用了LE设置广告数据命令。根据蓝牙4.0规范,数据字段应为31个八位字节长。我不确定为什么Radius Networks教程添加了额外的零。请尝试以下操作:

$ sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00

注意:我没有在树莓派上运行这个程序,而是在装有bluez-4.98的Ubuntu 12.04笔记本电脑上运行的。

有趣。我是教程的共同作者。如果有人能够确认这个方法可行,我很乐意更新。添加额外的零的原因是因为当我们对iPad作为iBeacon传输时进行BLE嗅探时,我们确切地看到了这一点。我甚至没有阅读规范来验证广告是否格式正确。也许CSR只是对合规性挑剔而已。 - davidgyoung
同样的问题。多余的00不行。我移除了00后就可以运行了:sudo hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 $UUID $MAJOR $MINOR $POWER,然后在配置文件中导出POWER="C5 00"。我使用了亚马逊上售价11美元的CSL dongle。 - woens

2
我从亚马逊购买了一些东西:

http://www.amazon.de/CSL-Bluetooth-Adapter-Technologie-neuester-Standard/dp/B00C68IQ3C

起初按照Radius教程操作时,无法使其正常工作。在另一个窗口中运行hcidump命令时,给出了一个错误消息:
> HCI Event: Command Complete (0x0e) plen 4
    LE Set Advertising Data (0x08|0x0008) ncmd 1
    status 0x12
    Error: Invalid HCI Command Parameters

在去掉 hcitool 命令末尾多余的 00 后,它可以正常工作。我的配置文件如下:

export BLUETOOTH_DEVICE=hci0
# E2C56DB5-DFFB-48D2-B060-D0F5A71096E0
# export UUID="e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0"
export UUID="92 77 83 0A B2 EB 49 0F A1 DD 7F E3 8C 49 2E DE"
export MAJOR="00 00"
export MINOR="00 00"
export POWER="C5 00"

请注意POWER中额外的00!这两个额外的00非常重要。

我的beaconstart脚本如下:

#!/bin/sh
. ./ibeacon.conf
echo "Launching virtual iBeacon..."
sudo hciconfig $BLUETOOTH_DEVICE up
sudo hciconfig $BLUETOOTH_DEVICE noleadv
sudo hciconfig hci0 noscan
sudo hciconfig $BLUETOOTH_DEVICE leadv 3
sudo hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 $UUID $MAJOR $MINOR $POWER
# sudo hciconfig $BLUETOOTH_DEVICE leadv 3
echo "Complete"

在尝试和错误的过程中,我还添加了noscan并将leadv 3放在hcitool命令的前面。但只有在删除额外的00后,它才开始工作。


0
HCI Event: 0x0e plen 4 01 08 20 12

翻译为:设置广告数据命令已经以错误码0x12“无效的HCI命令参数”完成运行。

ogf 0x08, ocf 0x0008是设置广告包数据的命令,因此您需要更改该命令的参数以修改UUID。您需要更改与UUID对应的十六进制字符串部分。请注意以下内容:

sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00 00 00 00 00 00 00 00 00 00 00 00 00

iBeacon广播配置文件UUID E2C56DB5-DFFB-48D2-B060-D0F5A71096E0,主要为0,次要为0

你确定你有一个蓝牙4.0的适配器吗?你输入的确切命令是什么?(将其复制粘贴到你的问题中)


嗨,是的,我有一款剑桥硅谷(CSR)4.0的设备。 我们需要知道什么:1)广告模式开关?2)将设备设置为从机还是主机?我对这个设备和UNIX编程都非常陌生。在使用CSR时应该注意什么? - Videep Mishraa
“0x08 0x0008” 是用于设置LE广告数据,但不会打开/关闭它。如果您直接从该主机网站剪切并复制了该命令,则应该可以正常工作。您能否尝试使用另一个适配器?中国公司制造有缺陷的假CSR适配器非常普遍(我曾购买过)。 - Tim Tisdall
我订购了另一个dongle,据说将在周一发货!一旦我尝试过它,我会更新状态。也许客服代表不是真正的。感谢您的帮助。 - Videep Mishraa
嗨,Tim,我对HCI事件中代码的含义很好奇。我发现0x12是核心规范中的无效HCI命令参数。但是,在0x12之前的0x20代表什么意思呢?我在https://stackoverflow.com/questions/61415732/raspberry-pi-bluetooth-hci-event-code-meaning上提出了这个问题。你能帮忙吗?非常感谢! - Chang

0

很遗憾,你需要一个不同的蓝牙适配器。已经有其他报告称CSR与树莓派上的Bluez堆栈不适用于iBeacon广告。请参见此处此处

我已验证使用推荐的IOGear GBU521时,您上面的命令不会出错。


我刚刚用我的假“CSR” dongle尝试了一下,结果得到了与原帖作者相同的错误。我想知道这是否会发生在合法的CSR dongles上。 - Tim Tisdall
Radius Networks没有听说这个与“合法”的CSR dongles兼容的报告。如果我们听到任何相反的消息,我会很乐意将其添加到支持设备页面。 - davidgyoung
我很快就会收到IOGear GBU521 BLE Dongle(星期一),届时我会更新给你。感谢你的帮助。 - Videep Mishraa

0

我使用了树莓派和Inateck csr4b5 BT Dongle(应包含CRS 8510),并遵守了BT规范中31个八位字节的长度,就像memoryhole说的那样,并省略了末尾的额外00八位字节,取得了成功。

编辑:Pearl Dongle Model PX-1632-675和CSL USB Bluetooth Nano Dongle CSL-Nr. 23996也可以使用。

试试看吧。

干杯


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接