Как разобрать значение BluetoothGattCharacteristic в Java - PullRequest
0 голосов
/ 17 мая 2019

В настоящее время я немного растерялся, пытаясь выяснить, как перенести данные с моего микроконтроллера ESP32 на телефон Android.Мне удалось отправить и прочитать значение характеристики, но я не знаю, как его проанализировать. Сейчас я отправляю простое целое значение = 15.

Я обнаружил, что данные отправляются с использованием байтового массива, поэтому я преобразовал их в шестнадцатеричную строку, и результат не имеет смысла 31-35-2E-30-30.Проверено приложение nRF connect , оно также отображает тот же результат шестнадцатеричной строки, но кроме того оно проанализировало значение до 15.00.

Вот код Arduino:

...
char txString[8];
int someNumber = 15;
dtostrf(someNumber, 1, 2, txString);

_pCharacteristicNotify -> setValue(txString);
_pCharacteristicNotify -> notify();
...

Android Studio

public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
    _handler.handleMessage(Message.obtain(null, ..., characteristic));
}

private Handler _handler = new Handler() {
    public void handleMessage(Message msg) {
        // ------- The problem is here ----------------
        BluetoothGattCharacteristic characteristic;
        characteristic = (BluetoothGattCharacteristic) msg.obj;
        String value = Utils.parseBLECharacteristicValue(characteristic);
        // the value is "31-35-2E-30-30"
        // HOW TO GET THE NUMBER 15 ??
    }
};

Используемый здесь метод синтаксического анализа Пример 1

Может кто-нибудь объяснить мне, как разобрать данное значение?

И как изменится логика, если заданное значение - строка "abcd123", а не целое число?

1 Ответ

1 голос
/ 17 мая 2019

31-35-2E-30-30 - ASCII-представление строки 15.00.

Согласно документации dtostrf () :

Преобразование выполняется в формате "[-] d.ddd".

, которая объясняет строку 15.00 с двумя десятичными значениями из-за того, что ваш третий аргумент вызова является 2.

Попробуйте использовать String конструктор Arduino для преобразования целых чисел в строку. После этого вы можете использовать класс Integer в Android для преобразования строки обратно в целое число, как указано в этом answer .

...