ESP32 ошибка блютуз

выкидываю в блютуз сообщение около 10 раз в секунду.
получаю ошибку
[1865933][E][BluetoothSerial.cpp:201] _spp_send_buffer(): SPP Write Congested!

if (i == 0x06)
  {
    float O2_vivod = dme[4] * 0.004;
    Serial.print("O2 ");
    Serial.println(O2_vivod, 3);
    SerialBT.print("O2 ");
    SerialBT.println(O2_vivod, 3);
    // SerialBT.flush();

  } 

видимо дело в переполнении, но, как сделать проверку на заполненность буфера?

мои исследования далее

#include "BluetoothSerial.h"

#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif

BluetoothSerial SerialBT;

void setup() {
  Serial.begin(115200);
  SerialBT.begin("ESP32test");  //Bluetooth device name
  Serial.println("The device started, now you can pair it with bluetooth!");
  pinMode(13, OUTPUT);
}

void loop() {
  SerialBT.println(123456789);
  digitalWrite(13, (HIGH));
  digitalWrite(13, (LOW));
  digitalWrite(13, (HIGH));
  digitalWrite(13, (LOW));
  digitalWrite(13, (HIGH));
  digitalWrite(13, (LOW));
  digitalWrite(13, (HIGH));
  digitalWrite(13, (LOW));
  digitalWrite(13, (HIGH));
  digitalWrite(13, (LOW));
  digitalWrite(13, (HIGH));
  digitalWrite(13, (LOW));
  digitalWrite(13, (HIGH));
  digitalWrite(13, (LOW));
  digitalWrite(13, (HIGH));
  digitalWrite(13, (LOW));
  digitalWrite(13, (HIGH));
  digitalWrite(13, (LOW));
  digitalWrite(13, (HIGH));
  digitalWrite(13, (LOW));
  digitalWrite(13, (HIGH));
  //delay(20);
}

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

я тут давеча занимался подьемом BT на чипе от TexasInstruments , читал устройство BT архитектуры , протоколов соедениния ,но вообще нихрена не понимаю что хотел сказать показать ТС .
если проблема ,как вы считаете, с переполенением буфера , то надо смотреть настроийки того самого буфер и читать код интерфейса вашего устройства.
я бы начал с проверки области видимости ваших данных с точки зрения библиотеки BT устройства и проверить чья ответственность высвобождать память под данные.

1 лайк

если вы можете как то детальнее помочь, я лишь загуглил что на 201 строке BluetoothSerial.cpp
в целом ответ там, раз указание на нее, как мне поступить? что написать для теста? ткните носом пожалуйста

я в ардуино не шарю от слова совсем , но ,судя по всему ваша библиотека это надсторйка/интефейс над этим
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/bluetooth/esp_spp.html
и судя по тому что там написано , в функции :esp_spp_write

прежде чем отправлять следующий пакет , надо дождаться что предидущий приянт успешно отлеживанием event ESP_SPP_WRITE_EVT . и переменной в cong = false. если cong = true , надо ждать что он будет в false.

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

1 лайк

спасибо большое, я эти источники находил, я не понимаю как это записать, как должна выглядеть проверка? не могли бы вы написать

забавно еще то, что от переполнения вешается вся программа.

причем в основной программе, вешается на 100,200,300,400(причем именно ровно, с 1 знаком после замятой мб и погрешность анализатора) миллисекунд! это блин пропасть, я не могу позволить на столько ждать, у меня еще два сериала, которые не ждут так долго и все валиться…