Esp8266-01 AT-команды возвращаются частично

Я пытаюсь получить html-ответ от сервера через модуль esp01

при использовании последовательного монитора в arduino studio все работает нормально

вот вывод серийного монитора

AT+CIPSTART="TCP","aaaa.aaaa",80

CONNECT

OK
AT+CIPSEND=43


OK
> 
Recv 43 bytes

SEND OK

+IPD,227:HTTP/1.1 200 OK
Date: Sat, 19 Jan 2019 18:42:58 GMT
Server: Apache
X-Powered-By: PHP/7.2.11
Vary: Accept-Encoding,User-Agent
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

10
Hello from server

0

CLOSED

но когда я пытаюсь сделать то же самое из скетча, мой ответ возвращается частично

AT+CIPSTART="TCP","aaaa.aaaa",80

CONNECT

OK
AT+CIPSEND=43


OK
> 
Recv 43 bytes

SEND OK

+IPD,227:HTTP/1.1 200 OK
Date: S

оно почему-то заканчивается на первой букве даты

вот мой набросок

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX // серийный номер для связи с esp
void setup() {
  // Открытие последовательной связи и ожидание открытия порта:
  Serial.begin(9600);
  while (!Serial) {
    ; // ждем подключения последовательного порта. Требуется только для родного порта USB
  }

  // устанавливаем скорость передачи данных для порта SoftwareSerial
  mySerial.begin(9600);
  mySerial.setTimeout(5000);//не знаю, нужно ли мне это

  delay(10000);

  //проверяем модуль Wi-Fi
  mySerial.println("AT");
  delay(1000);
  if(mySerial.find("OK"))
  {
    Serial.println("Initializing");
  }else{
    Serial.println("Error initializing");
  }
}

void loop() { // повторяем снова и снова

  Serial.println("go");
mySerial.println("AT+CIPSTART=\"TCP\",\"aaaa.aaaa\",80");
delay(1000);
    while(mySerial.available()){
    Serial.write(mySerial.read());
     delay(1);
  }
mySerial.println("AT+CIPSEND=43");
delay(1000);
    while(mySerial.available()){
    Serial.write(mySerial.read());
     delay(1);
  }
mySerial.println("GET /load.php HTTP/1.1");
delay(100);
    while(mySerial.available()){
    Serial.write(mySerial.read());
     delay(1);
  }
mySerial.println("Host: aaaa.aaaa");
delay(100);
    while(mySerial.available()){
    Serial.write(mySerial.read());
     delay(1);
  }
mySerial.println("");
delay(2000);


    while(mySerial.available()){
    Serial.write(mySerial.read());
     // задержка (100);
  }

delay(5000);

}

в чем причина такого поведения? как я могу это исправить?

, 👍-1

Обсуждение

ваш while (mySerial.available()) заканчивается на первом промежутке между байтами. Серийник на скорости 9600 бод очень медленный, @Juraj

https://majenko.co.uk/blog/reading-serial-arduino, @Majenko

похоже, что ваш скетч не ждет завершения потока данных, @jsotola

@Juraj увеличение скорости не помогло, @KoSMoS

@jsotola как я могу это добавить?, @KoSMoS


1 ответ


0

нашел решение мне не пришлось ждать последовательного ввода без функции задержки

String sendCommand(String command, const int timeout)
{
  String res = "";
  mySerial.println(command); // отправляем прочитанный символ в вайфай
  long int time = millis();
  while( (time+timeout) > millis())
  {
    while(mySerial.available())
    {
      // У esp есть данные, поэтому вывод их в последовательное окно
      char c = mySerial.read(); // прочитать следующий символ.
      res+=c;
    }
  }
  //Serial.print(ответ);
  return res;
}
,

Можно принять свой собственный ответ, если он решит проблему. Я думаю, вы получите 15 повторений за это., @VE7JRO