Мне нужно получить расстояние от нескольких маяков Bluetooth для триангуляции, чтобы я мог делать внутреннее позиционирование. Я попытался дать как можно больше актуальных деталей. Этот проект предназначен для RPi, но в настоящее время я пытаюсь протестировать его через свой ноутбук. Я пробовал большую часть того, что я могу найти в интернете:
. Лучший способ найти значения rssi - hcitool rssi
Отсюда https: // stackoverflow.com/questions/24417017/bluetooth-le-signal-strength-linux
Чтобы проверить это, я сначала попытался получить его для своего мобильного телефона. Он показал «Not Connected». Я думал, что мне нужно сначала подключиться, поэтому я попробовал много способов подключить свой мобильный телефон:
a) hcittol cc
b) gatttool -b
-t random --interactivec ) rfcomm connect 0
10В каждом случае, когда я нажал пару на своем мобильном телефоне, соединение прекратилось.
Затем я спарил свой мобильный обычным способом из меню bluetooth, а затем попытался hcitool rssi
, который затем окончательно вернул значение -8.Теперь, когда я получил его для своего мобильного телефона, я теперь перешел к маякам.
Затем я попробовал то же самое для своих маяков , На этот раз мне пришлось сначала выполнить hcitool lescan, чтобы получить адреса доступных маяков, затем подключиться к одному из маяков, используя команду hcitool lecc
, которая вернула ошибку Could not create connection: Connection timed out. Итак, я снова попытался подключиться двумя другими способами: ! d11]rfcomm connect 0
10, который возвратил ошибку Can't connect RFCOMM socket: Host is down, когда я уверен, что hci0 встал.Затем я попытался с sudo gatttool -b F1:15:A7:E3:17:63 --interactive, после чего открылся интерактивный режим, и я дал команду [F16]. Это дало разные ошибки после Attempting to connect to
, главным образом connect error : Connection timed out и Error: connect error: Connection refused (111)Затем я прочитал, что мне нужно использовать -t random из https://stackoverflow.com/questions/24417017/ bluetooth-le-signal-strength-linux , https://ubuntuforums.org/showthread.php?t=2204808 и еще один источник, который я не могу найти прямо сейчас.
So Я ввел 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
, тогда я прочитал, что мне, возможно, нужно перезапустить hci0 на hciconfig hci0 down и затем hciconfig hci0 up, который сделал трюк, маяк теперь подключился.
Но затем он быстро отключился после того, как сказал «GLib-WARNING **: Недопустимый дескриптор файла.
`Я читал здесь https://ubuntuforums.org/showthread.php?t=2204808 , что это из-за плохих соединений. Я попытался держать маяки ближе, но он сделал то же самое.
Итак, я попытался хотя бы получить хотя бы одно значение rssi в течение короткой продолжительности его подключения. Но, даже когда он был таким образом связан, я сделал hcitool rssi
, что ошибка возникла следующим образом: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
Это было до того, как он отключился. Я читаю здесь https://stackoverflow.com/questions/37073114/obtain-rssi-with-hcidump, который сказал, чтобы прочитать 14-й байт. так как все они представляли собой шестнадцатеричные числа, это означало бы, что каждое число равно 1 байт. Но таким образом, у меня всего 7 чисел в строке, как я могу прочитать 14-й байт?
Получение расстояния от маяков беспокоило меня много, и я потратил много времени. Пожалуйста, помогите мне в этом вопросе. Если вы можете помочь мне найти ресурс, который поможет мне сделать это, я буду благодарен за помощь.
Возможно, ваши маяки активно отказываются от вашего соединения, чтобы экономить электроэнергию, а просто читать уровень сигнала, который вам не нужно подключать, поскольку они должны передавать эту информацию в любом случае.
Я не мог получить hcidump, чтобы дать мне информацию, которую я искал, вместо этого я использовал btmon и имел большой успех, получая RSSI от моих маяков BLE:
btmon &
hcitool lescan --duplicates
Я тестировал sudo btmgmt find и получил значения RSSI.
Редуцированный выход:
hci0 dev_found: xx:xx:xx:xx:xx:xx type BR/EDR rssi -86 flags 0x0003
eir_len 5
(xx заменены на меня)
Проверено на raspi нуль w
Возможно, это то, что вы ищете.
Возможно, ваши маяки активно отказываются от вашего соединения, чтобы экономить электроэнергию, а просто читать уровень сигнала, который вам не нужно подключать, поскольку они должны передавать эту информацию в любом случае.
Я не мог получить hcidump, чтобы дать мне информацию, которую я искал, вместо этого я использовал btmon и имел большой успех, получая RSSI от моих маяков BLE:
btmon &
hcitool lescan --duplicates
Я тестировал sudo btmgmt find и получил значения RSSI.
Редуцированный выход:
hci0 dev_found: xx:xx:xx:xx:xx:xx type BR/EDR rssi -86 flags 0x0003
eir_len 5
(xx заменены на меня)
Проверено на raspi нуль w
Возможно, это то, что вы ищете.
Возможно, ваши маяки активно отказываются от вашего соединения, чтобы экономить электроэнергию, а просто читать уровень сигнала, который вам не нужно подключать, поскольку они должны передавать эту информацию в любом случае.
Я не мог получить hcidump, чтобы дать мне информацию, которую я искал, вместо этого я использовал btmon и имел большой успех, получая RSSI от моих маяков BLE:
btmon &
hcitool lescan --duplicates
Я тестировал sudo btmgmt find и получил значения RSSI.
Редуцированный выход:
hci0 dev_found: xx:xx:xx:xx:xx:xx type BR/EDR rssi -86 flags 0x0003
eir_len 5
(xx заменены на меня)
Проверено на raspi нуль w
Возможно, это то, что вы ищете.