Go Down

Topic: Problema con ESP8266 a la hora de enlazarlo con myslq a través de PHP (Read 206 times) previous topic - next topic

byalberto8

Buenas, soy bastante noob con este dispositivo. Mi intención con él es mandar datos desde el mismo a una base de datos alojada en mi PC. Para ello he usado un sistema WAMP, más concretamente el programa UNIFORM SERVER. He seguido diferentes tutoriales sin mucho éxito.

En primer lugar, establecí una base de datos a través de phpmyadmin llamada tutorial. Dentro de la misma, establecí una tabla llamada datos. Ésta estaba compuesta por cuatro columnas, llamándose la primera id, siendo de tipo entero y auotincremental. La segunda columna se llama fecha y está establecida con timestamp, de tal forma que cada vez que se registre un dato se establezca la fecha en la que se ha realizado dicha acción. La tercera se llama serie, y se establece como un entero para identificar con un número al dispositivo ESP8266 que esta enviando el dato que corresponde. Por último, la cuarta columna se llama temperatura y en ella se ha establecido el tipo de dato como float y será la columna donde se registren los datos recogidos por un sensor de temperatura asociado al ESP8266. De momento, esto último no lo he cumplido del todo, ya que los datos registrados por el sensor los he sustituido por un valor numérico constante de valor 97 en el código que he introducido en el ESP8266. De esta forma, toda los valores de la columna temperatura deberían de ser 97 (es solo para ver si los datos son recibidos correctamente por la base de datos).

Sabido esto, presento a continuación el código arduino que he introducido en mi placa ESP8266:

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

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

const char *ssid = "NOMBRE DEL WIFI";
const char *password = "CONTRASEÑA DEL WIFI";

unsigned long previousMillis = 0;

char host[48];
String strhost = "192.168.1.142";
String strurl = "/ESP/prueba3averquetal.php";
String chipid = "232";

//-------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,158);
     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 = 97;
   float temp = analog*1;
   Serial.println(temp);
   enviardatos("chipid=" + chipid + "&temperatura=" + String(temp, 2));
 }
}

Y ahora presento el código en PHP que está asociado al código arduino anterior:

<?php
$cons_usuario="root";
$cons_contra="root";
$cons_base_datos="tutorial";
$cons_equipo="localhost";

$obj_conexion = mysqli_connect($cons_equipo,$cons_usuario,$cons_contra,$cons_base_datos);
$serie = $_POST ['serie'];
$temperatura=$_POST ['temp'];
   $var_consulta= "INSERT INTO `datos` (`id`, `fecha`, `serie`, `temperatura`) VALUES (NULL, current_timestamp(), '$serie', '$temperatura');";
   $var_resultado = $obj_conexion->query($var_consulta);
echo "Datos ingresados correctamente!";
?>

Este php lo tengo en la carpeta www del programa UNIFORM SERVER y funciona perfectamente cuando mando datos por protocolo POST a través de un formulario.

Mi PROBLEMA se presenta cuando cargo el primer código en la ESP8266, que aparentemente se carga bien y se optiene por el monitor serial las siguientes respuestas:
.
WiFi conectado
192.168.1.158
97.00
Enviando datos a SQL...
Datos ingresados correctamente!
97.00
Enviando datos a SQL...
Datos ingresados correctamente!
97.00
Enviando datos a SQL...
Datos ingresados correctamente!
97.00
Enviando datos a SQL...
Datos ingresados correctamente!

Parece que todo ha ido sobre ruedas, pero cuando me dirijo a phpmyadmin, concretamente a la tabla datos, no se ha introducido nada!
No se que puede estar mal, si alguien lo detecta (seguramente sí porque soy muy novato) que porfavor me lo diga y le estaré agradecido!

surbyte

Moderador:
cuando llegas a un foro nuevo, lo primero que debes hacer es leer como manejarte dentro del mismo.
En este foro el 1er hilo de cualquier sección explica las Reglas para hacerlo.
Los códigos deben postearse usando etiquetas.
Códigos diferentes tambien. Sketch por un lado y código php por otro.
Ahora ve, lee las normas y luego edita tu post.

Gracias.


Go Up