Utilizar BlueZ Stack Como Periférico (Anunciante)


  • Objetivo: Utilice BlueZ y un dongle Bluetooth 4LE para crear un periférico que anuncie el equivalente bluetooth de "Hola Mundo".

  • Donde estoy En: Actualmente tengo la configuración y descarga de la pila BlueZ, puedo usar la herramienta hci para reconocer y ver el dongle Bluetooth. He jugueteado con hciconfig leadv pero no estoy entendiendo/entendiendo lo que está pasando.

  • ¿Qué Ayuda Creo que Necesito: Necesito el siguiente paso. Si alguien puede señalarme hacia un buen recurso, guiarme a través de esto, o cualquier cosa, sería muy apreciado. Si tengo que hacer pierna adicional (búsqueda)trabajo puedo pero he rastreado Google y ASÍ con tantos derivados diferentes de esta pregunta como puedo pensar.

*Etiqueté esto como CoreBluetooth también con la esperanza de que tal vez un desarrollador de iOS haya jugado con esto en algún momento.

EDITAR: En respuesta a un comentario, Parece prudente decir lo que mi fin el objetivo es. En última instancia, me gustaría anunciar a través del dongle el más simple de los mensajes/señales simples y recogerlo en un dispositivo iOS (CoreBluetooth). He sido capaz de conseguir el lado de iOS de las cosas que funcionan bien (toneladas de documentación en comparación con el lado de Linux de las cosas), pero que parte difícil para mí es conseguir este adaptador de configuración como un periférico. La pila de BlueZ es un terrible enigma para mí.

EDITAR: Después de más investigación, finalmente me topé con este post: Raspberry Pi Bluetooth 4.0 Conexión. Esto me ha llevado hacia el tema de un servidor GATT, continuaré persiguiendo este tema.

EDITAR: Muy bien, así que mi búsqueda de aprendizaje continúa. En los últimos días he profundizado en las herramientas hci*, sdptool y gatttool. He llegado al punto de poder configurar el adaptador para anunciar, "hciconfig hci0 leadv". En este punto, puedo "ver" con éxito el adaptador, pero en realidad no puedo leer nada de él. Ni siquiera veo el nombre amistoso. Voy a mantener pero como siempre, cualquier ayuda / sugerencia es más que bienvenida.

EDITAR: Enlace relevante, visión general sólida de Bluetooth LE perteneciente a iOS. https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/AboutCoreBluetooth/Introduction.html#//apple_ref/doc/uid/TP40013257-CH1-SW1

ÚLTIMA EDICIÓN: Hola a todos, este enlace cubre cómo crear un iBeacon usando una Raspberry Pi + BlueZ... http://www.wadewegner.com/2014/05/create-an-ibeacon-transmitter-with-the-raspberry-pi/

Author: Cœur, 2013-04-22

2 answers

Con su dongle Bluetooth conectado, ejecutando el siguiente comando le indicará el nombre del dispositivo y le dará su estado:

$ hciconfig

La salida debería ser algo así:

hci0:    Type: BR/EDR  Bus: USB
     BD Address: 00:01:02:aa:bb:cc  ACL MTU: 1021:8  SCO MTU: 64:1
     DOWN
     RX bytes:1000 acl:0 sco:0 events:47 errors:0
     TX bytes:1072 acl:0 sco:0 commands:47 errors:0

Esto indica que el dispositivo se llama hci0 está en un estado inactivo. Emita el siguiente comando para sacarlo:

$ sudo hciconfig hci0 up

Ahora debería verse como:

$ hciconfig
hci0:   Type: BR/EDR  Bus: USB
     BD Address: 00:01:02:aa:bb:cc  ACL MTU: 1021:8  SCO MTU: 64:1
     UP RUNNING
     RX bytes:1000 acl:0 sco:0 events:47 errors:0
     TX bytes:1072 acl:0 sco:0 commands:47 errors:0

A continuación, ejecute el siguiente comando de ejemplo para configurar los datos de publicidad que se enviarán.

$ sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00 00 00 00 00 00 00 00 00 00 00 00 00

Puede cambiar los bytes hexadecimales (comenzando con 1e) para enviar secuencias de bytes diferentes para su anuncio. Uno que literalmente envía los códigos ASCII para "HELLO WORLD" usaría: 48 45 4c 4c 4f 57 4f 52 4c 44 (EDITAR: Pero también tendrá que prefijar este mensaje con un encabezado válido, vea aquí.)

Ahora, use el siguiente comando para activar la publicidad en el dongle, esto comenzará a enviar paquetes "Helo World".

$ sudo hciconfig hci0 leadv 0

EDITAR: lo anterior el comando hace que el servicio anunciado sea conectable. Si no desea permitir conexiones, cámbielo a $ sudo hciconfig hci0 leadv 3

También puede desactivar la publicidad usando el siguiente comando:

$ sudo hciconfig hci0 noleadv

 39
Author: davidgyoung,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:09

Añadiendo más información aquí (ref BlueZ5.x):

  • Bluez no está exponiendo la api DBUS para el registro del servidor gatt; tiene alguna implementación de perfil disponible, pero necesita configurarla y compilarla con la opción enable enable-experimental o enable gatt-example en la carpeta plugin tha tregister algún servidor gatt como ejemplo

  • Cuando se anuncie haciendo hciconfig hci0 leadv preste atención a los datos anunciados. en el siguiente ejemplo para iBeacon

    sudo hcitool -i hci0 cmd 0x08 0x0008 1e **02 01 1a** ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00 00 00 00 00 00 00 00 00 00 00 00 00

    La parte en negrita es para una estructura de ANUNCIOS que se relata al campo flags (verifique bajo especificaciones de bluetooth para el formato de datos de advertisgin). Con esta configuración de banderas, el dispositivo se anuncia a sí mismo como LE y BR-EDR simultáneos.

    En mi experiencia al anunciar de esta manera un dispositivo Android que escanea el dispositivo bluez actuando como periférico BLE activará una conexión a través de bluetooth clásico (debido a la configuración de la bandera) y no a través de BLE (tenga en cuenta que los procedimientos de conexión son diferentes para LE y Classic). No estoy seguro de cómo actúa el dispositivo central de Apple en este caso. De todos modos, para evitarlo, puede establecer 06 en lugar de 1A para que no se anuncie el soporte de BR-EDR. De esta manera verá una conexión sobre BLE.

Si quieres probarlo usando un dispositivo Android central, hay una aplicación nórdica gratuita para eso.

 5
Author: user3891941,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-30 15:12:26