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);
}
в чем причина такого поведения? как я могу это исправить?
@KoSMoS, 👍-1
Обсуждение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;
}
,
@KoSMoS
Можно принять свой собственный ответ, если он решит проблему. Я думаю, вы получите 15 повторений за это., @VE7JRO
Смотрите также:
- AT-команда не отвечает на последовательный монитор
- Отправка данных Arduino в MySQL с помощью phpMyAdmin и XAMPP на Windows10
- Arduino выводит значения мусора на serial monitor с ESP8266
- ошибка: espcomm_upload_mem failed при загрузке скетча
- фатальная ошибка ESP8266WiFi.h: Такого файла или каталога нет
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Получить данные с сайта с помощью ESP8266 с помощью AT-команд
- Захват изображений с OV7670 (без FIFO) с использованием Arduino Uno?
ваш
while (mySerial.available())
заканчивается на первом промежутке между байтами. Серийник на скорости 9600 бод очень медленный, @Jurajhttps://majenko.co.uk/blog/reading-serial-arduino, @Majenko
похоже, что ваш скетч не ждет завершения потока данных, @jsotola
@Juraj увеличение скорости не помогло, @KoSMoS
@jsotola как я могу это добавить?, @KoSMoS