Параметры Connect-а:
minimum connection interval, maximum connection interval, slave latency, and time-out.
Особое внимание обратите на
slave latency. Когда разберетесь, то осознаете, что приемник должен быть готов всегда. Но кроме приемника в BLE должен быть готов и передатчик. И для обоих необходимо подготовить и содержать разные счетчики и два уровня абстракции протокола с декодированием шифрации, масок, анализа перезапросов, передач подтверждений в минимальные фиксированные интервалы и кучу буферов и прочих обновляемых переменных. Это всё ложится на CPU - программный драйвер BLE.
А при приеме рекламы CPU и драйвер обслуживает только прерывание и передачу указателя на принятый фрейм.
Обычный сниффер - в реальности, на практике, принимающий значительно более 300 рекламных пакетов в секунду при ничтожной нагрузки на CPU.
Но реализация вашего Ардуино-драйвера содержит более 95% никчемных действий, т.к. заточено не на работу, а на обучение начальным понятиям. Т.е. пытается разложить, декодировать, разбить на типы пакетов и последовательности, на какие-то временные окна и создать десятки логов, на что уходит производительность двух ядер с более 200 MГц. И то, в реализации ESP32 не справляется с тупой задачей. И т.к. размер кода этой обработки занимает сотни килобайт (!), то там миллионы ошибок и никакой гибкости - никакой возможности оптимизации, т.к. всё повязано друг на друга. Тем более используется алгоритмы с динамическим распределением RAM, плюс C++, что обязательно когда-нибудь вызовет дефрагментацию и отказ системы, т.к. в ESP32 нет MMU.
Т.е. о надежности разговор вообще не идет.
И это вместо того, что решает любой, хоть 8-ми битный CPU на десятку МГц со статическими буферами и одной страницей кода на СИ без наличия каких либо ошибок и неточностей выполнения!