Максимальная скорость ESP32 Bluetooth SPP

Я пытаюсь понять максимальную скорость передачи BT SPP, которая может быть достигнута с помощью ESP32.

Мой проект требует отправки 2 байтов данных каждые 200 мс (5 кГц) И дополнительных 15 байтов данных каждые 50 мс (20 Гц) через BT.

Я пытаюсь добиться этого с помощью BT SPP, однако я не мог понять скорость BluetoothSerial::write И BluetoothSerial::print.

Основываясь на моем тестировании на 5 кГц, BluetoothSerial::write зависает после 2-3 секунд подключения.

Функция BluetoothSerial::println, похоже, не замерзает, однако время, необходимое для завершения функции, не является постоянным. Пожалуйста, обратитесь к приведенному ниже коду о том, как я измеряю время, необходимое для завершения функции.

На рисунке ниже показано время в микросекундах при каждом выполнении функции (DataFormat()). Если вы посмотрите, есть 2 случая, когда продолжительность времени больше, чем в среднем 0f 80us.

Я хотел бы знать, ESP32 BT SPP может достичь такой скорости или есть другой способ добиться этого.

Спасибо вам за ваше время и помощь в этом вопросе. Я задал тот же вопрос и на форуме ESP32 здесь.

void dataFormat(record r){
  serialBtPrint_dur = micros();
  char msg[20];
  sprintf(msg,"%04d%05d%05d%05",r.e, r.r, r.p, r.y);
  SerialBT.println(msg);
  serialBtPrint_dur = micros() - serialBtPrint_dur;
  }
}

void loop() {
  char msg[20];
  uint8_t testMsg[20] = "abcdefghijklmnop\n";
  if(!structs.isEmpty()){
    dataset[local_rd_ptr].yawData);
    data::dataFormat(structs.shift());
    Serial.println(serialBtPrint_dur);
  }
}

duration for each fuction call of dataFormat in us

, 👍1


1 ответ


1

Это больше похоже на проблему переполнения с чем-то, чем на фактическую задержку. Если вы посмотрите на время в журнале, то увидите, что вы не пропускаете секунды в журнале (иначе говоря, 19:12:32.234 в двух последовательных записях журнала, когда вы заявляете о задержке). Я думаю, что это ошибка работы с данными размером больше 8 бит. Я знаю, что это старый вопрос, но я искал информацию, наткнулся на нее и решил спросить.

,

На самом деле спасибо, что подумали об этом. Она не была решена, что привело меня к использованию другого механизма. Для этого конкретного сценария переполнение произойдет только в том случае, если разница микронов больше 8-битного размера данных, чего теоретически не должно произойти., @karunanj