Esta es la aplicación Swift para iOS (integrada en XCode 6.1.1) que se proporciona como ejemplo para los desarrolladores interesados en el ecosistema Kardia.io. Actualmente está codificado para conectarse y leer datos de las unidades RedBearLabs Blend Micro que están cargadas con el firmware recomendado por el sitio web de RedBearLabs. Programamos estas unidades para emitir datos simulados que simulan un trazo de ECG real. Esta aplicación conecta el teléfono al dispositivo y transmite los datos que se emiten a los servidores (node.js y python) en Kardia.io. La aplicación también escucha y muestra los análisis provenientes de los servidores.
Clona el repositorio y ábrelo en XCode. Cargue la aplicación en su teléfono. La aplicación se conectará automáticamente a unidades BLE cercanas con el servicio apropiado y los UUID característicos (ver a continuación) y comenzará a transmitir datos a kardia.io. Los datos analizados regresan a la aplicación en tiempo real. Cualquier evento anormal (arritmia) se registrará en la vista de tabla a la que se puede acceder deslizando el dedo hacia la izquierda o hacia la derecha. Estos eventos se pueden eliminar tirando de ellos hacia la izquierda.
La aplicación busca el UUID de servicio 713D0000-503E-4C75-BA94-3148F18D941E que contiene el UUID característico 713D0002-503E-4C75-BA94-3148F18D941E que corresponde a los datos que emite el Arduino. Estos valores están definidos en el firmware de Blend Micro vinculado en el sitio web de RedBearLabs.
Una vez que la aplicación se conecta a un dispositivo BLE (consulte a continuación una breve explicación), registra un oyente para detectar cambios en el estado de las características de datos del hardware. Estos datos se interpretan como un flotante y se pasan a dos funciones de devolución de llamada. Uno lo agrega a un búfer de puntos de datos recientes para representarlos en el gráfico. El otro lo emite como un evento de socket. Se emite como un objeto JSON con las claves "amplitud" y "tiempo" correspondientes al valor recibido del hardware y la hora ISO8601 en que se emitió el evento del socket, respectivamente.
La aplicación también escucha las respuestas del servidor, que son objetos JSON que tienen claves "heartRate" (que se explica por sí mismo) y "statusCode". El código de estado se busca en un diccionario definido en ViewController.swift y se traduce a la vista principal como statusView.
Usamos la biblioteca SocketIOClient, que envuelve la biblioteca Objective-C Socket Rocket. Se utilizan los siguientes eventos:
Usamos la biblioteca Swift-Linechart para representar los trazos de ECG en vivo. No cubría del todo nuestras necesidades por lo que lo modificamos de la siguiente manera:
Cuando la aplicación registra una nueva anomalía, la registra en el arrhythmiaTimes global, que sirve como fuente de datos para la vista de tabla. "Reciente" en este caso significa que un evento solo se registra si el estado que informa el servidor cambia a un evento anormal (en este caso, arritmia), de modo que no se registren todos los eventos de arritmia repetidos.
Consulte la sección de problemas de este repositorio.
Aquí hay un buen tutorial sobre cómo conectar un dispositivo BLE a un dispositivo iOS usando Swift. En resumen, la aplicación comienza a buscar periféricos Bluetooth que anuncien un UUID de servicio específico. Cuando encuentra uno, se conecta y busca un UUID característico específico. Si lo encuentra, comienza a escuchar esos datos.
Cada vez que es necesario actualizar la vista, debe ejecutar ese código en el hilo principal (UI). Es por eso que verás bloques de código como este:
dispatch_async(dispatch_get_main_queue()) {
// UI-updating code goes here
}
Los eventos son manejados por NSNotificationCenter: registrar oyentes y activar eventos se explica por sí mismo. Aquí hay una traducción rápida de términos de Swift: Javascript:
Ejemplo:
foo.on('bar', doAThing)
se convierte
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("doAThing"), name: "bar", object: nil)
Las funciones pueden tener el mismo nombre siempre que tengan parámetros diferentes; esto sucede a menudo con los protocolos.
Las vistas se pueden crear y restringir en Main.storyboard o mediante programación en código. Esta aplicación usa una combinación de los dos: la vista principal está hecha en el último estilo, mientras que la vista de tabla usa el primero.