выкидываю в блютуз сообщение около 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 знаком после замятой мб и погрешность анализатора) миллисекунд! это блин пропасть, я не могу позволить на столько ждать, у меня еще два сериала, которые не ждут так долго и все валиться…