Tabla de contenido:

Cree un rastreador de movimiento portátil (BLE de Arduino a una aplicación personalizada de Android Studio): 4 pasos
Cree un rastreador de movimiento portátil (BLE de Arduino a una aplicación personalizada de Android Studio): 4 pasos

Video: Cree un rastreador de movimiento portátil (BLE de Arduino a una aplicación personalizada de Android Studio): 4 pasos

Video: Cree un rastreador de movimiento portátil (BLE de Arduino a una aplicación personalizada de Android Studio): 4 pasos
Video: Quizá NO TE CONTARON esto de los SENSORES cardiacos de TU SMARTWATCH 2024, Noviembre
Anonim
Cree un rastreador de movimiento portátil (BLE de Arduino a una aplicación personalizada de Android Studio)
Cree un rastreador de movimiento portátil (BLE de Arduino a una aplicación personalizada de Android Studio)

Bluetooth Low Energy (BLE) es una forma de comunicación Bluetooth de baja potencia. Los dispositivos portátiles, como las prendas inteligentes que ayudo a diseñar en Predictive Wear, deben limitar el consumo de energía siempre que sea posible para prolongar la vida útil de la batería y utilizar BLE con frecuencia. El Grupo de Interés Especial de Bluetooth (SIG) define varias especificaciones que un dispositivo debe implementar para interactuar con un dispositivo Bluetooth, que denominan "perfiles". La mayoría de los perfiles de aplicaciones utilizan el perfil de atributo general (GATT) para enviar datos a través de un enlace BLE. Hay tres conceptos fundamentales en BLE: perfiles, servicios y atributos.

Bluetooth SIG ha estandarizado muchos perfiles, servicios y atributos comunes. Sin embargo, al crear hardware personalizado, a menudo es necesario crear servicios y atributos personalizados y no hay muchos tutoriales disponibles. Para hacer las cosas más difíciles, Adafruit no proporciona ninguna guía sobre el diseño de aplicaciones móviles para emparejar con sus módulos BLE y el código fuente de sus aplicaciones es difícil de aplicar ingeniería inversa.

Este tutorial tiene como objetivo explicar:

  1. Cómo diseñar servicios y características personalizados del GATT
  2. Cómo programar Adafruit Bluefruit LE SPI Friend para que actúe como servidor GATT para estos servicios y características personalizados
  3. Cómo programar un dispositivo Android para que actúe como cliente GATT para leer los datos del servidor GATT

Este tutorial no está destinado a ser traducido a una aplicación lista para producción; esto es simplemente una introducción a BLE.

Lectura de antecedentes:

  • Documentación de Adafruit Bluefruit LE SPI Friend
  • Si no está familiarizado con GATT o BLE

Suministros

  • 1x - Un dispositivo Arduino (estoy usando UNO para este tutorial)
  • 1x - Amigo de Adafruit Bluefruit LE SPI
  • 8x - cables de puente macho a macho
  • Equipo de soldadura básico (para soldar los pines del cabezal en el SPI Friend)
  • Una computadora (para programar el dispositivo Arduino y el dispositivo Android)

Paso 1: Diseño de servicios y características personalizados

INTRODUCCIÓN

Este artículo hace un gran trabajo al explicar cómo diseñar servicios y características personalizados. Recomiendo mucho leer este artículo. A continuación, proporciono una descripción general muy simple que descuida las sutilezas en favor de la simplicidad.

Los servicios del GATT son una colección de características.

Las características del GATT contienen una propiedad, un valor y cero o más descriptores.

  • Propiedad: cómo los datos deben ser manejados por el cliente (aplicación de Android) p. Ej. leer, escribir, escribir sin respuesta, notificar e indicar.
  • Valor: el valor real de la característica, p. Ej. 1089
  • Descriptores: esta es información sobre el valor, p. Ej. la unidad, milisegundos

DISEÑO

