bluetooth bluetooth-lowenergy beagleboard bluez gatt

bluetooth - ¿Crear un servidor Gatt?



bluetooth-lowenergy beagleboard (3)

Tengo una pregunta más amplia aquí, por lo que si alguien me señalara un documento o artículo que pudiera explicar esto, eso sería suficiente. No hace falta decir que un día de googlear no me ha llevado a ninguna parte, y podría ayudarles.

Me estoy conectando a un BeagleBoard con BlueZ 5.9, y mi intención es:

  1. Crear un servidor Gatt,
  2. Cárgalo con algunos atributos de escritura, y
  3. Anuncie ese servidor para conectarse a un dispositivo Android.

He creado la aplicación de Android que se conectará y operará como central, lo que hace que 3 se complete básicamente. No sé cómo los comandos, las cosas literales que hay que escribir, para iniciar un servidor Gatt / crear atributos en el BeagleBoard. Sabía que el hardware es grande, por lo que es posible que tenga mi terminología completamente incorrecta, dicho esto, cualquier ayuda se agradecería al completar 1 y 2, incluso si es un empujón en la dirección correcta. ¡Gracias!


Checkout bleno , es una biblioteca de pila de periféricos BLE que creé para node.js recientemente. Actualmente es compatible con Linux (probado con BlueZ 4.101) y OS X 10.9.

Hay ejemplos de cómo usarlo here y here .


La clave para personalizar el servicio gatt es el programa demonio bluetoothd de bluez.

He descrito cómo personalizar un servicio de Gatt en mi blogger , por favor verifíquelo.


Su terminología es principalmente correcta.

Normalmente, una base de datos GATT tiene los servicios 0x1800 (acceso genérico) y 0x1801 (atributo genérico) al menos. El servicio de acceso genérico contiene dos características obligatorias: nombre del dispositivo y Appearance . El servicio de atributo genérico debe estar vacío.

Por lo tanto, la base de datos mínima del GATT se ve así:

Handle Description 0000 Service: Generic Access (1800) 0001 Characteristic: Device Name (2A00, readable) 0002 Characteristic Value (string) 0003 Characteristic: Appearance (2A01, readable) 0004 Characteristic Value (16bit enum) 0005 Service: Generic Attribute (1801)

Después de estos dos servicios, puede agregar sus propios servicios. En su caso, no parece apuntar a un servicio conocido, por lo que creará uno propio.

Primero, cree un UUID de 128 bits, por ejemplo, utilizando la herramienta uuidgen en la línea de comandos de su Mac

$ uuidgen DCDF2725-56C8-4235-A4BC-F7951D5C3762

Este será tu servicio UUID.

0006 Service: Custom defined Service (DCDF2725-56C8-4235-A4BC-F7951D5C3762)

Luego, mencionaste que quieres varias características de escritura. Entonces, vamos a crear otro UUID para ese.

$ uuidgen 4C06C6F4-C90D-4C58-8E31-20C8C74FF832

Y añadir una característica al servicio.

0007 Characteristic: Custom Characteristic (4C06C...FF832, writeable) 0008 Characteristic Value (hex, 20 bytes)

Su valor característico no debe exceder los 20 bytes, y debe seleccionar "Escribir solicitud" para asegurarse de que las confirmaciones de escrituras se envíen a la central. Si selecciona "Comando de escritura", las escrituras pueden ser descartadas por la pila de su teléfono o por el periférico.

Una vez que haya definido esta característica, estará listo para comenzar la codificación.

No conozco el SDK de BeagleBoard, pero por lo general, comienza iniciando la biblioteca GATT y módulos adicionales (por ejemplo, para admitir escrituras, debe inicializar una segunda parte de la biblioteca).

Después de esta inicialización, usted registra su base de datos GATT. Si no tiene una buena herramienta para generar los datos binarios, puede que tenga que escribirlos usted mismo. Eso se explica en el Bluetooth Core Spec V4.0 . Esperemos que puedas encontrar una API que haga la transformación por ti :-)

Cuando el registro sea exitoso, tendrá que establecer los parámetros de publicidad y podrá comenzar a publicitar (consulte la documentación y las muestras de su SDK para esto, nuevamente).

Lo que sucede ahora es que, en algún momento, recibirá una devolución de llamada de que se ha establecido una conexión y, más adelante, obtendrá una solicitud de atributo para un identificador determinado. Luego, solo tiene que procesar la solicitud mirando el identificador, el valor suministrado y el tipo de operación (lectura / escritura). No olvide devolver siempre un valor de éxito o un código de error en respuesta a la solicitud, de lo contrario, bloqueará las comunicaciones de Bluetooth.

Normalmente, esos chips Bluetooth siempre funcionan con operaciones asíncronas. Enviará una solicitud y luego tendrá que esperar hasta que la solicitud se complete antes de enviar la siguiente. Recuerda que al programar, te ahorra tiempo :-).

Si quieres probar Android primero porque es más familiar para ti, puedes probar el Galaxy S 4 con Android 4.2. También tiene un modo periférico LE, aunque no he probado su confiabilidad. La pila de teléfonos inteligentes más confiable en este momento para actuar como periférico LE está actualmente en iOS 7, por lo que puede valer la pena comprar un iPod touch si es asequible jugar con él.