Может ли RaspberryPi с BLE Dongle обнаруживать iBeacons?
Я купил комплект разработчика из Radius Networks
это включает в себя ioGear GBU521 BLE 4.0 dongle
и Raspberry Pi
, Я также купил один из их RadBeacon iBeacons
, Они оба работают так, как рекламируют, но я был немного удивлен тем, что получил.
Я предполагал, что RaspPi
мог обнаружить iBeacons
, Вместо этого комплект настроен для создания iBeacon
, Мой вариант использования заключается в обнаружении, когда forklift
входит в определенную комнату, чтобы я мог отправить им работу. Я думал поставить iBeacon на вилочный погрузчик, а затем поставить RaspPi для поиска iBeacon. И когда был обнаружен iBeacon (вилочный погрузчик), вы можете заключить, что он находится рядом. Я бы подключил RaspPi к LAN
и пусть он передает информацию через REST or similar
, Я знаю, я мог бы поставить подходящий Android or Apple device
и сделать это таким образом, но я не понимаю, почему этот ключ не может обнаружить эти iBeacons
и скажи мне, что их UUID's
являются? Что мне не хватает?
3 ответа
Да! Вы можете использовать Raspberry Pi для сканирования iBeacons. Ниже мы собрали скрипт, который делает это, вы также можете сделать это самостоятельно с помощью этих шагов:
Запустите фоновый процесс, который выполняет сканирование Bluetooth LE:
sudo hcitool lescan --duplicates &
С
--duplicates
настройка сканирования не будет игнорировать несколько пакетов с одного и того же iBeacon.Начать
hcidump
и передайте необработанный вывод в скрипт, который будет фильтровать пакеты iBeacon:sudo hcidump --raw
Фильтрация - это сложная часть, необработанный вывод из hcidump
неправильно отформатирован, а также показывает пакеты, которые не являются передачами iBeacon. Чтобы решить эту проблему, мы создали скрипт фильтра, который построчно считывает выходные данные и отделяет необработанные пакеты от других выходных данных (т. Е. MAC-адресов и т. Д.). Мы провели много исследований в Radius Networks по профилю Bluetooth iBeacon, который мы использовали для идентификации пакетов iBeacon и фильтрации их от пакетов с других устройств.
Мы собрали все это в ibeacon_scan
скрипт, который делает все, включая преобразование необработанных идентификаторов в удобочитаемую форму. Вы можете скачать его здесь. Вскоре мы добавим это в комплект разработчика iBeacon, чтобы добавить возможность сканирования.
Вот пример вывода из скрипта:
$ ./ibeacon_scan
UUID: 74278BDA-B644-4520-8F0C-720EAF059935 MAJOR: 0 MINOR: 73 POWER: -50
UUID: 2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 MAJOR: 1 MINOR: 6 POWER: -59
UUID: E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 MAJOR: 6 MINOR: 9 POWER: -55
Мы также включили -b
опция для простого вывода, которую легко разобрать в других скриптах, вот пример:
$ ./ibeacon_scan -b
2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 1 6 -59
E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 6 9 -55
74278BDA-B644-4520-8F0C-720EAF059935 0 73 -50
Вы можете использовать эту опцию и направить вывод скрипта в ваш скрипт для запуска действий при обнаружении iBeacons с определенными идентификаторами.
РЕДАКТИРОВАТЬ: Мы переработали этот скрипт, чтобы сделать его более отзывчивым и надежным и включили его в последнюю версию комплекта для разработки. Обновление доступно для скачивания здесь.
РЕДАКТИРОВАТЬ 2: Как указал Sai Ramachandran, вы можете дополнить этот сценарий для захвата RSSI каждого пакета iBeacon в дополнение к POWER. Для этого добавьте в скрипт следующие строки:
RSSI=`echo $packet | sed 's/^.\{132\}\(.\{2\}\).*$/\1/'`
RSSI=`echo "ibase=16; $RSSI" | bc`
RSSI=$[RSSI - 256]
и обязательно добавьте RSSI к выводу:
echo "UUID: $UUID MAJOR: $MAJOR MINOR: $MINOR POWER: $POWER RSSI: $RSSI"
Вы правы, что iBeacon Development Kit не предназначен для обнаружения iBeacon - он предназначен для передачи как iBeacon.
Тем не менее, можно обнаружить iBeacons с Raspberry Pi, используя вариацию, предложенную Chris Stratton в своем комментарии. Смотрите ответ моего коллеги jjnebeker, который сделал скрипт, который вы хотите, чтобы вы хотели.
https://github.com/RadiusNetworks/android-ibeacon-service
Используйте это, чтобы обнаружить iBeacons.
Это позволяет устройствам Android использовать iBeacons так же, как устройства iOS. Приложение может запросить получение уведомлений, когда один или несколько iBeacons появляются или исчезают. Приложение может также запросить обновление ранжирования одного или нескольких iBeacons с частотой 1 Гц.