Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

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

Тема в разделе "Прошивки esp8266 - общие вопросы", создана пользователем Abel, 9 авг 2016.

  1. Abel

    Abel Новичок

    Сообщения:
    4
    Симпатии:
    0
    Имеется вот такой код, предназначеный для общения ардуины и esp через АТ-команды (прошивка esp v0.22SDK1.0.0). Использование связки ардуино+esp обязательно, потому что планирую передавать данные с нескольких сенсоров. Всё, в принципе, заработало. Но проблема вот в чём: данные приходят на TCP сервер с непостоянной скоростью - то есть 8-12 значений могут прийти очень быстро, но затем TCP просто висит 1-3 секунды, а затем всё повторяется, и в итоге, общая скорость передачи данных неприлично мала. Все данные приходят в целости - какие были отправлены с ардуины, такие и пришли на сервер. Собственно вопрос: это у меня корявый код или это особенности прошивки вкупе с TCP соединением? при реализации передачи данных с этого же датчика по UDP, и связи между esp и ардуино без АТ команд всё работает нормально.
    Код (Text):
    1. код C++
    2.  
    3. #include <SoftwareSerial.h>
    4. #include <WiFiUdp.h>
    5.  
    6. unsigned int LocalPort=5557;
    7. int value, Length;
    8. SoftwareSerial espMonitor(10,11);
    9. IPAddress serverIP(192, 168, 0, 103);
    10.  
    11. void setup()
    12. {
    13.   Serial.begin(115200);
    14.   espMonitor.begin(115200);
    15.   delay(1000);
    16.   espMonitor.println("AT+CWMODE=3");
    17.   delay(1000);
    18.   espMonitor.println("AT+CIPMUX=1");
    19.   delay(1000);
    20.   espMonitor.println("AT+CWJAP_CUR=\"ithome\",\"9519178980\"");
    21.   delay(4000);
    22.   if(espMonitor.find("OK"))
    23.     Serial.println("WiFi connected");
    24.   espMonitor.print("AT+CIPSTART=1,\"TCP\",\"");
    25.   espMonitor.print(serverIP);
    26.   espMonitor.print("\",");
    27.   espMonitor.println(LocalPort);
    28.   if(espMonitor.find("OK"))
    29.     Serial.println("TCP connected");
    30. }
    31.  
    32. void loop()
    33. {
    34.   //receive();
    35.   value=analogRead(0);
    36.   Serial.println(value);
    37.   espMonitor.print("AT+CIPSEND=1,");
    38.   if(value!=0) Length=lengthOfInt(value);
    39.   else Length=1;
    40.   espMonitor.println(Length);
    41.   if(espMonitor.find(">"));
    42.     espMonitor.println(value);
    43.   if(espMonitor.find("SEND OK"))
    44.     Serial.println("DATA sent");
    45. }
    46.  
    47. void receive()
    48. {
    49.   String s;
    50.   if(espMonitor.available())
    51.   while(espMonitor.available())
    52.      {s = s + espMonitor.readString();}
    53.   Serial.println(s);
    54. }
    55.  
    56. int lengthOfInt(int number)
    57. {
    58.   int result=0;
    59.   while (number!=0)
    60.   {
    61.     number/=10;
    62.     result++;
    63.   }
    64.   return result;
    65. }
     

Поделиться этой страницей