【发布时间】:2017-09-04 17:17:03
【问题描述】:
我需要从多个蓝牙信标获取距离以进行三角测量,以便进行室内定位。 我试图提供尽可能多的相关细节。该项目适用于 RPi,但我目前正在尝试先通过我的笔记本电脑对其进行测试。我已经尝试了大部分我可以在互联网上找到的关于此的内容:
我能找到的获取 rssi 值的最佳方法是 hcitool rssi <address of beacon>
从这里Bluetooth LE Signal Strength Linux
为了对此进行测试,我首先尝试将它用于我的手机。它显示“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 以获取可用信标的地址
然后使用返回错误Could not create connection: Connection timed out 的命令hcitool lecc <address of beacon> 连接到其中一个信标
所以接下来,我再次尝试连接其他两种方式:
rfcomm connect 0 <address of beacon> 10 当我可以确定 hci0 已启动时返回错误 Can't connect RFCOMM socket: Host is down。
然后我尝试使用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)
然后我读到我需要使用来自Bluetooth LE on Raspbian、https://ubuntuforums.org/showthread.php?t=2204808 的-t random 和另一个我现在找不到的来源。
所以我输入了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
然后我读到我可能需要通过 hciconfig hci0 down 重新启动我的 hci0,然后 hciconfig hci0 up 成功了,信标现在已连接。
但是,在说 `GLib-WARNING **: Invalid file descriptor. 之后,它很快就断开了。
` 我在这里读到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
我还没有找到合适的解决方案。
我尝试了另一种读取 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
这是在断开连接之前。 我在这里读到Obtain RSSI with hcidump,它说要读取第 14 个字节。由于所有这些似乎都是十六进制数字,这意味着每个数字都是 1 个字节。但是这样一来,我每行只有 7 个数字,怎么才能读到第 14 个字节呢?
与信标保持距离一直困扰着我,并且占用了我很多时间。请帮我解决这个问题。如果您能帮我找到资源来帮助我这样做,我将不胜感激。
【问题讨论】:
标签: linux bluetooth bluetooth-lowenergy beacon rssi