linux bluetooth core-bluetooth bluetooth-lowenergy bluez

linux - Utilice BlueZ Stack As A Peripheral(Anunciante)



bluetooth core-bluetooth (2)

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

$ hciconfig

El resultado debería verse más o menos 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 que aparezca:

$ sudo hciconfig hci0 up

Ahora debería verse así:

$ 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 publicitarios 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 (empezando por 1e) para enviar secuencias de bytes diferentes para su anuncio. Una que literalmente envíe 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 ponerle un prefijo a este mensaje con un encabezado válido, vea here. ) here.

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

$ sudo hciconfig hci0 leadv 0

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

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

$ sudo hciconfig hci0 noleadv

  • Objetivo : utilizar BlueZ y un dongle Bluetooth 4LE para crear un periférico que anuncie el equivalente bluetooth de "Hello World".

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

  • ¿Qué ayuda creo que necesito ? Necesito llegar al siguiente paso. Si alguien puede indicarme un buen recurso, guiarme a través de esto, o cualquier otra cosa, sería muy apreciado. Si necesito hacer un trabajo adicional en la pierna (búsqueda), puedo, pero he recorrido Google y SO 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 modificado esta tarea en algún momento.

EDITAR: En respuesta a un comentario, parece prudente indicar cuál es mi objetivo final. En última instancia, me gustaría promocionar a través del dongle los mensajes / señales simples más simples y recogerlos en un dispositivo con iOS (CoreBluetooth). Pude hacer que funcionara el lado de iOS (muchísima documentación en comparación con el lado de Linux) pero esa parte difícil para mí es la configuración de este adaptador como un periférico. La pila BlueZ es un enigma terrible para mí.

EDITAR: Después de más excavaciones, finalmente tropecé con esta publicación: Conexión Raspberry Pi Bluetooth 4.0 . Esto me ha llevado al tema de un servidor del GATT, continuaré persiguiendo este tema.

EDITAR: Bien, mi búsqueda de aprendizaje continúa. En los últimos días me he zambullido más en las herramientas hci *, sdptool y gatttool. Llegué al punto de poder configurar el adaptador para publicitar, "hciconfig hci0 leadv". En este punto, puedo "ver" con éxito el adaptador, pero en realidad no puedo leer nada. Ni siquiera estoy viendo el nombre amistoso. Seguiré yendo en camión 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/


agregando más información aquí (ref BlueZ5.x):

  • bluez no está exponiendo la api DBUS para la registración del servidor gatt; tiene alguna implementación de perfil disponible pero necesita configurarla y compilarla con la opción --enable-experimental o activar gatt-example debajo de la carpeta de plugins tha tregister algún servidor gatt como ejemplo

  • cuando anuncias hciconfig hci0 leadv presta 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 AD que se relaciona con el campo de banderas (verifique en bluetooth spec para formato de datos publicitarios). 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 escanee el dispositivo bluez que actúa como periférico BLE activará una conexión sobre Bluetooth clásico (debido a la configuración del indicador) y no sobre BLE (tenga en cuenta que los procedimientos de conexión son diferentes para LE y Clásico). No estoy seguro de cómo actúa el dispositivo central de Apple en este caso. De todos modos, para evitarlo, puede configurar 06 en lugar de 1A para que no se anuncie el soporte BR-EDR. De esta forma, verá una conexión sobre BLE.

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