tutorial programming corebluetooth ios bluetooth core-bluetooth bluetooth-lowenergy

ios - programming - xcode bluetooth explorer



Transmisión de datos con CoreBluetooth (3)

Estoy desarrollando una aplicación para iOS con un periférico Bluetooth LE que lo acompaña. El único paso que parece que no puedo resolver es cómo transmitir realmente los datos de mi aplicación al periférico o viceversa.

Lo que he construido hasta ahora es una aplicación de prueba que se puede conectar a mi periférico Bluetooth de muestra y leer todos sus servicios / características / descriptores. Puede alternar notificaciones para una característica dada y escribir en características dadas. Es solo este último paso de "transmitir n bytes al periférico y recibir m bytes desde el periférico" que no puedo entender.

Mirando el Marco de Accesos Externos (lo que usaría si Apple realmente me daría la aprobación de MFi para este proyecto), le dan flujos de entrada y salida en una sesión dada para comunicarse con el accesorio, pero no existe tal objeto para CoreBluetooth.

¿Es esto simplemente un descuido por parte de Apple sobre la funcionalidad de CoreBluetooth? ¿O simplemente necesito desarrollar mi propio perfil de servicio Bluetooth para manejar la entrada / salida de datos hacia y desde el periférico?


LE está diseñado fundamentalmente para trabajar con estos perfiles basados ​​en GATT, que son adecuados para monitorear sensores, no para flujos de datos. Si bien LE permite que se abran nuevas secuencias de L2CAP para protocolos personalizados, CoreBluetooth de Apple no proporciona acceso para hacerlo.


Puede crear un perfil personalizado con características y servicios privados y hacer que funcione como SSP; esa es la forma en que estoy usando mi módulo BLE para obtener datos de algunos sensores en mi aplicación. El módulo que compré (Microchip RN-4020) ya tiene un perfil personalizado hecho específicamente para esto, conocido como MLDP (Microchip Low-Energy Data Profile).

La forma en que obtengo los datos en mi aplicación de iOS es suscribiéndome a la característica privada, por lo que recibo una notificación cuando se actualizan los valores. Hasta ahora, ha funcionado muy bien, y la velocidad de datos puede llegar hasta 20 kbps según Microchip (no he probado sus límites, ya que no necesito mucha velocidad). Aquí hay un enlace a la página del producto de Microchip: http://www.microchip.com/wwwproducts/Devices.aspx?product=RN4020

¡Buena suerte!


Puede usar el ''Servicio de Alerta Inmediato'' de bluetooth.org uuid = 1802 con la característica uuid = 2A06 con propiedad = write_no_response para enviar valores de un byte a su dispositivo periférico desde su iPhone. El dispositivo periférico debe estar programado para actuar sobre los datos que se envían. Por ejemplo, puede usar un botón en una aplicación de iPhone para enviar una dirección hexadecimal que haga que uno o más pines de puerto se enciendan o apaguen en el periférico. Si bien esto no está utilizando el Servicio de Alerta como estaba previsto, proporciona una manera fácil de probar la transferencia de datos a un dispositivo periférico. El mismo proceso podría usarse para enviar bytes de datos secuenciales similares a un flujo de datos en serie. Todavía no he intentado enviar flujos de datos más complejos. El write_no_response no proporciona ningún comentario a la aplicación sobre si los datos fueron recibidos por el periférico.

El IOS TemperatureSensor.xproj es un ejemplo de código para leer datos de temperatura de un periférico. El OSX HealthThermometerClient.xproj tiene el código necesario para decodificar la estructura de datos del termómetro algo complejo. El IOS TI-BLE-Demo.xproj TIBLECBKeyfob.m tiene un código para leer y escribir valores característicos, como la temperatura de lectura o los niveles de batería de un dispositivo periférico.