Tutorial #6 ESP8266 - MySQL + PHP en Servidor Local

preview_player
Показать описание
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 PHP que es el encargado de insertar esa temperatura y otros datos en la base de datos. También explico cómo crear esa base de datos MySQL usando la herramienta phpMyAdmin incluida en el servidor.

Рекомендации по теме
Комментарии
Автор

Puntualizo dos anotaciones de las que me he percatado realizando la practica.
1-Es una actualizacion para el 2020. Normalmente, en el 2020 se tiene instalado un php 5.0 o superior y en este caso se debe sustituir la llamada a la funcion mysql x mysqli(improved).
2-No hace falta incluir en el programa de backend los campos automaticos, como lo son el id y timestamp, igual es asi al utilizar la nueva funcion mysqli.
Otra vez!muchisimas gracias por el tuto!!

pablosaizortuno
Автор

Amigo, te encuentro en la calle y te abrazo, me re sirvió capo. Gracias! Sigue así!!! :D

nyroclip
Автор

Genial tutorial. Tenho um site hospedado em um provedor. Vou tentar seguir suas recomendações. Grande abraço desde Maringá - Brasil. Mais um inscrito.

andremurilobr
Автор

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>


int contconexion = 0;

const char *ssid =
const char *password =
#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 = "";


para Enviar Datos a la Base de Datos

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" + "\r\n" +
"Host: " + strhost + "\r\n" +
"Accept: */*" + "*\r\n" +
"Content-Length: " + datos.length() + "\r\n" +
"Content-Type: + "\r\n" +
"\r\n" + 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");

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


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));
}
}

gusalgora
Автор

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

pablodiaz
Автор

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!

electromatic
Автор

Buenisimos tus tutos!! hasta en el 2020, gracias!

pablosaizortuno
Автор

hablo ingles pero quiero te dice que tu video me ayuda muy
grande gracias a ti senor

mIkeyGermita
Автор

No es muy óptimo el hacer esos registros así cierto ?, sería mejor dentro de un rato generar un reporte con tales datos.

pruebaserver
Автор

Excelente video muy bien explicado, me ayudara a terminar un proyecto en mente, gracias y felicidades por tan buen trabajo

jonatanjim
Автор

Buenas Tardes, Te felicito por el vídeo. Esta excelente, sencillo y bien fundamentado.Estoy realizando un proyecto con PIC. quiero utilizar el modulo y la comunicación serie la realizo con USART, el tema es que no se si existe la libreria o algo similiar para XC8 (WIFIclient).

sebastianamado
Автор

Amigo, te saltas la parte en donde esta el metodo while(Wifi.status()){ etc...

Considero que esto es importante que lo podamos saber de donde son esas direcviones ip para los que vamos empezando en esto, me ayudaria mucho que nos puedas exolicar esta parte

victorquiroz
Автор

Muchas gracias por tus videos!
Saludos desde España

angelm
Автор

acabo de descubrir tu canal ... excelentes temas !! muchas gracias !!!

heisenbergAlonso
Автор

excelente video!! una consulta, el código funcionaria utilizando un modulo TTGO esp 32 ??

alexanderotalorarodriguez
Автор

Excelente video, de antemano gracias por compartir con nosotros estos conocimientos... Me podrías orientar por favor con lo siguiente, pretendo adquirir datos en Mysql desde arduino pero no por medio de wifi, sino por medio de GPRS (usando sim900), esto es posible? De ser así me pudieras orientar por favor?
Quedo a tus ordenes
Saludos

enriquerodriguez
Автор

Hola, es posible que nos podamos conectar por anydesk, para validar el error 500 a la hora de enviar el formulario, utilizo coral pero laultima version, ya que la primera se bloquea en el servidor y localmente.

debalman
Автор

Esa versión de Coral que usas en el video no corre en Windows 10 no? Si lo hago por Ubuntu me va a explotar la cabeza o es mas o menos lo mismo?

facundonicolaskoloswki
Автор

Muchas gracias!! Muy buen video y bien detallado!! Queda probarlo. Saludos!!

AlejandroLaLoggia
Автор

¿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".

diegoeduardomayolafquenbus