Имеется вот такой код, предназначеный для общения ардуины и 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;
}