En este video sobre de IOT (internet de las cosas) 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.
<?php
$conexion = mysql_connect("localhost", "root", "root");
mysql_select_db("tutorial", $conexion);
mysql_query("SET NAMES 'utf8'");
$chipid = $_POST ['chipid'];
$temperatura = $_POST ['temperatura'];
mysql_query("INSERT INTO `tutorial`.`tabla` (`id`, `chipId`, `fecha`, `temperatura`) VALUES (NULL, '$chipid', CURRENT_TIMESTAMP, '$temperatura');");
mysql_close();
echo "Datos ingresados correctamente.";
?>
formulario.html:
<!DOCTYPE html>
<html>
<head>
<title>Formulario</title>
</head>
<body>
<form action="enviardatos.php" method="POST">
ChipID:<br>
<input type="text" name="chipid" ><br>
Temperatura:<br>
<input type="text" name="temperatura" ><br>
<input type="submit" name="Enviar" >
</body>
</html>
#include <ESP8266WiFi.h> #include <WiFiClient.h> //-------------------VARIABLES GLOBALES-------------------------- int contconexion = 0; const char *ssid = "----"; const char *password = "----"; unsigned long previousMillis = 0; char host[48]; String strhost = "192.168.1.115"; String strurl = "/tutorial/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"); 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: application/x-www-form-urlencoded" + "\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,1,156); IPAddress gateway(192,168,1,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; int analog = analogRead(17); float temp = analog*0.322265625; Serial.println(temp); enviardatos("chipid=" + chipid + "&temperatura=" + String(temp, 2)); } }
Excelente! Un compacto resumen base para muchos posibles proyectos.
ResponderEliminarMuchas gracias!
De nada
EliminarGracias por el tutorial amigo
ResponderEliminarDe nada, es un placer.
EliminarMuchas 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
ResponderEliminar#include
#include
#include
//-------------------VARIABLES GLOBALES--------------------------
int contconexion = 0;
const char *ssid = "gustavo";
const char *password = "582413gusalgora";
#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" + "\r\n" +
"Host: " + strhost + "\r\n" +
"Accept: */*" + "*\r\n" +
"Content-Length: " + datos.length() + "\r\n" +
"Content-Type: application/x-www-form-urlencoded" + "\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");
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));
}
}
Hola, puedes pasar como modificaste el .php y el .html? También estoy trabajando con DHT11 y no me está funcionando
EliminarHola, en mi caso noe esta funcionando, me sale el error "falla en la conexión a MYSQL". No se cual sería el problema
Eliminarigual me paso algo parecido
EliminarY cual era su solucion
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarMuchas gracias por tu aporte Gustavo. Fijate que pasaste el usuario y contraseña del WIFI.
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarUna pregunta el tipo de datos de la DB debe ser igual al tipo de dato que se va a enviar? Quiero probarlo con un led que prende y apaga 1 y 0, convertirlo a string para que solo sea 1 en texto pero al mandarlo dice "fallo de conexion" te mando el LOOP, el insert de DB y el tipo de dato al que quiero enviar.
ResponderEliminarvoid loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= 10000) {
previousMillis = currentMillis;
int a=0;
digitalWrite(leda,HIGH);
a=digitalRead(4);
delay(1000);
digitalWrite(leda,LOW);
delay(1000);
Serial.println(a);
enviardatos("chipid=" + chipid + "&click=" + String(a));
}
////INSERT
$chipid = $_POST['chipid'];
$click=$_POST['click'];
$insertar="INSERT INTO `cosos`.`mee` (`noact`, `chipid`, `estado`, `fecha`) VALUES (NULL, '$chipid', '$click', CURRENT_TIMESTAMP);";
//// BD tipo de dato de estado
estado varchar(50);
Todos los datos se deben mandar como string, después la base de datos le da el formato. Lo de fallo de conexión no tiene nada que ver con eso, eso significa que no te estas pudiendo conectar al host, fíjate si poniendo la IP del host en un navegador te podés conectar, si no es así es porque seguramente tenés algún problema con un permiso. ¿ Qué servidor estás usando?
Eliminarentonces el formato no importa, solo se convierte en caso de requerirlo. Estoy usando xampp, y sigo peleandome con eso ja
EliminarYa funciono!!!!!!! me equivoque en la Dir IP del host con la direccion IP del modulo, tube que entrar al modem para saber la direccion de ambos dispositivos!!!!!
EliminarCuento mis experiencias!
Buenisimo.
EliminarTengo el mismo problema de miguel, me puedes decir como lo resolviste??? porfavor!!
EliminarBuenas Ale, gracias por los tutoriales me han sido de mucha ayuda hasta el momento, he llegado hasta este pero me salta el siguiente error:
EliminarEnviando datos a SQL...
!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
html>head>
title>400 Bad Request/title>
/head>body>
h1>Bad Request/h1>
p>Your browser sent a request that this server could not understand.br />
/p>
/body></html
No se si sigues con el blog, pero me seria de mucha utilidad tu ayuda
Este comentario ha sido eliminado por el autor.
ResponderEliminarHola buenas noches, antes que nada gracias por compartir ese tipo de conocimiento. Tengo un problema, no lo he podido solucionar, espero me puedas ayudar, lo que pasa es que al momento de querer enviar los datos de un DHT11 supuestamente se envían. Y al momento de revisar la bd no hay ningún dato guardado. Todo está bien, cuando ingreso un dato por medio del formulario se envía correctamente, pero cuando envíar los datos desde el node mcu no lo hace. Adjunto el archivo Insert.php.
ResponderEliminar-----INSERT
$hostDb="localhost";
$usuario="root";
$nombreDb="project";
$clave="";
$conexion=mysqli_connect($hostDb, $usuario, $clave, $nombreDb);
$Temperatura = $_POST ['temperatura'];
$Humedad = $_POST ['humedad'];
$query = "INSERT INTO datos1(`Temperatura`, `Humedad` , `Fecha`)
VALUES('$Temperatura','$Humedad', CURRENT_TIMESTAMP)";
mysqli_query($conexion, $query);
mysqli_close($conexion);
echo "Datos ingresados correctamente";
---------
Código Arduino.
#include
#include
#include
int TempHum= D4;
int Temp, Hum;
int contconexion= 0;
DHT dht (TempHum,DHT11);
const char* ssid = "xx";
const char* password = "xx";
unsigned long previousMillis = 0;
char host[48];
String strhost = "xx-xx-xx-xx";//ip de mi computadora
String strurl = "/Project/Insert.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" + "\r\n" +
"Host: " + strhost + "\r\n" +
"Accept: */*" + "*\r\n" +
"Content-Length: " + datos.length() + "\r\n" +
"Content-Type: application/x-www-form-urlencoded" + "\r\n" +
"\r\n" + datos);
delay(10);
Serial.print("Enviando datos a Base de datos...");
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 servidor 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("Iniciando ");
//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,1,156);
IPAddress gateway(192,168,1,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;
Hum= dht.readHumidity();
Temp= dht.readTemperature();
Serial.print("Temperatura: ");
Serial.println(Temp);
Serial.print("Humedad: ");
Serial.println(Hum);
Serial.println();
enviardatos("temperatura=" + String(Temp, 2)+ "&humedad="+ String(Hum,2));
}
}
¿Tiene que ver que esté usando xampp? Revisé muchas veces el código y no encuentro el error, espero me puedas ayudar, saludos.
Pueden ser varias cosas, si funciona desde el formulario genial, eso significa que vas por buen camino. Lo primero que tenés que hacer es ver si funciona el formulario desde un dispositivo de la red lan, que no sea en el que está el servidor, por ejemplo, podés usar un smartphone conectado por wifi.
Eliminar¿Cuál es la IP de tu computadora que pusiste como "xx-xx-xx-xx"?, esa ip no hace falta que la ocultes es una ip de la lan, nadie te va a hacker nada con ese dato. Saludos.
Hola, gracias por tu respuesta, ya hice la prueba ingresando desde mi celular a la ip donde tengo instalado xampp: 192.168.1.68/Testeo.html (Carga sin ningún problema)
EliminarLa ip que tengo en strhost es= 192.168.1.68.
¿Será que el problema está en el POST? Aunque a decir verdad, yo veo que no hay error en el código de arduino, saludos.
Si puede ser un problema del POST Resquest, te recomiendo que veas “Tutorial #9 ESP8266 - MySQL + PHP en Servidor EXTERNO”, ahí explico cómo solucionar el problema del POST Resquest. Pasame el código de Testeo.html , así lo comparo con el código de Arduino para ver si hay algún error. También re recomendaría que uses el servidor que yo recomiendo Uniform Server Coral 8.92 , así descartamos que no sea problema de Xamp, te todas formas debería funcionar con Xamp, en el canal de Ioticos usan Xamp. Saludos.
Eliminarexcelente video ojala me sirva para lo que necesito gracias :)
ResponderEliminarMuchas gracias. Te recomiendo los videos sobre MQTT, es una solución mas elegante.
Eliminargracias, los estare viendo :)
Eliminarbuenas noches estoy realizando proyecto Internet de las cosas con servidor xampp y arduino esp8266 el codigo arduino corre y wifi esta conectado pero medice fallo de conexion, y la base de datos manual funciona, necesito ayuda,
ResponderEliminarYo lo solucioné habilitando el puerto 80 para conexiones entrantes en el firewall de Windows y poniendo en línea el servidor web (que acepte conexiones entrantes)
Eliminar“Fallo de conexión” significa que no se está conectando al host a muchas cosas, por ejemplo que no permita las conexiones externas, es decir desde la PC que tenés instalado Xampp funciona porque lo llamas desde localhost, fíjate si funciona llamándolo desde la IP. Fijate los comentarios de más arriba que tuvieron un problema parecido.
ResponderEliminarhola, gracias por el código, me niegan el permiso para conectarse a la base de datos, estoy usando el servidor wamp, a continuación se muestra el mensaje de error, por favor ayuda
ResponderEliminar-----------------------
chipId: 2672208
..
WiFi conectado
192.168.4.7
0.00
Enviando datos a SQL...
DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN
403 Forbidden
Forbidden
You don't have permission to access /wamp64/www/sendata.php
on this server.
address Apache/2.4.23 (Win64) PHP/5.6.25 Server at 192.168.4.5 Port 80 /address
/body/html
Buenas no se si pudiste arreglar ese error?
EliminarHow i fix that
ResponderEliminarFatal error: Uncaught Error: Call to undefined function mysql_connect() in C:\xampp\htdocs\tutorial\enviardatos.php:2 Stack trace: #0 {main} thrown in C:\xampp\htdocs\tutorial\enviardatos.php on line 2
Excelente Video Muchas gracias .
ResponderEliminarGracias Ale he aprendido mucho contigo sobre el esp, gracias, terminare de ver todos tus tutoriales, que tengas un excelente próximo año
ResponderEliminarMuchas gracias por el comentario. Feliz año!!
EliminarHola a todos. Por qué en monitor serie salta de "Enviando datos a sql" a repetir todo el loop? Sólo aparece los estados de conexión. Por supuesto, la base de datos no recibe ninguna información. Aclaro que estoy empleando el nuevo código php, puesto que el expuesto en el ejemplo ya no sirve para versiones posteriores. No se si eso tenga que ver con el conflicto.
ResponderEliminarHola! Estoy realizando su proyecto, pero no puedo guardar los datos en la base, de echo tmb lo comenta en su video sobre esta falla. puedo ingresar desde la base que es la prueba uno, pero el que es desde la pagina y esta envia los datos a la base no(min 11:41), por lo que en el ESP cuando lo cargue me marca basura. Espero y me pueda ayudar
ResponderEliminarHOLA ESTIMADO UNA CONSULTA QUISIERA INSTALAR UNISERVER VERSION CORAL COMO LA DE TU TUTORIAL, LA PREGUNTA ES DONDE DESCARGO ESE PROGRAMA. GRACIAS
ResponderEliminarhola, me podrian decir como se aplica o en donde se aplica el formulario y para que sirve, tambien como envian el dato yo sabia que se utilizaba el GET en el programa, por favor saludos
ResponderEliminarHola Alejandro, estoy probando tus codigos y hasta el momento van bien.
ResponderEliminarEn esta ocasión me está ocurriendo que desde la url xxxx.epizy.com ejecuta el index.html y, al igual como te sucedió, no guarda los valores chipid y temperatura pero phpmyadmin incrementa el ID. Además al hacer ping no me responde, por el contrario en el cmd indica: Tiempo de espera agotado.
Qué más debo realizar para concretar las pruebas?.
Desde ya muchas gracias por tu respuesta.
Saludos desde Perú.
Carlos.
Hola, me marca error al cargar la libreria ESP8266WIFI, alguein sabe la solución? Gracias
ResponderEliminaranimate realizar un dron con con tu tutorial del carrito para poder manejar desde tu android
ResponderEliminarSaludos, me tira el mensaje que me dice "No engo permisos para acceder al servidor"
ResponderEliminarEste mensaje me sale en el monitor serial, parentemente ya se conecto a la red wifi
Hola, buen día. Una pregunta,¿Donde podría encontrar las librerias de uso?
ResponderEliminarHola muy buen vídeo,una consulta de donde puedo descargar la libreria gracias
ResponderEliminarhola buen video pero me da un error de la libreria la e instalado de distintos sitios pero es lo mismo
ResponderEliminaralquien sabe como solucionarlo o donde descargar
libreria ESP8266WiFi
ResponderEliminarhttps://github.com/esp8266/Arduino
Eliminargracias por la respuesta y la wificlient si es posible el link
EliminarEstá todo en ese git. Saludos
Eliminarhola como estas. ahora utilizando tu programa uniform server y tu código para ESP8266 puedo ingresar datos perfectamente desde el formulario asia la DB. El ESP se conecta perfecto y comprobado a la Red WIFI. pero me sigue dando Fallo de conexión en el panel serie del IDE Arduino.
ResponderEliminarEstoy utilizando un router de telefonica puede ser que este configurado para no utilizar mi pc como server. ya que tampoco puedo ver una cámara IP desde afuera, solamente la veo en mi red interna??
Utilizando mi celular con datos moviles; poniendo la ip y la ruta asta el formulario. No entra dise:: No se puede acceder a este sitio.
ResponderEliminarCon datos moviles nunca va a funcionar. Saludos.
Eliminarahora con mi celular con mi red wifi:: pude entrar al formulario!!
ResponderEliminary envio el dato correcto a la DB!!
ResponderEliminarEs un buen indicio de que la parte del server está funcionando bien. Saludos.
EliminarHello There,
ResponderEliminarI tried but i got errors regarding the libraries that you used..
..
Can you please send me these libraries in .zip format so that i will upload it in Arduino IDE
Hola! Tengo un problema, trato de tener un webserver y a la vez sacar datos o mandarlos desde el ESP8266, el problema es que en la parte de client.connect jamás me conecta con la base de datos tengo que cambiar algo en XAMPP? Por que puse otra direccion y me dio la respuesta pero con XAMPP no es así
ResponderEliminarHola, gracias por el tutorial.. me sirvió de mucho. Una pregunta: qué diferencias habría si lo hiciera descargando las versiones más recientes del uniserver? aunque no tienen el nombre tal como Coral si no ZeroXIII. Gracias!
ResponderEliminarHola una pregunta cuando quiero enviar los datos atravez del formulario me dice lo siguiente
ResponderEliminarNot Found
The requested URL /tutorial/enviardatos.php was not found on this server
ayudenme ya hize los pasos anteriores y no me envia ningun dato
Este comentario ha sido eliminado por el autor.
ResponderEliminargran trabajo, puedes tener el código para esp32 + dth22.
ResponderEliminarSolo el Código Fuente.
Gracias
Lo voy a tener en cuenta. Saludos.
Eliminarhola, grande compañero, pero tengo un error Fallo de conexion, es necesario dar algun tipo de permiso utilizo XAMPP
ResponderEliminarA mi me pasa lo mismo pudiste solucionarlo ?
EliminarHola, con arduino leonardo no se puede hacer esto verdad ?
ResponderEliminarExcelente tutorial, Felicitaciones...!!
ResponderEliminarBuenas.
ResponderEliminarDisculpá la ignorancia. Pero quería consultarte acerca de esto.
Hice la base de datos con 3 variables: Hora, Fecha, "Tiempo de presión".
Quería saber cómo y con qué podría generar un gráfico donde pueda comparar horas con presión y días. Cómo para tener una idea de qué días de la semana se genera más presión, y a qué horas sucede lo mismo.
Cómo sería?? Lo intenté en excel pero no me doy cuenta cómo hacerlo. Existe alguna otra herramienta para hacer esto que quiero??
Saludos y muchas gracias!
Hola. quizás me puedas dar una mano.
ResponderEliminarLo que quiero es eliminar la última entrada ingresada en la tabla. Por lo que vi, en sql query sería así "delete from tabla
order by id desc limit 1" (y funciona).
Para lograr esto tendría que modificar el código del php y del wemos no??
Gracias.
pd.:la idea es que eso suceda cuando aprieto un botón.
buenas noches realiza los respectivos paso del tutorial con todo y me generar un error
ResponderEliminarWiFi conectado
192.168.0.14
15.00
Fallo de conexion
14.00
Fallo de conexion
14.00
Fallo de conexion
Has sido capaz de solucionarlo??
Eliminarel error es tuyo, es muy seguro que te has equivocado en los nombres de las variables. También fíjate si ese programa de php de la versión que es, se puede aún ejecutar y realizar la interacción con mysql, yo tuve que volver a realizar el programa de nuevo con php 7, aunque no creo que tengas problemas ya que es un servidor local y no te debe pedir versión de PHP, así que netamente tu problema está en los nombres de las variables,éxito.
EliminarMe pasa exactamente lo mismo que el comentario anterior de Jhon.
ResponderEliminarLa base de datos mediante el formulario me funciona perfectamente, desde el celular, desde otra computadora de la casa.
Pero el serial monitor de arduino me da 'fallo de conexion' y la db no se alimenta
hola!! yo tengo un problema,
ResponderEliminarya conecte la base de datos, ya esta funcionando, pero ahora quiero ponerle un sensor mas igual un DHT11 y siempre me manda el error de que faltan los sensores
#include
#include
#include
------------------VARIABLES GLOBALES-------------------------
int contconexion = 0;
const char *ssid = "";
const char *password = "";
#define DHTPIN1 12
#define DHTPIN2 14
#define DHTTYPE1 DHT11
#define DHTTYPE2 DHT11
DHT dht1(DHTPIN1, DHTTYPE1);
DHT dht2(DHTPIN2, DHTTYPE2);
unsigned long previousMillis = 0;
char servername[]="tibsapps.com.mx";
//char host[48];
String strhost = "";
String strurl = "/sensores/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(servername, 5000)) {
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: application/x-www-form-urlencoded" + "\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");
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 t1 = dht1.readTemperature();
float h1 = dht1.readHumidity();
float t2 = dht2.readTemperature();
float h2 = dht2.readHumidity();
if (isnan(h1) || isnan(t1)); {
Serial.println("Falla al leer el sensores DHT11 !");
return;
Serial.println(t1);
Serial.println(h1);
if (isnan(h1) || isnan(t2)); {
Serial.println("Falla al leer el sensores DHT11 !");
return;
Serial.println(t2);
Serial.println(h2);
enviardatos("chipid=" + chipid + "&temperatura1=" + String(t1, 2) + "&humedad1=" + String(h1, 2) + "&temperatura2=" + String(t2, 2) + "&humedad2=" + String(h2, 2));
}
}
}
}
espero me puedan ayudar
para el esp32 habra alguna forma de hacerlo?
ResponderEliminares casi igual, la libreria espwifi.h se cambia por WiFi.h y me molestó con el chipid, pero simplemente lo saqué
Eliminarhola ...muy buen tutorial,disculpe tengo un problema, es que si me aparece el mensaje de que se envian los datos pero no aparecen en la base de datos.
ResponderEliminarMuchas gracias me soluciono un problema que tenia en el post.
ResponderEliminarGracias
hola, buen video, tengo un problema, me aparece fallo de conexion y no he podido encontrar en la host pongo la ip que me aparece conectado al wifi, pero quisiera saber cual puede ser el problema cuando lo pongo en en el formulario html si funciona y envia los datos pero desde arduino, no
ResponderEliminarpor favor.. . puede subir la parte del armado elctronico del proyecto
ResponderEliminarEstimado muchas gracias, aunque el código php que usó parece tener algunas funciones obsoletas, tuve que modificarlo un poco. Acá está por si a alguien le sirve:
ResponderEliminar
EliminarHola, oye, podrías pasarme el código que usaste por favor, tengo unos problemas para recibir los datos enviados y me gustaría comparar ambos códigos. Gracias.
EliminarCon el permiso del autor Comparto código esp8266 y dht11. Funcional
ResponderEliminar//Conexion Wifi
#include
#include
#include
#include "DHT.h"
int TempHum= D1;
int Temp, Hum;
DHT dht (TempHum,DHT11);
//-------------------VARIABLES GLOBALES--------------------------
int contconexion = 0;
const char *ssid = "Nombre_red";
const char *password = "Pw_red";
unsigned long previousMillis = 0;
char host[48];
String strhost = "192.168.5.xxx";
String strurl = "/Domotica/enviardatos.php";
String Estacion = "1002";
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 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: application/x-www-form-urlencoded" + "\r\n" +
"\r\n" + datos);
delay(10);
//Serial.print("Enviando datos a SQL...");
Serial.print("On Line...");
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 servidor 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);
dht.begin();
Serial.println("");
//Serial.print("chipId: ");
chipid = String(ESP.getChipId());
//chipid = 1500;
// 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,5,100);
IPAddress gateway(192,168,5,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 wifi");
}
}
//--------------------------LOOP--------------------------------
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= 30000) { //envia la temperatura cada 30 segundos
previousMillis = currentMillis;
//========================================
Hum= dht.readHumidity();
Temp= dht.readTemperature();
//========================================
enviardatos("Estacion=" + Estacion +"&chipid=" + chipid + "&temperatura=" + String(Temp) + "&Humedad=" + String(Hum));
}
}
Eliminarcreate database Domotica;
use Domotica;
/*Tabla Estaciones*/
drop table if exists Estacion;
CREATE TABLE Estacion(
Id_Estacion int ,
Nombre_Estacion varchar(20) not null,
Tipo varchar(20) NOT NULL ,
ubicacion varchar(20) not null,
Notas varchar(50),
Fecha_Creacion timestamp,
primary key (Id_Estacion)
);
/*Tabla Lecturas*/
drop table if exists lectura;
CREATE TABLE lectura (
Id int AUTO_INCREMENT,
Estacion int ,
chipId int not null,
Fecha timestamp,
Temperatura float(4,2),
Humedad float(4,2),
PRIMARY KEY(Id),
constraint FK_Estacion FOREIGN KEY(Estacion)REFERENCES Estacion(Id_Estacion) on delete cascade
);
Alguien me podía ayudar estoy manejando el esp32
ResponderEliminar