Bien, ahora que sabe qué son los servicios y las características, necesitamos descubrir cómo diseñar algunos servicios y características para obtener nuestros datos personalizados y enviarlos desde nuestro servidor GATT (Arduino) al cliente (Aplicación de Android). Consideremos un dispositivo Arduino que está recopilando datos de un módulo de acelerómetro-giroscopio (AGM). Queremos recopilar mediciones de giroscopio y aceleración de tres ejes espaciales y el momento en que se tomaron estas mediciones y transmitir estos datos a nuestra aplicación móvil. También queremos saber cuándo debemos cargar el dispositivo, por lo que queremos leer el nivel de la batería y transmitirlo a nuestra aplicación móvil.

1. ¿Podemos utilizar alguno de los servicios y características estándar?

Bluetooth SIG ha estandarizado muchos servicios y características comunes. Primero, verifíquelos para ver si puede incorporar alguno de los servicios y características estandarizados. Los servicios y características estándar pueden utilizar paquetes de datos mucho más pequeños, ya que el Identificador único universal (UUID) son de 16 bits, mientras que los servicios y características personalizados deben utilizar 128 bits para sus UUID. Más sobre los UUID más adelante. De nuestra búsqueda, encontramos un "servicio de batería" estandarizado que contiene un "nivel de batería" característico.

2. Separe todos los valores de datos que desea enviar a través de BLE en características y servicios

Podemos dividir nuestros puntos de datos personalizados en siete características personalizadas dentro de un servicio personalizado. A este servicio lo llamaremos "servicio AGM". Contendrá 7 características: aceleración x, aceleración y, aceleración z, giroscopio x, giroscopio y, giroscopio z y una referencia de tiempo.

3. Determine las propiedades necesarias para cada característica

Hay varias propiedades que puede tener una característica.

  1. Leer: el cliente (aplicación de Android) puede leer un valor del servidor GATT (Arduino)
  2. Escritura: el cliente puede cambiar un valor del servidor GATT
  3. Indicar: se notificará al Cliente si un valor cambia del Servidor GATT y se espera que el Cliente envíe una confirmación al Servidor GATT
  4. Notificar: se notificará al Cliente si un valor cambia desde el Servidor GATT y no se espera que el Cliente envíe una confirmación al Servidor GATT.

Para este tutorial, configuraremos todas nuestras características para leer, con la excepción del nivel de batería, que tendrá propiedades tanto de notificación como de lectura.

4. Genere UUID para servicios y características personalizados y encuentre UUID estándar

Como mencioné brevemente anteriormente, los servicios y características estandarizados de Bluetooth SIG utilizan un UUID de 16 bits, mientras que los servicios y características personalizados utilizan UUID de 128 bits. Por ejemplo, vea el número asignado al servicio de batería en el Bluetooth SIG. El número asignado 0x180F representa el UUID de 128 bits "0000180F-0000-1000-8000-00805F9B34FB". Los cuatro dígitos (16 bits) en negrita son exclusivos del servicio o característica estandarizada particular, mientras que los otros caracteres se conservan entre todos los servicios y características estandarizados. Dado que tanto el cliente como el servidor del GATT saben que los servicios y características estandarizados solo varían según los dígitos en negrita, el tamaño de los paquetes de datos puede reducirse sustancialmente. Sin embargo, los servicios y características personalizados no pueden operar bajo este mismo supuesto.

En cambio, los servicios y características personalizados deben utilizar UUID de 128 bits no abreviados. Aquí hay un generador de UUID en línea. Cualquier UUID que no sea el UUID estandarizado es aceptable para un UUID personalizado. Sin embargo, una convención de nomenclatura típica es indicar un servicio personalizado 00000001-… y características dentro de ese servicio personalizado 00000002-…

Aquí hay una hoja de cálculo resumida de los servicios y características que implementaremos junto con sus UUID

Paso 2: Código Arduino

ACTUALIZAR EL BLUEFRUIT LE SPI FRIEND

