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

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

https://www.bluetooth.com/wp-content/uploads/Sitecore-Media-Library/Gatt/Xml/Characteristics/org.bluetooth.characteristic.csc_measurement.xml

Например, я пробовал следующее,

Шестнадцатеричные данные: 0x03 6D010000 FC7E 2C01 F87E

Flag-03 -> 0000 0011 -> 8 бит, поэтому оба значения верны, поэтому мы можем получить соответствующие значения колеса и кривошипа.

Совокупное число оборотов колеса - 6D 01 00 00 -> 32 бита, поэтому, преобразуя его в десятичное число, мы получаем -1828782080.

Время события последнего колеса - FC 7E -> 16 бит, поэтому, преобразуя его в десятичное число, мы получаем - 64638

Совокупные обороты кривошипа - 2C 01 -> 16 бит, поэтому, преобразуя его в десятичное число, мы получаем - 11265.

Last Crank Event Time- F8 7E -> 16 бит, так что преобразуя его в десятичное число, мы получаем - 63614

Я не могу получить фактические значения измерения колеса и кривошипа из BLE. Является ли описанная выше процедура правильной, как я понял из справочной ссылки, по которой я следовал? или я ошибаюсь в другом месте? Я приложил максимум усилий, чтобы проанализировать и проанализировать данные, но, к сожалению, не могу найти решение. Пожалуйста, проведите меня через этот процесс. Что нам нужно сделать, чтобы получить правильное значение? Например, я должен умножить его на какое-то число? Я пробовал с другой комбинацией, но не смог получить. Я использую датчик скорости и частоты вращения педалей SunDing515 с Bluetooth с низким энергопотреблением.


person Santosh Krishnan    schedule 04.04.2018    source источник


Ответы (3)


Из ваших данных и из таблицы данных мы видим, что значения используют целое число без знака. (uint16 или uint8). Ни одно из ваших значений не должно быть отрицательным.

Обычно значения bluetooth имеют обратный порядок байтов, а не прямой. Пример:

6D010000 следует читать 00 00 01 6D = 365

FC7E следует читать 7E FC = 32508

2C01 следует читать 01 2C = 300

F87E следует читать 7E F8 = 32504

person xiaomi    schedule 04.04.2018

Я не знаю, поняли ли вы, что вы искали в этом, но вещь с порядком байтов действительно помогла мне. Основной процесс, который вам нужно сделать, это прочитать данные дважды. Затем используйте разницу во времени и разницу в оборотах кривошипа (я делал только кривошипы), умножьте на 1024 (согласно спецификации).

поэтому предположим, что у вас есть пример с прямым порядком байтов: 300 для кумулятивных оборотов кривошипа (CCR) и 23504 в качестве времени последнего события запуска (LCET) (единица имеет разрешение 1/1024 с.). Прочитайте данные еще раз, и вы получите немного более высокий CCR (скажем, 301 или 302) и гораздо более высокий LCET, скажем, 24704. Затем вычтите более новый LCET из более старого (24704-23504), чтобы получить 1200, а более высокий CCR из уменьшите CCR (302-300), чтобы получить 2. Затем умножьте CCR на 1024 и разделите на разницу в LCET. Даю вам 1.7. Это ваши обороты за чтение. Затем умножьте на 60, чтобы получить число оборотов в минуту. (102.4)

person Dennis Rutherford    schedule 23.07.2018
comment
да, сэр, спасибо. Я подключил и завершил проект, рассчитав скорость в км/ч и об/мин через оборот кривошипа. - person Santosh Krishnan; 26.07.2018
comment
Спасибо, это решение очень помогло мне с расчетами частоты вращения педалей. - person Alex; 19.10.2019

Ответ Денниса Резерфорда - правильное направление, но, на мой взгляд, мы должны учитывать природу и механику езды на велосипеде: если кто-то поднимается в гору с 20 об / мин (я знаю, что это экстремально, но это может случиться!), то это меньше, чем 1/3 оборота кривошипа в секунду. Таким образом, умножение на 60 даст в этом случае слишком сильно различающиеся данные.

Время события имеет достаточно высокое разрешение (1/1024 с), но обороты колеса и кривошипа — это просто простые подсчеты, потому что традиционные магнитные датчики не могут обеспечить дробные обороты.

Поэтому мое решение — это скользящее окно для расчета мгновенного каденса: если мы подождем достаточное количество времени (20-30 секунд), то мы можем довольствоваться менее мгновенным, но более стабильным чтением.

Также важно правильно справляться с переполнением значений Event Time, потому что с байтами UInt16 оно переполняется каждые 64 секунды. Таким образом, если время последнего события меньше времени первого события, то произошло переполнение, и для нашего расчета нам нужно увеличить время последнего события на 64 секунды. Также обратите внимание, что наше временное окно не может быть слишком большим, иначе несколько переполнений могут сливаться вместе, и расчет будет отключен.

Наконец: пожалуйста, проверьте характеристику GATT 2AD2 Indoor Bike Data от 1826 GATT Service, потому что, если вам повезет (мне не повезло), вы получите мгновенный каденс, предоставленный там, и вы спасете себя от всех этих махинаций.

person Csaba Toth    schedule 10.11.2020