ESP8266 загружает данные на облачную платформу Google
Я пытаюсь загрузить информацию в свой ресурс приложений, созданный с помощью Google App Engine. Я могу сделать это, когда набираю в браузере:
http://myname.appspot.com/query?city=Copenhagen&temp=20& id=сайт
Но я не могу заставить его работать на ESP8266. Вот мой код:
const char* MY_URL = "http://myname.appspot.com";
void uploadHTTP() {
// Определить Wi-Fi-клиент
WiFiClient client;
// Устанавливаем http-порт
const int httpPort = 80;
// Убедитесь, что мы можем подключиться
if (!client.connect(MY_URL, httpPort)) {
return;
}
else {
Serial.println("Connected to MY_URL");
}
String url = "/query?city=Copenhagen&temp=20&id=ESP8266";
// Публикация в Appspot
if (client.connect(MY_URL, httpPort)) {
// Отправлен HTTP POST-запрос
client.println("POST " + url + " HTTP/1.1");
Serial.println("POST " + url + " HTTP/1.1");
client.println("Host: " + String(MY_URL));
Serial.println("Host: " + String(MY_URL));
client.println("User-Agent: Arduino/1.0");
Serial.println("User-Agent: Arduino/1.0");
client.print("Content-Length: ");
Serial.print("Content-Length: ");
client.println(0);
Serial.println(0);
client.println("Content-Type: application/x-www-form-urlencoded");
Serial.println("Content-Type: application/x-www-form-urlencoded");
client.println("Connection: close");
Serial.println("Connection: close");
}
//Сделанный
Serial.println("");
Serial.println("my HTTP done");
Serial.println("");
}
@T.Krebs, 👍0
Обсуждение1 ответ
Самая большая проблема заключается в том, что вы пытаетесь использовать URL-адрес веб-сайта в качестве полного доменного имени. Это не сработает.
Когда вы подключаетесь к удаленному компьютеру, вы подключаетесь к имени (myname.appspot.com
), которое преобразуется в IP-адрес, к которому вы можете открыть соединение.
Когда вы используете веб-браузер, он анализирует URL-адрес для извлечения протокола (http
) и полного доменного имени (myname.appspot.com
) и использует протокол для определения порт (и на каком языке говорить) для подключения, затем найдите IP-адрес из полного доменного имени.
Вам необходимо удалить http://
из вашего полного доменного имени, что приводит к его поломке (нет хоста с именем http://myname.appspot.com
) ). Тот факт, что вы подключаетесь к порту 80 и говорите на языке HTTP, означает, что вы используете HTTP.
Выражаясь более простым языком: если вам «нужно позвонить Фреду, чтобы поговорить о походе в паб», вы сначала находите номер Фреда в телефонной книге, а затем звоните по этому номеру. И только после того, как он ответит, вы говорите о походе в паб. Чего вы не делаете, так это пытаетесь найти номер, по которому можно позвонить, заглянув в телефонную книгу в раздел «Поговорим о походе в паб с Фредом». Его не будет.
Если вы программируете ESP8266 напрямую, вам следует рассмотреть возможность использования гораздо более простой встроенной библиотеки ESP8266HTTPClient.h
.
Спасибо за быстрый ответ и объяснение - я этого не знал! Однако я попытался изменить его на «myname.appspot.com», но это не сработало? Я также пытался заставить его работать с библиотекой ESP8266HTTPClient.h, но мне тоже не удалось заставить это работать..., @T.Krebs
Верен ли мой «Тип контента»? Вот мой код для ESP8266HTTPClient.h: ['код'] (HTTPClient http;) http.begin("myname.appspot.com"); http.addHeader("Content-Type", "application/x-www-form-urlencoded"); int httpCode = http.POST("/query?city=Copenhagen&temp=20&id=ESP8266"); Извините за некорректное оформление - я новичок на этом форуме и не могу заставить комментарий работать...., @T.Krebs
У вас нет контента, поэтому тип контента не имеет смысла. Вам действительно следует выполнять запрос GET, а не запрос POST, если для POST нет контента., @Majenko
У меня есть контент? Я устанавливаю «Город» на «Копенгаген», «Темп» на «20» и «Идентификатор» на «ESP8266»., @T.Krebs
Нет, это не контент. Содержимое попадает в тело. У вас есть параметры URL. Параметры URL-адреса идут в конце URL-адреса. У вас нет тела и нулевая длина контента, а ваши параметры находятся в конце URL-адреса. Это не «контент»., @Majenko
Спасибо! Теперь я перешел на GET, и он работает, @T.Krebs
- Проанализировать большой ответ json с помощью ESP8266
- Запрос POST (HTTPClient) с ESP8266, не работающим на локальном хосте (код http = -1)
- Невозможно установить связь между модулем ESP-12E и мобильным устройством через маршрутизатор ESP-12E.
- Что не так с моим почтовым запросом?
- Wi-Fi-подключения теряются при сбросе подключения
- Зачем нужно время отклика в AT-командах esp8266?
- Что вызывает повторную инициализацию моей функции настройки esp8266?
- https post с использованием кастомной библиотеки «Fetch»
Вы программируете ESP8266 напрямую или используете его, подключенный к Arduino?, @Majenko