Hola, soy bastante novato con este dispositivo. Mi objetivo es intentar mandar datos desde él hasta una base de datos que tengo en un sistema WAMP. Para ello me he basado en varios tutoriales pero ninguno sin éxito. Estoy usando el programa Uniform Server como sistema WAMP.
Para empezar he creado una base de datos en phpmyadmin llamada tutorial y dentro de ella una tabla de 4 columnas llamada datos. En la primera columna he establecido un dato de tipo int autoincremental llamado id. Luego otra columna llamada fecha donde utilizo timestamp donde se establece la hora y fecha que se registró cada dato. Después otra columna llamada serie, donde pretendo meter un número identificador del dispositivo ESP8266 que estoy utilizando. Por último, he establecido una última columna llamada temperatura donde quiero que se introduzcan los valores de temperatura que registre un sensor (de momento no lo he conectado y en su lugar he introducido en el código un valor numérico constante ej 97).
Sabiendo esto, procedo a exponer el código que he introducido en el ESP8266:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
//-------------------VARIABLES GLOBALES--------------------------
int contconexion = 0;
const char *ssid = "NOMBRE DE LA RED WIFI";
const char *password = "CONTRASEÑA DE LA RED 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));
}
}
Aquí también muestro el código php (prueba3averquetal.php) en el que se basa el código introducido en el ESP8266:
<?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!"; ?>Cuando miro el Monitor Serie de la id de arduino una vez que he introducido el código, el resultado es este:
.
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!
Aparentemente funciona, pero luego cuando compruebo si hay nuevos datos en la tabla de mi base de datos en phpmyadmin, no hay nada. No se que puedo estar haciendo mal.
Muchas gracias si habeis llegado hasta aquí :)))! Toda ayuda será agradecida y perdonar si soy demasiado n00b