raspberry pi - ¿Puede RaspberryPi con BLE Dongle detectar iBeacons?
raspberry-pi (3)
¡Sí! Puedes usar tu Raspberry Pi para escanear iBeacons. Hemos creado un script a continuación que hace esto, también puede hacerlo usted mismo con estos pasos:
Comience un proceso en segundo plano que hace un escaneo LE de Bluetooth:
sudo hcitool lescan --duplicates &
Con la configuración
--duplicates
, el escaneo no ignorará múltiples paquetes del mismo iBeacon.Inicie un
hcidump
yhcidump
el resultado sin procesar a un script que filtrará los paquetes iBeacon:sudo hcidump --raw
El filtrado es la parte difícil, la salida sin procesar de hcidump
no está formateada muy bien y también muestra paquetes que no son transmisiones iBeacon. Para resolver esto, hicimos una secuencia de comandos de filtro que lee en la línea de salida y separa los paquetes sin procesar de la otra salida (es decir, direcciones MAC, etc.). Hemos investigado mucho en Radius Networks en el perfil bluetooth iBeacon , que utilizamos para identificar paquetes iBeacon y filtrarlos de paquetes de otros dispositivos.
Hemos unido todo esto en una ibeacon_scan
comandos ibeacon_scan
que hace todo, incluida la conversión de los identificadores sin procesar a una forma legible por humanos. Puedes descargarlo here . Pronto, incluiremos esto en el kit de desarrollo iBeacon para agregar la capacidad de escaneo.
Aquí hay un ejemplo de la salida del 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
También hemos incluido una opción -b
para salida simple que es fácil de analizar en otras secuencias de comandos, aquí hay un ejemplo:
$ ./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
Puede usar esta opción y canalizar el resultado del script a su script para desencadenar acciones cuando se detectan iBeacons con ciertos identificadores.
EDITAR: hemos modificado esta secuencia de comandos para que sea más receptiva y robusta, y la hemos incorporado a la última versión del kit de desarrollo . La actualización está disponible para descargar here .
EDIT2: Como señaló @sai-ramachandran , puede aumentar este script para capturar el RSSI de cada paquete iBeacon además de POWER. Para hacer esto, agregue las siguientes líneas al script:
RSSI=`echo $packet | sed ''s/^./{132/}/(./{2/}/).*$//1/''`
RSSI=`echo "ibase=16; $RSSI" | bc`
RSSI=$[RSSI - 256]
y asegúrese de agregar RSSI a la salida:
echo "UUID: $UUID MAJOR: $MAJOR MINOR: $MINOR POWER: $POWER RSSI: $RSSI"
Compré un kit de desarrollador de Radius Networks
que incluye un ioGear GBU521 BLE 4.0 dongle
y un Raspberry Pi
. También compré uno de sus RadBeacon iBeacons
. Ambos trabajan como se anuncia, pero estaba algo sorprendido por lo que obtuve.
Supuse que el RaspPi
podría detectar iBeacons
. En cambio, el kit está configurado para crear un iBeacon
. Mi caso de uso es detectar cuándo una forklift
ingresa a una habitación particular para poder enviarles trabajo. Mi idea era poner un iBeacon en la carretilla elevadora y luego poner un RaspPi buscando iBeacons. Y cuando se detectó un iBeacon (montacargas), puede concluir que está cerca. Conectaba el RaspPi a la LAN
y le pedía que comunicara la información a través de REST or similar
. Sé que podría poner un Android or Apple device
adecuado de Android or Apple device
y lograrlo de esa manera, pero no veo por qué este dongle no puede detectar estas iBeacons
y decirme cuáles son sus UUID''s
. ¿Qué me estoy perdiendo?
Tiene razón en que el iBeacon Development Kit no está diseñado para detectar iBeacons, está diseñado para transmitir como iBeacon.
Dicho esto, es posible detectar iBeacons con una Raspberry Pi usando una variación de lo que sugiere @ChrisStratton en su comentario. Vea la respuesta de mi colega que ha hecho un guión para hacer lo que quiera.
https://github.com/RadiusNetworks/android-ibeacon-service
Use esto para detectar iBeacons.
Permite que los dispositivos Android usen iBeacons de manera similar a los dispositivos iOS. Una aplicación puede solicitar recibir notificaciones cuando una o más iBeacons aparecen o desaparecen. Una aplicación también puede solicitar obtener una actualización de rango de uno o más iBeacons a una frecuencia de 1Hz.