2017-04-09 582 views
1

我需要从多个蓝牙信标的距离进行三角测量,以便我可以进行室内定位。 我尽量给尽可能多的相关细节。这个项目是针对RPi的,但我目前正试图首先通过我的笔记本电脑进行测试。我已经试过的大部分东西我可以找到有关这个在互联网上:我们如何在Linux中获取来自蓝牙信标的RSSI值(具体而定)?

我能找到获得的RSSI值的最佳方式是hcitool rssi <address of beacon>

从这里Bluetooth LE Signal Strength Linux

为了测试这一点,我想首先为我的手机获取它。它显示“Not Connected”。我想我需要先连接,所以我试图通过多种方式连接我的手机:

一)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,当我确定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 outError: connect error: Connection refused (111)

然后我读我需要使用-t randomBluetooth LE on Raspbianhttps://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

然后我读,我也许需要通过hciconfig hci0 down然后hciconfig hci0 up其中的伎俩重新启动我的hci0,信标现在已经连接。

但之后,在说出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 

对此我还没有找到一个妥善的解决办法。

我试图读取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个字节?

从信标中获取距离一直困扰着我很多,并且耗尽了我很多时间。请帮我解决这个问题。如果您可以帮助我找到帮助我这样做的资源,我将非常感谢您的帮助。

回答

1

你并不需要连接到一个设备来获取信号强度RSSI值,只需使用下面的代码和管道,为从设备中提取值的脚本你是后:

btmon & 
hcitool lescan --duplicates