【问题标题】:How do we get RSSI values from Bluetooth beacons (estimote to be specific) in Linux?我们如何从 Linux 中的蓝牙信标(具体估计)获取 RSSI 值?
【发布时间】: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 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> 错误是这样的:

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


    【解决方案1】:

    您无需连接到设备即可获取信号强度 RSSI 值,只需使用以下代码并将其传送到从您所使用的设备中提取值的脚本:

    btmon &
    hcitool lescan --duplicates
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-04
      相关资源
      最近更新 更多