Может ли RaspberryPi с BLE Dongle обнаруживать iBeacons?

Я купил набор разработчика от Radius Networks, который включает в себя ioGear GBU521 BLE 4.0 dongle и Raspberry Pi. Я также купил один из них RadBeacon iBeacons. Они работают как рекламируемые, но я был немного удивлен тем, что получил.

Я предположил, что RaspPi может обнаружить iBeacons. Вместо этого набор настроен на создать a iBeacon. Моим вариантом использования является обнаружение, когда forklift входит в конкретную комнату, поэтому я могу отправить им работу. Моя мысль заключалась в том, чтобы поставить iBeacon на погрузчик, а затем поставить RaspPi для поиска iBeacons. И когда был обнаружен iBeacon (вилочный погрузчик), вы можете сделать вывод, что он находится поблизости. Я бы подключил RaspPi к LAN и передал информацию через REST or similar. Я знаю, что могу поместить подходящий Android or Apple device и выполнить его таким образом, но я не понимаю, почему этот ключ не может обнаружить эти iBeacons и сказать мне, что их UUID's? Что мне не хватает?

Ответ 1

Да! Вы можете использовать свою малину Pi для сканирования iBeacons. Мы собрали ниже script, который делает это, вы также можете сделать это самостоятельно с помощью следующих шагов:

  • Запустите фоновый процесс, который выполняет сканирование bluetooth LE:

    sudo hcitool lescan --duplicates &
    

    При установке --duplicates сканирование не будет игнорировать несколько пакетов из одного и того же iBeacon.

  • Запустите hcidump и подайте исходный вывод на script, который будет фильтровать пакеты iBeacon:

    sudo hcidump --raw 
    

Фильтрация - сложная часть, исходный вывод из hcidump не отформатирован хорошо и также показывает пакеты, которые не являются передачами iBeacon. Чтобы решить эту проблему, мы создали фильтр script, который читает в строке строки за строкой и отделяет необработанные пакеты от другого выхода (т.е. MAC-адреса и т.д.). Мы провели много исследований в Radius Networks на iBeacon bluetooth profile, которые мы использовали для идентификации пакетов iBeacon и отфильтровывали их из пакетов с других устройств.

Мы объединили все это в ibeacon_scan script, который делает все, включая преобразование необработанных идентификаторов в удобочитаемую форму. Вы можете скачать здесь. Вскоре мы добавим это в iBeacon Development Kit, чтобы добавить возможности сканирования.

Здесь приведен пример вывода из script:

$ ./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

Вы можете использовать эту опцию и передать вывод script на ваш script для запуска действий при обнаружении iBeacons с определенными идентификаторами.

EDIT: Мы переработали этот script, чтобы сделать его более отзывчивым и надежным и включили его в последнюю версию комплект разработчика. Обновление доступно для загрузки здесь.

EDIT2: Как указано @sai-ramachandran, вы можете увеличить этот script, чтобы захватить RSSI каждого пакета iBeacon в дополнение к POWER. Для этого добавьте следующие строки в script:

 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"

Ответ 2

Вы правы, что iBeacon Development Kit не предназначен для обнаружения iBeacons - он предназначен для передачи как iBeacon.

Таким образом, можно обнаружить iBeacons с малиной Pi, используя вариацию, которую предлагает @ChrisStratton в своем комментарии. См. Ответ от моего коллеги @jjnebeker, который сделал script, чтобы пожелать.

Ответ 3

https://github.com/RadiusNetworks/android-ibeacon-service

Используйте это для обнаружения iBeacons.

Это позволяет устройствам Android использовать iBeacons, как и устройства iOS. Приложение может запрашивать уведомления, когда появляется или исчезает один или несколько iBeacons. Приложение также может запросить обновление диапазона от одного или нескольких iBeacons с частотой 1 Гц.