максимальная скорость интервала соединения bluefruit NRF52 (connInterval) - PullRequest
0 голосов
/ 01 января 2019

У меня Adafruit Bluefruit NRF52, подключенный к 9-осевому датчику ориентации Adafruit BNO055, который собирает 3 оси абсолютной ориентации плюс 3 оси ускорения (всего 6 поплавков) и отправляет сигнал через Bluetooth через bleuart.Мне нужно, чтобы bleuart обновлял каждые 7,5 миллисекунд новой строкой значений, но когда я запускаю его, он не печатает более 20 строк новых строк значений каждую секунду.По сути, мне нужно, чтобы значения обновлялись как можно быстрее, так как я измеряю очень высокую скорость, движение с высокой точностью.

В начале каждой строки у меня также есть трехзначное число, которое представляет состояние калибровки каждого датчика.на ИДУ.Каждая напечатанная строка выглядит примерно так:

303 68.69   4.19    -2.19   -0.12   0.14    -0.40

В настоящее время я транслирую на свой iphone последнюю версию iOs, которая теоретически может обрабатывать интервалы 7,5 мс.

Я читал, чтоРешение может заключаться в том, чтобы буферизовать значения и переслать в большем фрагменте с большими интервалами соединения, но я не уверен, как это сделать.

Мой соответствующий код Arduino ниже:

Bluefruit.setConnIntervalMS(7.5, 20);

void loop()
{
    imu::Vector<3> accel = 
    bno.getVector(Adafruit_BNO055::VECTOR_LINEARACCEL);

    /* Get a new sensor event */
    sensors_event_t event;
    bno.getEvent(&event);

    /* Display the floating point data */
    bleuart.print(event.orientation.x);
    bleuart.print("\t");
    bleuart.print(event.orientation.y);
    bleuart.print("\t");
    bleuart.print(event.orientation.z);
    bleuart.print("\t");

    /* Display the floating point data for Linear Acceleration */
    bleuart.print(accel.x());
    bleuart.print("\t");
    bleuart.print(accel.y());
    bleuart.print("\t");
    bleuart.print(accel.z());
    bleuart.print("\n");
}

1 Ответ

0 голосов
/ 03 января 2019

iOS фактически не поддерживает интервал соединения 7,5 мс.Проверьте раздел параметров подключения (11.6) в Руководстве разработчика Apple .То, что вы указываете такой низкий уровень CI, не означает, что вы его получите.В этом сценарии nRF52 является ведомым устройством и запрашивает только низкий интервал от главного устройства (вашего телефона).Мастер, если он этого пожелает, может полностью игнорировать ваш запрос.

Вам будет лучше, поскольку вы уже ускользнули, буферизуйте свои данные и отправьте их с помощью пользовательской характеристики.Выясните, сколько байтов вам нужно, и, возможно, вы можете упаковать пару чтений в одну запись BLE.Если вы действительно боретесь с пропускной способностью, то вам понадобится специальный сервис с несколькими характеристиками.Недавно я работал над проектом, который транслирует 8 каналов данных (~ 125 Гц / 16-бит) по BLE с тремя характеристиками, и это граничит с максимальной пропускной способностью, которую вы можете достичь.

В качестве отступления: оценка пропускной способности данных по количеству напечатанных строк в секунду - это большое нет, нет.Функции печати, как правило, имеют огромные накладные расходы и негативно влияют на измеренную пропускную способность.

Дайте мне знать, если я смогу помочь.

...