@vvzvlad
давайте для чистоты экперемента поставим вместо 300 - delay(10) и проверим как-то повлияет это на задержку в 100мс?
еще можно в коде на самом esp выводить время в консоль, что-бы понять сколько на стороне esp занимает выполнение.
что-то я не уверен что при срабатывании прерывания, цикл loop сбрасывается на начало, а не висит дальше в delay пока он не кончится. Может кто-то прокоментирует?
переменную int flag; желательно объявлять как volatile
опять же у Вас delay(300) после нажатия кнопки пройдет от 0 до 300мс прежде чем пойдет отправка. Все таки как Вы измеряете задержку?
посмотрите в WiFiClient.cpp в районе
int ICACHE_FLASH_ATTR WiFiClient::connect(IPAddress ip, uint16_t port)
там как раз pcb определяется
tcp_pcb* pcb = tcp_new();
if (!pcb)
return 0;
немного ниже попробуйте добавить
tcp_nagle_disable(pcb);