2017-04-09 598 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