Нет простого способа сделать это, потому что единственное, что вы можете измерить, это RSSI.Однако RSSI зависит от разных факторов: от мощности Bluetooth-модуля вашего телефона, чувствительности Bluetooth-адаптера вашего ПК, от количества устройств на 2.4 и многих других.
Однако есть одно более или менее хорошее решение, но оно требуетнекоторое кодирование на стороне телефона.Если ваш телефон поддерживает Bluetooth LE, вы можете запустить приложение, эмулирующее Bluetooth LE Beacon, на свой мобильный.BLE Beacon может отправлять рекламный пакет, который будет включать в себя нечто, известное как «измеренный RSSI».Измеренное значение RSSI представляет собой значение RSSI, измеренное на фиксированном расстоянии.
После этого, когда ваш компьютер (конечно, ваш компьютер также должен иметь возможности BLE) может получить этот пакет рекламы LE.То, что он получил пакет, теперь знает 2 значения RSSI: текущее и «измеренное».Известные оба дают вам способ рассчитать расстояние
double Dist = pow (10.0, (double) (TxRssi - Rssi) / 20.0);
TxRssi - «измеренный» (калиброванный) RSSIзначение измеряется на расстоянии 1 метра.Rssi - текущее значение RSSI.
Еще одно возможное решение: если вы используете Linux на настольном компьютере, вы можете использовать HCI Socket (доступно на github) и расширить его для выполнения HCI INQUIRY с измерением RSSI.Таким образом, может быть достаточно иметь включенный только телефон с Bluetooth (обратите внимание, что современные Android и iOS переключают устройство в режим, недоступный для обнаружения, если настройки Bluetooth не открыты или в течение короткого периода времени, поэтому вам нужно каким-то образом перевести телефон в режим обнаружения навсегда).
С этим (гнездо HCI) вы можете измерить RSSI на фиксированном расстоянии (скажем, 1 метр), а затем сохранить это значение как калиброванное.Затем используйте приведенную выше формулу для расчета расстояния.