首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Linux中,我们如何从蓝牙信标(具体地说是estimote)获取RSSI值?

在Linux中,我们如何从蓝牙信标(具体地说是estimote)获取RSSI值?
EN

Stack Overflow用户
提问于 2017-04-10 01:54:37
回答 1查看 2.4K关注 0票数 1

我需要获得与多个蓝牙信标的距离以进行三角测量,以便我可以进行室内定位。我已经尝试给出尽可能多的相关细节。这个项目是针对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>连接到其中一个信标,因此接下来,我再次尝试使用其他两种方法进行连接:

当我可以确定hci0已启动时,返回错误Can't connect RFCOMM socket: Host is downrfcomm connect 0 <address of beacon> 10

然后我尝试了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)

然后我读到我需要使用来自Bluetooth LE on Raspbianhttps://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>了错误,错误是这样的:

代码语言:javascript
代码运行次数:0
运行
复制
hcitool rssi F1:15:A7:E3:17:63
Get connection info failed: No such file or directory

我还没有找到一个合适的解决方案。

我尝试了另一种读取RSSI值的方法,结果如下:

代码语言:javascript
代码运行次数:0
运行
复制
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个字节呢?

与信标保持距离一直困扰着我,占用了我大量的时间。在这个问题上请帮帮我。如果你能帮我找到一个资源来帮助我做到这一点,我将非常感激。

EN

回答 1

Stack Overflow用户

发布于 2017-10-24 20:31:02

您不需要连接到设备来获取信号强度RSSI值,只需使用以下代码并通过管道将其连接到从您要获取的设备中提取值的脚本即可:

代码语言:javascript
代码运行次数:0
运行
复制
btmon &
hcitool lescan --duplicates
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43310003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档