Как esp8266 получает ответ от сервера..?

#include <SoftwareSerial.h>

const byte rxPin = 2;
const byte txPin = 3;

SoftwareSerial ESP8266 (rxPin, txPin);

void setup() {
  Serial.begin(115200);   
  ESP8266.begin(115200);
  delay(2000);
}

void printResponse() {
  String s="";
  while (ESP8266.available()) {
    s+=ESP8266.readStringUntil('\n');
  }
  
  Serial.println(s);
  // now here you can parse and look for "+IPD" look for another line ending (if there is) and then extract the numeric value. 
}

void loop() {

  ESP8266.println("AT+CIPMUX=1");
  delay(1000);
  printResponse();

  ESP8266.println("AT+CIPSTART=4,\"TCP\",\"www.tcpss.000webhostapp.com\",80");
  delay(1000);
  printResponse();

  String cmd = "GET /test.html HTTP/1.1";
  ESP8266.println("AT+CIPSEND=4," + String(cmd.length() + 4));
  delay(1000);

  ESP8266.println(cmd);
  delay(1000);
  ESP8266.println();
  delay(1000);
  printResponse();

  delay(5000);
}

я запустил этот код и могу получить такой ответ от сервера, как "+ipd 4,41".... что это значит? вот ответ после запуска кода в arduino.......

WIFI GOT IP
AT+CIPLUX=1


OK
AT+CHPSTART=4,"TCP","www.tcpss.000webhostapp.com",80

4,CONNEC
AR)CR5NB⸮b⸮⸮k

j⸮L⸮⸮
Recv 27 bytes

SEND OK

+IPD,4,41

Заранее спасибо.....

, 👍1

Обсуждение

Вы видите повреждение от запуска последовательного программного обеспечения на скорости 115200 бод., @Majenko


2 ответа


1

Здесь нужно знать две вещи:

  1. Вы видите повреждение в своем выводе, потому что SoftwareSerial не способен надежно работать на скорости 115200 бод. Вам нужно перенастроить ваш ESP8266 для работы с более низкой скоростью передачи данных (например, 9600), чтобы иметь возможность использовать его с Arduino, у которого недостаточно физических UART.
  2. Ответ +IPD,4,41 говорит вам об ответе. Это не само по себе ответ.

Это означает "IP-данные на канале 4 длины 41". Затем вы несете ответственность за запрос этих данных от ESP8266, используя любую команду AT, требуемую ESP8266.

Лично я бы отказался от прошивки AT и запрограммировал ESP8266 напрямую. Таким образом, вы решаете обе проблемы: вы можете выбрать, с какой скоростью передачи данных общаться (если вам вообще нужно общаться с Arduino), и у вас нет AT-команд для анализа или обработки. Это гораздо более эффективный способ работы с ESP8266, который пытается подделать вещи с прошивкой AT и Arduino.

,

Спасибо, этот ответ был полезен для меня..., @farhan

Но я хочу знать, что когда я изменяю скорость передачи данных в последовательном мониторе, она меняется, но ответ от команд esp8266 on AT не показывает, почему? если я поступил неправильно, то что мне нужно, чтобы решить эту проблему., @farhan

во-вторых, я хочу знать, какие AT-команды esp8266 требуются для запроса данных от esp8266 или кода, который мне нужно использовать в arduino ide...., @farhan

Вы должны изменить скорость передачи данных на самом ESP, а также на Arduino. Для этого есть команда AT, но, как известно, она блокирует ESP. существуют разные версии прошивки, и команды между ними различаются. Где-то в Интернете есть PDF-файл, доступный в Интернете, в котором перечислены все команды., @Majenko


1

SoftwareSerial не работает хорошо для скорости передачи данных выше 9600bps, вам нужно изменить Arduino и ESP8266, чтобы работать на скорости 9600bps.

  1. Используйте AT+UART_DEF=9600,8,1,0,0, чтобы установить ESP8266 на 9600Baud, с 8 битами, 1 стоп-битом и без четности. А также не забудьте соответствующим образом настроить Arduino. Команда AT с суффиксом _DEF означает, что ее нужно будет установить только один раз, и конфигурация будет сохранена в ESP8266. Набор команд ESP8266 AT будет удобен при программировании ESP8266 с помощью команд AT.

  2. Добавьте более длительную задержку после отправки AT+CIPSEND и получите запрос, так как эти сетевые действия иногда занимают больше времени для установления.

  3. +IPD,4,41 означает, что соединение 4 (которое вы установили с помощью AT+CIPSTART) подключено, и есть 41 байт полезной нагрузки, ожидающей чтения. Вы можете обратиться к ESP8266 в примерах команд для получения дополнительной информации.

,