Не удается подключить ESP8266 к базе данных сервера
обновленный.
Я пытаюсь подключиться к серверу, отправляя HTTP-запрос (GET
), но продолжаю получать ошибки. Вывод на последовательный монитор показывает сбой подключения
или неверный запрос
Что я делаю не так?
См. Код ниже.
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
const char* ssid = "Old man";
const char* password = "fivefive";
const char* host = "http://domainsu.infinityfreeapp.com";
void setup()
{
Serial.begin(115200);
Serial.println("Sensor Data");
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void loop()
{
float temperature = random(20,40);
float humidity = random(50,100);
if(isnan(temperature) || isnan(humidity)){
Serial.println("Failed to read sensor data");
}else{
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" *C");
delay(3000);
}
Serial.print("connecting to ");
Serial.println(host);
// Используйте класс WiFiClient для создания TCP-соединений
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}
// Это отправит запрос на сервер
client.print(String("GET /connect.php?") +
("&temperature=") + temperature +
("&humidity=") + humidity +
" HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 1000) {
Serial.println(">>> Client Timeout !");
client.stop();
return;
delay(10000);
}
}
// Прочитайте все строки ответа с сервера и распечатайте их на Serial
while(client.available()) {
String line = client.readStringUntil('\r');
Serial.print(line);
}
Serial.println();
Serial.println("closing connection");
}
1 ответ
В вашем коде все еще есть 1 ошибка:
const char* host = "http://domainsu.infinityfreeapp.com";
должно быть:
const char* host = "domainsu.infinityfreeapp.com"
;
Я попробовал код на своей плате, и он работает просто отлично.
В качестве примечания, ваш сервер возвращает javascript, который, очевидно, не будет выполняться на плате.
Вы должны вернуть либо ничего, либо полезную нагрузку JSON, либо что-то еще, что может обработать устройство.
Вот что у меня есть:
connecting to domainsu.infinityfreeapp.com
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 06 Nov 2021 01:50:44 GMT
Content-Type: text/html
Content-Length: 884
Connection: close
Vary: Accept-Encoding
Expires: Thu, 01 Jan 1970 00:00:01 GMT
Cache-Control: no-cache
<html><body><script type="text/javascript" src="/aes.js" ></script><script>function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}.....</script><noscript>This site requires Javascript to work, please enable Javascript in your browser or use a browser with Javascript support</noscript></body></html>
closing connection
на это указывалось более чем в одном комментарии. немного почитаю для тебя, Эухенио, если у тебя есть время http://slash7.com/2006/12/22/vampires/, @Juraj
ЛОЛ, спасибо @Juraj, хорошо прочитал. Я видел тенденцию в этом сообществе отвечать в комментариях. Не знаю почему... поэтому я решил переработать все комментарии в "Ответ", может быть, это поможет :-). Я также попытался предоставить другую обратную связь, возможно, это тоже поможет другим., @Eugenio Pace
- ESP8266 не отвечает через случайные промежутки времени
- esp32 http client response только 200 не получил данные после этого
- Выполнение HTTPS-запросов с использованием команд ESP8266 AT
- Метод HTTP PUT на NodeMCU/ESP8266
- Http-запрос в прерывании esp8266 не работает
- Как читать и записывать EEPROM в ESP8266
- Как исправить: Invalid conversion from 'const char*' to 'char*' [-fpermissive]
- ошибка: espcomm_upload_mem failed при загрузке скетча
1) хост-это только имя компьютера, а не URL-адрес. 2) "локальный хост" - это имя обратной связи устройства, @Juraj
Вы пытаетесь подключиться с вашего ESP к вашему ESP (с помощью localhost) через порт 5555, но я не видел, чтобы вы запускали веб-сервер или что-то подобное через порт 5555. Возможно, вы неправильно понимаете, что означает "локальный хост". Это ссылка на себя для хоста, на котором вы выполняете запрос. Если вы хотите связаться с другим сервером, вам следует использовать его имя хоста или IP (в зависимости от того, разрешено ли имя хоста через DNS в вашей сети)., @chrisl
Я попробовал это сейчас с бесплатным веб-хостингом (infinityfree). постоянный символ* хост = "http:/domainsu.infinityfreeapp.com/connect.php"; но все та же ошибка., @Tom Justine Enaldo
Вы определяете
const char* хост
как полный URL-адрес, но он должен содержать только часть "хост" (т. Е. " "domainsu.infinityfreeapp.com"`). Вы также пытаетесь подключиться к порту 5555 на этом хосте. Вы уверены, что порт ответит на ваши запросы?, @StarCatЯ сомневаюсь, что бесплатный хостинг работает на порту 5555 (как указал StarCat) Либо 80 для http, либо 443 для https., @chrisl
На что мне его изменить? Об определении URL-адреса. @StarCat, @Tom Justine Enaldo
хозяин-это domainsu.infinityfreeapp.com, @Juraj
Это дает мне " Неправильный запрос HTTP/1.1 400`, @Tom Justine Enaldo
это ответ от сервера, поэтому он наконец подключился, @Juraj
Теперь, как я могу пройти с " Неправильным запросом HTTP/1.1 400`?, @Tom Justine Enaldo
Кстати, спасибо., @Tom Justine Enaldo
какой порт вы использовали? поддерживает ли сервер небезопасное соединение?, @Juraj
Вы получаете *неверный запрос*, потому что маршрут на этом сервере, скорее всего, не существует. Вам нужно внести несколько изменений: * Хозяин должен быть: domainsu.infinityfreeapp.com * Порт должен быть: 80 * Запрос должен быть:
ПОЛУЧИТЬ /connect.php ...
, @Eugenio PaceКроме того, его легко протестировать через браузер. Ваш сервер работает просто отлично. Просто откройте браузер и перейдите в `http://domainsu.infinityfreeapp.com/connect.php?temperature=21&humidity=12-и это сработает. У вашего подхода есть и другие проблемы (например, отсутствие безопасности, отправка данных через GET или POST/PUT, использование небезопасных соединений). Возможно, вы захотите заняться этим позже., @Eugenio Pace
Могу я написать вам лично? @EugenioPace, @Tom Justine Enaldo
Я все еще получаю запрос _bad_., @Tom Justine Enaldo
принимает ли сервер небезопасное соединение?, @Juraj
Может быть, потому, что это бесплатный веб-хостинг. Я использовал
infinityfree.net
, @Tom Justine Enaldo