C# Преобразование байтового массива с устройства BT LE

Я использую Nordic Thingy:52 для записи данных об окружающей среде в приложении UWP и следую примеру в приложениях Windows Universal Sample для подключения к устройствам BT LE.

До сих пор я был в состоянии подключиться к устройству для получения служебной и характеристической информации, но при получении фактических данных от датчиков мне не удается преобразовать массив байтов в пригодные для использования данные.

async void Characteristic_ValueChanged(GattCharacteristic sender, GattValueChangedEventArgs args)
{
    // An Indicate or Notify reported that the value has changed.
    var reader = DataReader.FromBuffer(args.CharacteristicValue);
    byte[] input = new byte[reader.UnconsumedBufferLength];
    reader.ReadBytes(input);
}

При проверке содержимого байтового массива вы можете увидеть, что что-то получено, но я застрял, когда узнал, как преобразовать этот массив в полезные данные.

Код для чтения байтового массива

Спецификация данных для данных, отправляемых устройством

1 ответ

Решение

Из документа мы можем увидеть определение данных давления:

https://stackru.com/images/bcd20a5 b4f8689873888826af135733652a349ad.png

5 байтов содержат один int32 для целочисленной части и один uint8 для десятичной части. Уинт это гПа.

Вы получаете строку как это:

        Int32 pressureInteger = BitConverter.ToInt32(input, 0); //252-3-0-0
        string pressureString = pressureInteger.ToString() + "." + input[4].ToString() + "hPa";

Строка будет "1020.28hPa"

Дополнительная ссылка " Класс BitConverter " и примечание к порядку байтов с прямым порядком байтов.

Другие вопросы по тегам