Primero, conecte Adafruit Bluefruit LE SPI Friend como especifican en su guía de conexión y encienda el dispositivo Arduino. Asegúrese de que puede encontrar Adafruit Bluefruit LE SPI Friend en su dispositivo Android cuando busque dispositivos Bluetooth. Descargue la aplicación Bluefruit Connect, conéctese al Adafruit Bluefruit LE SPI Friend y permita que actualice el firmware en el dispositivo. Este paso es importante. Si no actualiza el firmware, los comandos que emite al dispositivo a través de Arduino probablemente fallarán y no habrá un error obvio para que descubra cuál es el problema.

Aquí mi repositorio para este proyecto. Puedes ver el código completo de Arduino aquí.

VISIÓN DE CONJUNTO

Algunas cosas importantes a tener en cuenta:

  1. En el método setup (), todos los UUID personalizados deben contener "-" entre cada dos caracteres. Por ejemplo, "AT + GATTADDCHAR = UUID128 = 00-00-00-05-62-7E-47-E5-A3-FC-DD-AB-D9-7A-A9-66" funcionará. "AT + GATTADDCHAR = UUID128 = 00000005-627E-47E5-A3fCDDABD97AA966" no funcionará.
  2. Tenga en cuenta que en el método setup (), "battery.begin (true);" llama a "ble.reset ();" automáticamente. Si no usa el servicio de batería como yo, necesita restablecer el módulo ble (use "ble.reset ();") donde tengo el comando "battery.begin (true);".
  3. En el método setup (), cambie "if (! Ble.begin (false))" por "if (! Ble.begin (true))" si desea depurar.

Este código se explica por sí mismo. Incluí descripciones de cada método personalizado. El método de configuración prepara el módulo BLE para actuar como servidor GATT. El método de bucle pasa por un barrido falso del módulo de giroscopio acelerómetro (AGM) y genera un número aleatorio del 1 al 100 para estos valores. La batería se agota en un 1% para simular el uso de la batería. Puede reemplazar este código con los valores reales del sensor fácilmente. Este código asume que transmitirá una matriz de datos AGM, 6 mediciones de largo, en lugar de una sola medición, ya que analizar una ventana de datos AGM es probablemente más útil que un solo punto de datos. Si modifica el tamaño de la matriz, tenga en cuenta que se requerirán cambios en el código de estudio de Android. Para capturar una matriz de datos, debe pasar un contador junto con los datos que desea enviar. Este contador le permite encontrar dónde se encuentra en la ventana desde la aplicación de estudio de Android para que pueda esperar a escuchar los puntos de datos que faltan en la ventana. Sin el contador o con una matriz de tamaño diferente, el proyecto de estudio de Android perderá puntos de datos o se atascará en un bucle esperando los puntos de datos restantes que espera.

Paso 3: Código de Android Studio

Aquí mi repositorio para este proyecto. Puedes ver el código completo de Android Studio aquí.

VISIÓN DE CONJUNTO

Seguiré actualizando esto con una descripción más completa de cómo funcionan en detalle el código arduino y android … La aplicación es completamente funcional, así que siéntase libre de mirar el código usted mismo mientras tanto.

Paso 4: Aplicación final

Aplicación final
Aplicación final
Aplicación final
Aplicación final
Aplicación final
Aplicación final

¡Felicidades! Su aplicación se descarga a su teléfono y su dispositivo portátil se carga y transmite datos.

INICIAR LA APLICACIÓN

Para comenzar, haga clic en el icono de inicio de la aplicación.

OTORGAR PERMISOS

Deberá aprobar el uso de algunos permisos para que la aplicación funcione correctamente.

ESCANEAR DISPOSITIVOS

A continuación, haga clic en el botón "Escanear" en la esquina superior izquierda de la aplicación.

SELECCIONE SU DISPOSITIVO QUE SE PUEDE USAR

A continuación, seleccione su dispositivo portátil de la lista de dispositivos BLE disponibles. Su nombre es "BLE Arduino Hardware". OBTENGA DATOS Espere mientras la aplicación obtiene los datos AGM y determina dónde está el usuario quieto o en movimiento. VER TUS RESULTADOS ¡Mira los resultados en la pantalla! Haga clic en el botón de sincronización para obtener otra lectura de datos.

Recomendado: