BLE с MiBand 3 - PullRequest
       4

BLE с MiBand 3

3 голосов
/ 13 января 2020

Я впервые спрашиваю, поэтому, пожалуйста, прости, если я покажу ошибки.

Проще говоря, я хочу создать приложение, способное взаимодействовать с Mi Band 3. Взаимодействие, которое я могу сделать просто читает информацию о батарее. Что я действительно хочу, так это включение в режиме реального времени частоты пульса и сканирования шагов.

Что я делал раньше?

  • Я видел и пробовал https://github.com/pangliang/miband-sdk-android. Именно эта библиотека заставила меня подумать, что можно включить сканирование сердца с Android. Я попытался выполнить с моим Mi Band 3, но не получилось: setHeartRateScanListener, startHeartRateScan, getBatteryInfo.

  • Я видел, клонировал и немного подделал с https://github.com/Freeyourgadget/Gadgetbridge , Это удивительно, он может взаимодействовать с моим Mi Band 3, но проблема в том, что у Gadgetbridge нет функции сканирования сердечного ритма, и я вроде как перегружен кодом.

  • Конечно, я мы пробовали https://developer.android.com/guide/topics/connectivity/bluetooth-le. После прочтения кода Pangliang и Gadgetbridge я сделал следующее, чтобы сделать сканирование сердечного ритма.

Во-первых, я знаю, что я должен поставить слушателя правильно? Итак, вот функция

    public void listenHeartRate() {
        BluetoothGattCharacteristic characteristic = bluetoothGatt.getService(UUID.fromString("0000180d-0000-1000-8000-00805f9b34fb")).getCharacteristic(UUID.fromString("00002a37-0000-1000-8000-00805f9b34fb"));
        bluetoothGatt.setCharacteristicNotification(characteristic, true);
        BluetoothGattDescriptor descriptor = characteristic.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"));
        descriptor.setValue(new byte[] {0x01, 0x00});
        if(!bluetoothGatt.writeDescriptor(descriptor)) {
            Log.d(TAG, "tesListenHeartRate: failed");

        }
    }

И затем я начинаю сканирование следующим образом.

    public void startHeartRate() {
        Log.d(TAG, "tesHeartRate: start");
        BluetoothGattCharacteristic characteristic = bluetoothGatt.getService(UUID.fromString("0000180d-0000-1000-8000-00805f9b34fb")).getCharacteristic(UUID.fromString("00002a39-0000-1000-8000-00805f9b34fb"));
        characteristic.setValue(new byte[]{21, 2, 1});
        if (!bluetoothGatt.writeCharacteristic(characteristic)) {
            Log.d(TAG, "tesStartHeartRate: failed");
        }
    }

Проблема в том, что writeCharacteristi c всегда возвращает статус 3, что означает GATT_WRITE_NOT_PERMITTED.

Итак, где я go ошибся? Большое спасибо.

1 Ответ

0 голосов
/ 10 апреля 2020

"(...) Я почти сдался, но потом понял, что что-то упустил. Аутентификация. Да, я пропустил аутентификацию! Спасибо Андрею Никишаеву, он очень хорошо объяснил, как моя группа соединяется и аутентифицируется Это дало мне хорошее начало. И вот шаги аутентификации: (...) "

Вся статья: https://medium.com/@yogeshojha / i-hacked-xiaomi-miband-3-and- здесь-это-как-я-сделал-это-43d68c272391

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...