Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Medición de la frecuencia cardíaca usando Xiaomi MiBand y BLE

Estoy tratando de implementar sdk simple para trabajar con la pista de fitness Xiaomi Mi banda. Actualmente puedo seguir pasos, accionar la vibración, manejar el tacto del sensor pero tengo un problema con la medición de la frecuencia cardíaca. Mi sdk basado en https://github.com/pangliang/miband-sdk-android . Para medir la frecuencia cardíaca, necesito escribir el descriptor en la característica apropiada para permitir el manejo de la devolución de llamada cuando el valor de esta característica fue cambiado y luego escribir los datos apropiados a la característica del punto de control de la frecuencia cardíaca para iniciar directamente el proceso de medición de la frecuencia cardíaca. El problema es que el proceso de medición de la frecuencia cardíaca no se inició después de que los datos para iniciar este proceso se escribieron con éxito en la característica (cuando la banda Mi comienza a medir la frecuencia cardíaca y el sensor inferior parpadea en verde). Esto puede ser causado por un nuevo firmware del rastreador de fitness (versión de firmware: 4.15.12.10; versión de HeartRate: 1.3.74.64) o hay algunos defectos en mi código:

/-------- MiBandProfile --------/ public static final UUID UUID_SERVICE_HEARTRATE = UUID.fromString("0000180d-0000-1000-8000-00805f9b34fb"); public static final UUID UUID_NOTIFICATION_HEARTRATE = UUID.fromString("00002a37-0000-1000-8000-00805f9b34fb"); public static final UUID UUID_CHAR_HEARTRATE = UUID.fromString("00002a39-0000-1000-8000-00805f9b34fb"); public static final UUID UUID_DESCRIPTOR_UPDATE_NOTIFICATION = UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"); /-------- MiBandProtocol --------/ public static final byte[] START_HEART_RATE_SCAN = {21, 1, 1}; /-------- BleProvider --------/ public class BleProvider extends BluetoothGattCallback { public interface NotifyListener { void onNotify(byte[] data); } private HashMap<UUID, NotifyListener> mNotifyListeners = new HashMap<UUID, NotifyListener>(); . . . public void setNotifyListener(UUID serviceUUID, UUID charaUUID, NotifyListener listener) { //enable chara notofication if (this.mGatt == null || !this.mIsServicesDiscovered) { if (DBG) Log.d(Debug.TAG, "Device is not connected or services are not discovered"); return; } BluetoothGattCharacteristic chara = this.mGatt.getService(serviceUUID).getCharacteristic(charaUUID); if (DBG) Log.d(Debug.TAG, "setCharacteristicNotification: " + this.mGatt.setCharacteristicNotification(chara, true)); BluetoothGattDescriptor descriptor = chara.getDescriptor(MiBandProfile.UUID_DESCRIPTOR_UPDATE_NOTIFICATION); if (DBG) Log.d(Debug.TAG, "setValue: " + descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE)); if (DBG) Log.d(Debug.TAG, "writeDescriptor: " + this.mGatt.writeDescriptor(descriptor)); this.mNotifyListeners.put(charaUUID, listener); } @Override public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) { //this method must be called when the characteristic value was changed but nothing happened :( super.onCharacteristicChanged(gatt, characteristic); if (this.mNotifyListeners.containsKey(characteristic.getUuid())) { this.mNotifyListeners.get(characteristic.getUuid()).onNotify(characteristic.getValue()); } } } //end BleProvider . . . setNotifyListener(MiBandProfile.UUID_SERVICE_HEARTRATE, MiBandProfile.UUID_NOTIFICATION_HEARTRATE, new BleProvider.NotifyListener(){...}); //waiting few seconds writeCharacteristic(MiBandProfile.UUID_SERVICE_HEARTRATE, MiBandProfile.UUID_CHAR_HEARTRATE, MiBandProtocol.START_HEART_RATE_SCAN); 

Tal vez el protocolo está obsoleto y hay personas que pueden compartirme un nuevo protocolo. Estaré muy contento) Gracias.

  • La aplicación de Android se bloquea después de la versión de actualización de las herramientas de SDK (NoClassDefFound, versión de la herramienta 22)
  • Android días restantes
  • Keytool Alias ​​no tiene clave
  • android.support.v4.app.FragmentTransaction necesario
  • Cómo el código fuente de Android minify y ofuscar?
  • Extraer Android .apk y leer el contenido del archivo XML en res / layout
  • Dynamic Spinners - si se selecciona un elemento de un hilandero, ocúltalo de otros hiladores - Android
  • Retrasar la actividad de inicio del receptor en la pantalla apagada
  • 2 Solutions collect form web for “Medición de la frecuencia cardíaca usando Xiaomi MiBand y BLE”

    He resuelto el problema! Antes de llamar a setNotifyListener para realizar un seguimiento del cambio de valor del pulso, debe escribir Información del usuario (edad, peso) a la característica apropiada, porque sin este Mi Band no inicia la medición.

    Im que trabaja con BLE A & D, al obatin el iformation uso:

    Para encontrar UUID

      @SuppressLint("NewApi") private void displayGattServicesService(List<BluetoothGattService> gattServices) { // salida.append("Buscando servicio"); if (gattServices == null) return; for (BluetoothGattService gattService : gattServices) { String uuid = gattService.getUuid().toString(); List<BluetoothGattCharacteristic> gattCharacteristics = gattService .getCharacteristics(); if (uuid.equals("00001810-0000-1000-8000-00805f9b34fb")) { // salida.append("Ecnontro"); for (BluetoothGattCharacteristic gattCharacteristic : gattCharacteristics) { String uuid1 = gattCharacteristic.getUuid().toString(); if (uuid1.equals("00002a35-0000-1000-8000-00805f9b34fb")) { // salida.append("Envio caracterisitca"); mensaje(getResources().getString(R.string.Espere_res)); mBluetoothLeService.setCharacteristicNotification( gattCharacteristic, true); } } } } } 

    Para configurar UUID

     BluetoothLeService.ACTION_GATT_SERVICES_DISCOVERED.equals(action)) { // Show all the supported services and characteristics on the user interface. displayGattServicesService(mBluetoothLeService.getSupportedGattServices()); 

    Utilice el ejemplo de BleGatt https://github.com/googlesamples/android-BluetoothLeGatt

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.