Conexion BD y ESP32

Estoy desarrollando una aplicación con ESP32 y un par de sensores los cuales son el DHT11 para temperatura y humedad y un MH-Z19B para medir el CO2, y he tratado de subir los datos del DHT11 a una base de datos en MySQL, estoy usando XAMPP para la gestion de la base de datos pero me sale error al enviar los datos

#include <HTTPClient.h>
#include <WiFiMulti.h>

#include <WiFiClient.h>

// defino credenciales red

const char* ssid ="";
const char* password ="";

// Variables para lectura del DHT 11
float t;
float h;
float f;
float hif;
float hic;

#include "DHT.h"

#define DHTPIN 27     // Digital pin connected to the DHT sensor
// Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 --
// Pin 15 can work but DHT must be disconnected during program upload.

// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

DHT dht(DHTPIN, DHTTYPE);
WiFiClient client; 

void setup() {
  Serial.begin(115200);
  Serial.println(F("DHT 11 prueba de conexión con el servidor"));
  dht.begin();

  WiFi.begin(ssid, password);
  Serial.print("Conectando...");
  while (WiFi.status()!= WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("Conexión OK!");
  Serial.print("IP Local: ");
  Serial.println(WiFi.localIP());
  

 
}

void loop() {

  LecturaTH();
  // funcion  de envio por POST
  EnvioDatos();

}


// funcion de lectura de temperatura y humedad
void LecturaTH(){

  h = dht.readHumidity();
  t = dht.readTemperature();
  f = dht.readTemperature(true);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  // Compute heat index in Fahrenheit (the default)
  hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  hic = dht.computeHeatIndex(t, h, false);

  /*

  Serial.print(F("Humidity: "));
  Serial.print(h);
 
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.print(F("°C "));
  Serial.print(f);
 
  Serial.print(F("°F  Heat index: "));
  Serial.print(hic);
  Serial.print(F("°C "));
  Serial.print(hif);
  Serial.println(F("°F"));  */

}

// rutina de envio de datos por POST
void EnvioDatos(){
  if (WiFi.status() == WL_CONNECTED){ 
     HTTPClient http;  // creo el objeto http
     String datos_a_enviar = "temperatura=" + String(t) + "&humedad=" + String(h);  

     http.begin(client,"http://localhost/practicasphp/ProyectoFinal/EspPost.php");
     http.addHeader("Content-Type", "application/x-www-form-urlencoded"); // defino texto plano..

     int codigo_respuesta = http.POST(datos_a_enviar);

     if (codigo_respuesta>0){
      Serial.println("Código HTTP: "+ String(codigo_respuesta));
        if (codigo_respuesta == 200){
          String cuerpo_respuesta = http.getString();
          Serial.println("El servidor respondió: ");
          Serial.println(cuerpo_respuesta);
        }
     } else {
        Serial.print("Error enviado POST, código: ");
        Serial.println(codigo_respuesta);
     }

       http.end();  // libero recursos
       
  } else {
     Serial.println("Error en la conexion WIFI");
  }
  delay(60000); //espera 60s
}

Hola,
Desconozco la parte php que tienes montada, pero ¿seguro que necesitas hacer un "POST"? no necesitarás usar método "GET"? Podrías ser más concreto sobre el error que te está dando y sobre qué tienes ESPPOST.php así como si lo has probado con postman o herramienta similar con éxito?
Saludos.

1 Like

Hola, buen día, tienes razón es más viable usar el método GET, de hecho estuve probando a usar el método GET y logré que funcionara la conexión, agradezco el aporte `

#include "DHT.h"
#include <WiFi.h>

// DHT11 sensor pins
#define DHTPIN 27
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

const char* ssid     = "ssid_name";
const char* password = "*******";

const char* host = "xxx.xxx.xxx.xxx";   //dirección Ip del servidor 

void setup()
{
  dht.begin();
  Serial.begin(115200);
  
  // We start by connecting to a WiFi network
  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 temp,hum;
  
  // Reading temperature and humidity
  temp = dht.readTemperature();
  hum = dht.readHumidity();
  
    Serial.print("Temperatura: ");
    Serial.print(temp);
    Serial.print(" Humedad: ");
    Serial.print(hum);
    Serial.println();
    Serial.print("connecting to ");
    Serial.println(host);

  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  const int httpPort = 80;
  
  if (!client.connect(host, httpPort))
  {
    Serial.println("connection failed");
    return;
  }

  // We now create a URL for the request
  String url = "/dht11.php";
  String key = "?pass=ce_acatl";
  String dato1 = "&Temperatura=";
  String dato2 = "&Humedad=";

  Serial.print("Requesting URL: ");
  Serial.println(url);

  // This will send the request to the server
  client.print(String("GET ") + url + key + dato1 + temp + dato2 + hum + " 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 > 5000) 
    {
      Serial.println(">>> Client Timeout !");
      client.stop();
      return;
    }
  }

  // Read all the lines of the reply from server and print them to Serial
  while (client.available()) 
  {
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
  Serial.println();
  Serial.println("closing connection");
  delay(60000);
}`

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.