Necesito ayuda, estoy trabajando con un arduino y un modulo Esp8266 del básico para mandar datos de unos sensores a una base de datos en MySQL haciendo uso de XAMPP con el servidor Apache. El problema es que no puedo mandar unas simples constantes. Probe enviar los datos directamente en el navegador haciendo la solicitud PHP y funciono, pero con el modulo no funciona, no se que más hacer. Con MIT APP inventor si puedo guardar los datos haciendo un puente con el telefono mediante la conexión Bluetooth, pero quiero hacer que el sistema directamente lo mande a la base de datos.
Codigo
void setup() {
Serial1.begin(115200); // Inicia la comunicación con el módulo ESP8266
Serial.begin(115200);
Serial1.setTimeout(2000);
//Verificamos si el ESP8266 responde
Serial1.println("AT");
if(Serial1.find("OK"))
Serial.println("Respuesta AT correcto");
else
Serial.println("Error en ESP8266");
//-----Configuración de red-------//Podemos comentar si el ESP ya está configurado
//ESP8266 en modo estación (nos conectaremos a una red existente)
Serial1.println("AT+CWMODE=1");
if(Serial1.find("OK"))
Serial.println("ESP8266 en modo Estacion");
//Nos conectamos a una red wifi
Serial1.println("AT+CWJAP=\"GOTV-FDEE\",\"DCU4698H\"");
Serial.println("Conectandose a la red ...");
Serial1.setTimeout(10000); //Aumentar si demora la conexion
if(Serial1.find("OK"))
Serial.println("WIFI conectado");
else
Serial.println("Error al conectarse en la red");
Serial1.setTimeout(2000);
//Desabilitamos las conexiones multiples
Serial1.println("AT+CIPMUX=0");
if(Serial1.find("OK"))
Serial.println("Multiconexiones deshabilitadas");
//------fin de configuracion-------------------
delay(1000);
}
void loop() {
delay(2000);
// Recolecta datos de los sensores
float dureza = 60.0;
float ph = 6.5;
float turbidez = 20.0;
// Construye el mensaje JSON
String jsonMessage = "accion=insertarAgua&";
jsonMessage += "ph=";
jsonMessage += String(ph);
jsonMessage += "&dureza=";
jsonMessage += String(dureza);
jsonMessage += "&turbidez=";
jsonMessage += String(turbidez);
// Envía el mensaje al ESP8266
sendToESP8266(jsonMessage);
delay(5000); // Espera un intervalo de tiempo antes de tomar otra lectura
}
void sendToESP8266(String message) {
Serial1.println("AT+CIPSTART=\"TCP\",\"192.168.1.72\",80");
if (Serial1.find("OK")) {
Serial.println("Conexión establecida con el servidor");
// Construye la solicitud GET sin HTTP/1.1 al final
String getRequest = "GET /ecoriegobd.php?" + message + " HTTP/1.1\r\n";
getRequest += "Host: 192.168.1.72\r\n";
getRequest += "Connection: close\r\n\r\n";
// Calcula la longitud total de la solicitud
int totalLength = getRequest.length();
Serial.println(getRequest);
String requestToSend = "AT+CIPSEND=";
requestToSend += String(totalLength);
Serial1.println(requestToSend);
Serial.println("Esperando confirmación para enviar datos...");
if (Serial1.find(">")) {
Serial.println("Confirmación recibida. Enviando datos al servidor...");
Serial1.print(getRequest);
delay(1000); // Espera un momento antes de buscar la respuesta del ESP8266
if (Serial1.find("SEND OK")) {
Serial.println("Datos enviados correctamente");
Serial1.println("AT+CIPCLOSE"); // Cierra la conexión
} else {
Serial.println("Error al enviar datos");
}
} else {
Serial.println("Error: no se recibió confirmación para enviar datos");
}
} else {
Serial.println("Error al establecer conexión con el servidor");
}
}
Salida:
WIFI conectado
Multiconexiones deshabilitadas
Conexión establecida con el servidor
GET /ecoriegobd.php?accion=insertarAgua&ph=6.50&dureza=60.00&turbidez=20.00 HTTP/1.1
Host: 192.168.1.72
Connection: close
Esperando confirmación para enviar datos...
Confirmación recibida. Enviando datos al servidor...
Error al enviar datos