Как написать http-ответ от HttpClient на последовательный монитор с помощью ESP32 (Wemos Lolin32)?

С помощью моей платы ESP32 Wemos Lolin32 я хотел бы отправить запрос http GET на адрес «http://www.arduino. cc/asciilogo.txt", прочитайте текстовый файл и распечатайте его на последовательном мониторе.

Вопрос: Почему текстовый файл по сути не записывается на последовательный монитор? Как этого можно достичь? Нужно ли мне какое-то преобразование символа?

Я использую код, аналогичный коду из этого примера https://www.arduino.cc/en/Tutorial/HttpClient . По сути, код можно свести к этому минимальному примеру:

#include <WiFi.h>
#include <HttpClient.h>

void setup() {

  Serial.begin(9600);

  WiFi.begin(ssid, password);
  Serial.println("Connecting to WiFi..");
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println(".");
  }
  Serial.println("Connected to the WiFi network");

  pinMode(LED_BUILTIN, OUTPUT);
  Serial.println("SETUP FINISHED");
}

void loop() {
  Serial.println("Connecting to httpClient");


 HttpClient httpClient;
  httpClient.get("http://arduino.cc/asciilogo.txt");
  while (httpClient.available()) {
    char c = httpClient.read();
    //Serial.print(c);
    Serial.write(c);
  }
}

Ожидаемый результат: Я хочу увидеть символы из txt-файла (https:/ /www.arduino.cc/asciilogo.txt) в последовательном мониторе.

Фактический результат: Соединение с Wi-Fi может быть установлено. На последовательном мониторе отображаются либо знаки вопроса, либо странные символы.

Я проверил скорость, в коде и на мониторе она одинакова. Я пытался изменить это значение, но это не помогло. Последовательный монитор

, 👍0


2 ответа


Лучший ответ:

0

При переключении с HttpClient на HTTPClient и использовании полезных данных String = http.getString(); Serial.println(полезная нагрузка); Я могу добиться ожидаемого результата.

,

1

это http://arduino.cc/asciilogo.txt. без www. www перенаправляется на https. вы можете проверить это из браузера

,

Я отредактировал URL, результат тот же., @Mckunz

Serial.write(c);, если вы читаете необработанный байт, то необработанный записываете. print` преобразует число в текст, @Juraj

Сервер также кодирует содержимое с помощью gzip. Ему нужно добавить заголовок Accept-Encoding:identity., @gre_gor

К сожалению, это не работает., @Mckunz

Да, я изменил его на Serial.write(c);, @Mckunz

Это довольно странно. Serial.write(c) и Serial.print(c) выдают один и тот же результат., @Mckunz

При переключении с HttpClient на HTTPClient и использовании полезных данных String = http.getString(); Serial.println(полезная нагрузка); Я могу добиться ожидаемого результата., @Mckunz

Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится. - [Из обзора](/review/low-quality-posts/43008), @Michel Keijzers

@MichelKeijzers, ссылки нет. это правильный URL-адрес для использования в рассматриваемом эскизе, @Juraj

@Юрай ... извини, я ошибаюсь; Я предполагал, что ответом является сама ссылка. Вместо этого проголосовал за сейчас :-), @Michel Keijzers