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

Вопрос Низкая скорость передачи данных по TCP

Abel

New member
Имеется вот такой код, предназначеный для общения ардуины и esp через АТ-команды (прошивка esp v0.22SDK1.0.0). Использование связки ардуино+esp обязательно, потому что планирую передавать данные с нескольких сенсоров. Всё, в принципе, заработало. Но проблема вот в чём: данные приходят на TCP сервер с непостоянной скоростью - то есть 8-12 значений могут прийти очень быстро, но затем TCP просто висит 1-3 секунды, а затем всё повторяется, и в итоге, общая скорость передачи данных неприлично мала. Все данные приходят в целости - какие были отправлены с ардуины, такие и пришли на сервер. Собственно вопрос: это у меня корявый код или это особенности прошивки вкупе с TCP соединением? при реализации передачи данных с этого же датчика по UDP, и связи между esp и ардуино без АТ команд всё работает нормально.
Код:
код C++

#include <SoftwareSerial.h>
#include <WiFiUdp.h>

unsigned int LocalPort=5557;
int value, Length;
SoftwareSerial espMonitor(10,11);
IPAddress serverIP(192, 168, 0, 103);

void setup()
{
  Serial.begin(115200);
  espMonitor.begin(115200);
  delay(1000);
  espMonitor.println("AT+CWMODE=3");
  delay(1000);
  espMonitor.println("AT+CIPMUX=1");
  delay(1000);
  espMonitor.println("AT+CWJAP_CUR=\"ithome\",\"9519178980\"");
  delay(4000);
  if(espMonitor.find("OK"))
    Serial.println("WiFi connected");
  espMonitor.print("AT+CIPSTART=1,\"TCP\",\"");
  espMonitor.print(serverIP);
  espMonitor.print("\",");
  espMonitor.println(LocalPort);
  if(espMonitor.find("OK"))
    Serial.println("TCP connected");
}

void loop()
{
  //receive();
  value=analogRead(0);
  Serial.println(value);
  espMonitor.print("AT+CIPSEND=1,");
  if(value!=0) Length=lengthOfInt(value);
  else Length=1;
  espMonitor.println(Length);
  if(espMonitor.find(">"));
    espMonitor.println(value);
  if(espMonitor.find("SEND OK"))
    Serial.println("DATA sent");
}

void receive()
{
  String s;
  if(espMonitor.available())
  while(espMonitor.available())
     {s = s + espMonitor.readString();}
  Serial.println(s);
}

int lengthOfInt(int number)
{
  int result=0;
  while (number!=0)
  {
    number/=10;
    result++;
  }
  return result;
}
 
Сверху Снизу