Поддерживайте постоянную пропускную способность на esp8266

#arduino #esp8266

#arduino #esp8266

Вопрос:

Я работаю с esp8266 Arduino (через Adafruit Feather Huzzah) Я пытаюсь непрерывно записывать 3 символа в сокет TCP, но в этом нет ничего непрерывного. Он имеет очень регулярную схему высокой и низкой пропускной способности. Он записывает с очень высокой скоростью в течение ~ 10 секунд, а затем с очень низкой скоростью в течение 4 секунд (см. График полученных пакетов)

 //...
void loop() {
  if (!client.connect(host, port)) {
    delay(10);
    return;
  }

  for (int i=0; i < 1024; i  ){
    client.print(String(analogRead(A0))   "rn");
    delay(1);
  }
}
 

Количество полученных сообщений (прошивка версии 2.2.0 и 2.3.0)

Количество полученных сообщений

Есть идеи, если это драйвер Wi-Fi, что-то в чипе или аппаратных таймерах, которые я не могу обойти … или, может быть, что-то еще?

— Обновить —

Я протестировал это с помощью master, и он получил другой, но все же быстрый результат. Похоже, что теперь он «догоняет», вместо того, чтобы замедляться, но он все еще работает по схеме ~ 10s / ~ 4s. Что может быть причиной этого? Каковы варианты смягчения?

введите описание изображения здесь

Комментарии:

1. Какую версию ядра ESP8266 Arduino вы используете?

2. Можете ли вы использовать новейший git? Вскоре после этого выпуска была выполнена большая перезапись, которая исправила множество проблем с пропускной способностью WiFiClient

3. Да! Спасибо. Я попробую это и отчитаюсь. Спасибо

4. Я сделал. Спасибо! Аналогичная, но менее серьезная проблема. См. Обновленный вопрос.

Ответ №1:

Я знаю, что это неправильный ответ, но это может быть связано с алгоритмом Нейгла, который выполняется по умолчанию на espduino. Попробуйте отключить его с помощью client.setNoDelay(false) метода. Кроме того, если вы опубликуете свой код, другие люди (например, я) смогут его протестировать!!