Tutorial #6 ESP8266 – MySQL + PHP en Servidor Local




En este video explico cómo enviar la temperatura que lee un LM35 a un servidor local Apache usando una HTTP REQUEST con el método POST a un archivo …

Original source


37 responses to “Tutorial #6 ESP8266 – MySQL + PHP en Servidor Local”

  1. ¿La IP se coloca tanto en "string strhost" como en "IPAdress ip"?
    (La siguiente biblia se trata sobre el problema "Fallo de conexion")

    Hola amigo! Primero que todo, acabo de conseguir la comunicación de mi Nodemcu con phpMyAdmin, así que muchas gracias por el tutorial. Ahora aprovecho de hacerte una consulta. Lo que pasa es que a pesar de seguir el tutorial al pie de la letra, el paso final me costó muchísimo lograrlo, y siento que lo logré por pura suerte, probando todo. El problema era la IP.

    Todo me había funcionado hasta el momento de empezar a enviar datos con el ESP, donde me salía "Fallo de conexion". El resto de las pruebas funcionaban, te explico. Al colocar mi IP en la dirección del formulario html (eso de reemplazar "localhost" por la IP) funcionaba bien. Ingresar los datos de chipID y temperatura en ese formulario también funcionaba, y se veía reflejado en la tabla del phpMyAdmin sin problema. También pude comprobar que la conexión wifi de mi ESP estaba funcionando, ya que probé otro proyecto aparte, uno con Firebase, y no había ningún problema, la conexión wifi se hacía correctamente (con eso descarté que mi placa estuviera defectuosa). Entonces, si me sigues, es evidente que el problema era exclusivamente la conexión del ESP con el PHP, posiblemente debido al código.

    Resulta que el puerto serie del IDE me arrojaba ese mensaje de "Fallo de conexion" a pesar de haber colocado correctamente mi IP al comienzo del código (string strhost), al igual que había colocado correctamente la URL del PHP (string strurl). Y bueno, probé haciendo de todo, hasta que algo me funcionó: configurar también la IP que aparece en una línea de más abajo, en la instrucción "IPAdress ip()".

    Al principio no había querido colocarle mi IP porque en el tutorial no haces ninguna mención acerca de esa instrucción, como que te saltas esa parte del código al explicarlo. De hecho, la IP que muestras en tu string strhost es distinta a la de tu IPAdress ip, entonces en ese momento me dije a mí mismo… eh, con configurar la de arriba basta. Pero no fue así. Le di un montón de vueltas al asunto, vi cómo un montón de gente preguntaba lo mismo aquí en el tuto y también en tu página. Pero al final me di cuenta de eso, de que si ambas instrucciones no tenían la IP, la conexión no anda bien. Aprovecho de mencionar que a las instrucciones IPAdress gateway e IPAdress subnet no les hice nada, las deje tal cual como las muestras.

    Entonces ahora te pregunto, ¿es normal esto? Pienso que tal vez se te pasó decirlo, o lo tomaste por obvio en el código al publicarlo… o tal vez el mío es un caso particular, no sé… quiero saber qué piensas. Sé que esto me pasa por no saber programar el ESP, pero por esa misma razón pregunto. Y ahora que al fin me funciona, es cuando recién comienzo a jugar con el código y dejarlo a mi gusto, para mi aplicación. Pero en fin, te lo dejo a modo de realimentación. Te agradezco mucho el tutorial, y te agradecería aun más si pudieras confirmarme esta inquietud.

    Y si termino ayudando a alguien con el mismo problema, cuánto mejor, que por lo que veo varios se han quebrado la cabeza con el famoso "Fallo de conexion".

  2. Buenas, soy un el creador de contenido de un pequeño canal de electrónica y me interesó el tema, aun que luego de seguir tus pasos me di cuenta que la sintaxis que usas está obsoleta en lo que respecta a PHP. Sin saber nada del tema indagué mucho y probé mucho, finalmente logre hacer que funcionara y esta es la sintaxis que resultó para mi, estoy trabajando en un sistema operativo ubuntu:

    <?php
    $servername = "localhost";
    $username = "root";
    $password = "root"; //En esta parte puse una contraseña que tuve que definir al instalar
    $dbname = "tutorial";

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
    }

    $chipid = $_POST ['chipid'];
    $temperatura = $_POST ['temperatura'];

    $sql = "INSERT INTO tabla (id, chipid,fecha,temperatura)
    VALUES (NULL, '$chipid', CURRENT_TIMESTAMP, '$temperatura')";

    if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
    } else {
    echo "Error: " . $sql . "<br>" . $conn->error;
    }

    $conn->close();
    ?>

    Espero les sirva a todos!

  3. mysqli_query($conexion, "INSERT INTO `datos` (`id`, `chipId`, `fecha`, `temperatura`) VALUES (NULL,'$chipid',CURRENT_TIMESTAMP, '$temperatura');" );

    esa linea me arroja esta falla…

    Notice: Undefined variable: chipid in C:xampphtdocsenviardatos.php on line 10

  4. Disculpa como puedo hacer para encender un led teniendo 1 y 0 en la base segun esos valores encender el led cuando es 0 en la base de datos este apagado y cuando sean uno en la base de datos sea 1 se encienda ayuda

  5. muy buen video, yo estoy estudiando sobre este tema porque quiero comenzar IoT pero necesito crear la base de datos y el servidor para poder ingresar desde cualquier red y no tener que estar en una local el cliente web y mi esp8266, algún consejo que me pueda ayudar, gracias de antemano

  6. Gracias por toda la información profe, tengo conocimientos sobre la mitad de mi proyecto, pero quería conectarlo a una base de datos y se me hizo un mundo conectar el esp8266 a una base de datos! Gracias, enserio

  7. tengo un problema al compilar el programa me genera un error.. he revisado todo y realmente no se que pueda ser..

    Enviando datos a SQL…
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>404 Not Found</title>
    </head><body>
    <h1>Not Found</h1>
    <p>The requested URL /uni/prueba.php was not found on this server.</p>
    <p>Additionally, a 404 Not Found
    error was encountered while trying to use an ErrorDocument to handle the request.</p>
    <hr>
    <address>Apache/2.4.27 (Win32) OpenSSL/1.0.2l PHP/7.1.8 Server at 192.168.0.101 Port 80</address>
    </body></html>

  8. Muchas gracias por estos tutoriales, que me han parecido realmente muy interesantes y que estudiaré con calma. Quiero adaptar tu código para poder usarlo con un arduino Mega y una sheld SIM900. Entiendo que solo ha de cambiar la parte del codigo que usa el modulo ESP, pero la parte de comunicaciones (MQTT, MySQL y PHP) será la misma, supongo. Me lo podrias confirmar?
    Gracias de nuevo.

  9. Hola amigo, no consigo esa librería exacta para el módulo, aparecieron muchas pero no exactamente como la que tienes y las otras el código fuente no es compatible con este código del ide que tienes, puedes decirme por favor dónde descargaste esa librería? Muchas gracias es el mejor video que he visto muy bien explicado, lo que me bloqueó fue la librería

  10. Muchas gracias por el tutorial, muy completo, yo lo modifique con el sensor de temperatura y humedad DHT11, espero a alguien le sirva, hay que modificar los php y la base de datos con un nuevo campo humedad

    #include <ESP8266WiFi.h>
    #include <WiFiClient.h>
    #include <DHT.h>

    //-—————–VARIABLES GLOBALES————————-
    int contconexion = 0;

    const char *ssid = "xxxxx";
    const char *password = "xxxxx";
    #define DHTPIN 2
    #define DHTTYPE DHT11
    DHT dht(DHTPIN, DHTTYPE);
    unsigned long previousMillis = 0;

    char host[48];
    String strhost = "192.168.0.104";
    String strurl = "/iot/enviardatos.php";
    String chipid = "";

    //-—–Función para Enviar Datos a la Base de Datos SQL——-

    String enviardatos(String datos) {
    String linea = "error";
    WiFiClient client;
    strhost.toCharArray(host, 49);
    if (!client.connect(host, 80)) {
    Serial.println("Fallo de conexion a MySql");
    return linea;
    }

    client.print(String("POST ") + strurl + " HTTP/1.1" + "rn" +
    "Host: " + strhost + "rn" +
    "Accept: */*" + "*rn" +
    "Content-Length: " + datos.length() + "rn" +
    "Content-Type: application/x-www-form-urlencoded" + "rn" +
    "rn" + datos);
    delay(10);

    Serial.print("Enviando datos a SQL…");

    unsigned long timeout = millis();
    while (client.available() == 0) {
    if (millis() – timeout > 5000) {
    Serial.println("Cliente fuera de tiempo!");
    client.stop();
    return linea;
    }
    }
    // Lee todas las lineas que recibe del servidro y las imprime por la terminal serial
    while(client.available()){
    linea = client.readStringUntil('r');
    }
    Serial.println(linea);
    return linea;
    }

    //————————————————————————-

    void setup() {

    // Inicia Serial
    Serial.begin(115200);
    Serial.println("");

    Serial.print("chipId: ");
    chipid = String(ESP.getChipId());
    Serial.println(chipid);

    // Conexión WIFI
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED and contconexion <50) { //Cuenta hasta 50 si no se puede conectar lo cancela
    ++contconexion;
    delay(500);
    Serial.print(".");
    }
    if (contconexion <50) {
    //para usar con ip fija
    IPAddress ip(192,168,0,156);
    IPAddress gateway(192,168,0,1);
    IPAddress subnet(255,255,255,0);
    WiFi.config(ip, gateway, subnet);

    Serial.println("");
    Serial.println("WiFi conectado");
    Serial.println(WiFi.localIP());
    }
    else {
    Serial.println("");
    Serial.println("Error de conexion");
    }
    }

    //-————————LOOP——————————-
    void loop() {

    unsigned long currentMillis = millis();

    if (currentMillis – previousMillis >= 10000) { //envia la temperatura cada 10 segundos
    previousMillis = currentMillis;

    float t = dht.readTemperature();
    float h = dht.readHumidity();
    if (isnan(h) || isnan(t)) {
    Serial.println("Falla al leer el sensor DHT11!");
    return;
    }
    Serial.println(t);
    Serial.println(h);
    enviardatos("chipid=" + chipid + "&temperatura=" + String(t, 2) + "&humedad=" + String(h, 2));
    }
    }

Leave a Reply