• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Arduino ESP32 BT/BLE

pvvx

Активный участник сообщества
Вообще работает ли BT/BLE в ESP32? (Или вообще что-нибудь?)

Надо соединиться к серверу по BLE. Для связи с большинством устройств BT 4.2 требуется изменить MTU c 23 до N (до 517 по стандарту BT4.2).

Но что-то не так у ESP32:

В void setup() ставлю:
C++:
  BLEDevice::init("");
  BLEDevice::setMTU(241);
Далее, при соединении, на этапе создания клиента, опрашиваю:
C++:
  pClient  = BLEDevice::createClient();
  Serial.print(" - Client MTU: ");
  Serial.println((int)pClient->getMTU());
Получаю в логе:
- Created client
- Client MTU: 23

Тут понятно, что при инициализации MTU равен минимуму (=23 байта).
Далее на ESP32 событие 'onConnect' и Сервер передает сообщение об установке MTU на 241.
На сервере включил чтобы он это принудительно делал! И то у многих клиентов по умолчанию MTU полный и такое действо не обязательно - проверено.
Кроме того передаю с ESP32 команду серверу, чтобы он передал ESP32 установить Connection Time в минималку (7.5 ms). Вроде устанавливает, согласовывает...

Через пол секунды, когда о параметрах клиент-сервер должны уже договориться, опрашиваю ESP32:
C++:
          Serial.print("BLEDevice MTU = ");
          Serial.println(BLEDevice::getMTU());
          Serial.print(" - Client MTU: ");
          Serial.println((int)pClient->getMTU());
Получаю:
BLEDevice MTU = 241
- Client MTU: 241

Вроде всё в норме...
Теперь пробуем передавать с ESP32 блоки, каждый раз увеличивая размеры, начиная с 200 байт. Сервер при этом просто пересылает блок обратно и по этому событию ESP32 пересылает следующий блок с длиной + 1.
Всё идет хорошо до 228 байт. ESP32 отсылает, сервер принимает и передает обратно...
....
Send block length = 224

rx[224] TimeStamp: 6319
Send block length = 225
rx[225] TimeStamp: 6372

Send block length = 226 // 2 байта там заголовок и 226 - это общая длина посылки 228 байт.
и тут всё (!) - на сервере ничего нет и ему нечего отослать обратно... В debug логе ESP32 - всё хорошо тоже.
Сервер ожидает таймаут в 20 сек и вырубает соединение... (так ему задал для теста)

Любое другое устройство запросто работает с сервером до полного MTU (-7 байт как и положено для пользовательских данных).

Что не так с ESP32? Куда копать и кого ругать?
 
Сверху Снизу