• Система автоматизации с открытым исходным кодом на базе 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? Куда копать и кого ругать?
 
Сверху Снизу