我需要获取多个蓝牙信标的距离以进行三角测量,以便我可以进行室内定位。我已尽力提供尽可能多的相关细节。这个项目是针对 RPi 的,但我目前正在尝试先通过我的笔记本电脑对其进行测试。我已经尝试了在互联网上可以找到的大部分内容:
我能找到获取 RSSI 值的最佳方法是hcitool rssi <address of beacon>
为了测试这一点,我尝试先在我的手机上安装它。这显示了 ” Not Connected
”。我想我需要先连接,所以我尝试了很多方法来连接我的手机:
A)hcittol cc <address of mobile>
b)gatttool -b <address of mobile> -t random --interactive
C)rfcomm connect 0 <address of mobile> 10
在每种情况下,当我在手机中单击“配对”时,连接都会终止。
然后,我以通常的方式从蓝牙菜单配对我的手机,然后尝试hcitool rssi <Address of mobile>
最终返回一个值-8
。
现在我的手机有了它,我现在转向信标。
然后,我对我的信标进行了同样的尝试。这次我必须首先获取可用信标的地址,然后使用返回错误的hcitool lescan
命令连接到其中一个信标
所以接下来,我再次尝试使用其他两种方式进行连接:hcitool lecc <address of beacon>
Could not create connection: Connection timed out
rfcomm connect 0 <address of beacon> 10
Can't connect RFCOMM socket: Host is down
当我确定 hci0 已启动时,它返回了错误。
然后我尝试sudo gatttool -b F1:15:A7:E3:17:63 --interactive
打开交互模式并发出命令connect
。这在之后给出了不同的错误Attempting to connect to <address of beacon>
,主要connect error : Connection timed out
是和Error: connect error: Connection refused (111)
然后我读到我需要使用-t random
/sf/ask/1554965541/ 、https://ubuntuforums.org/showthread.php?t=2204808和我可以使用的另一个来源现在找不到。
所以我输入了sudo gatttool -b F1:15:A7:E3:17:63 -t random --interactive
其中当我发出connect
命令时,我收到错误Error: connect error: Device or resource busy (16)
,有时也收到错误Error: connect error: Input/Output Error
然后我读到我可能需要重新启动我的 hci0 hciconfig hci0 down
,然后hciconfig hci0 up
就成功了,信标现在已连接。
但随后,在显示“GLib-WARNING **:无效的文件描述符”后,它很快就断开了。
` 我在这里读到https://raspberrypi.stackexchange.com/questions/53982/how-to-fix-gatttools-glib-warning-invalid-file-descriptor这是因为连接不良。我尝试让信标靠近一点,但效果还是一样。
因此,我试图在连接的短时间内至少获得一个 RSSI 值。但是,即使它是这样连接的,我也犯了hcitool rssi <address of beacon>
这样的错误:
hcitool rssi F1:15:A7:E3:17:63
Get connection info failed: No such file or directory
Run Code Online (Sandbox Code Playgroud)
对此我还没有找到合适的解决方案。
我尝试了另一种读取 rssi 值的方法,结果如下:
hcidump -R
HCI sniffer - Bluetooth packet analyzer ver 5.37
device: hci0 snap_len: 1500 filter: 0xffffffffffffffff
> 04 0E 04 01 0B 20 00
> 04 0E 04 01 0C 20 00
> 04 0E 04 01 0C 20 00
> 04 0F 04 00 01 0D 20
> 04 0F 04 00 01 16 20
> 04 0F 04 00 01 13 20
Run Code Online (Sandbox Code Playgroud)
这是断线之前的情况。我在这里读到/sf/ask/2595118011/说要读取第 14 个字节。由于所有这些似乎都是十六进制数字,这意味着每个数字都是 1 个字节。但是这样,我每行只有7个数字,如何读取第14个字节?
与信标保持距离一直困扰着我,并且占用了我很多时间。请帮我解决这个问题。如果您能帮我找到资源来帮助我做到这一点,我将不胜感激。
您的信标可能会主动拒绝您的连接以节省电量,但只是读取您不需要连接的信号强度,因为它们无论如何都应该广播该信息。
我无法让 hcidump 为我提供所需的信息,因此我使用 btmon 并成功从我的 BLE 信标获取 RSSI:
btmon &
hcitool lescan --duplicates
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20791 次 |
最近记录: |