Не удается подключить 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");


}

, 👍0

Обсуждение

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


1 ответ


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