Hola estoy intentando cargar un codigo que contiene un HTML en el arduino comunicado con comandos AT.
Este funciona , pero la pagina en el pc aunque sale entera se queda cargando constantemente, no termina la carga.Problema que no me deja hacer otras opciones bien como refrescar la pagina para otro fines.
El codigo en cuestion es este:
#include <SoftwareSerial.h>
SoftwareSerial ESP8266(2, 3); // RX | TX
#define DEBUG true
int x1=0;
void setup()
{ Serial.begin(9600);
ESP8266.begin(9600);
pinMode(13,OUTPUT);
pinMode(12,OUTPUT);
pinMode(11,OUTPUT);
pinMode(10,OUTPUT);
//EnvioDeDatos("AT+RST\r\n",2000,DEBUG); // resetea el modulo
EnvioDeDatos("AT+CWMODE=1\r\n",1000,DEBUG); // Cconfigura el modulo en Estación
EnvioDeDatos("AT+CWJAP='ssid','pasword'\r\n",1000,DEBUG); // datos de tu red.
EnvioDeDatos("AT+CIFSR\r\n",1000,DEBUG); // Nos muestra nuestra Ip asignada.
EnvioDeDatos("AT+CIPMUX=1\r\n",1000,DEBUG); // Configura multiples coneciones
EnvioDeDatos("AT+CIPSERVER=1,80\r\n",1000,DEBUG); // Inicializa el servidor web
}
void loop()
{
while (ESP8266.available() >0 ) // se recibieron datos.
{char c = ESP8266.read(); // lee los datos.
Serial.print(c); // Los reenvia por el puerto hardware para que veamos que estamos recibiendo.
if (c == 71) // Si recibe un GET al ver la primera letra incia la transmision de datos.
{Serial.println("peticion recibida"); // No dice que ha recibido una peticion.
delay(1000);
codigoServidor();
}
}
while(x1==1){
if(ESP8266.find("+IPD,")){
delay(500);
int connectionId = ESP8266.read()-48;
ESP8266.find("pin=");
int pinNumber = (ESP8266.read()-48)*10;
pinNumber += (ESP8266.read()-48);
digitalWrite(pinNumber, !digitalRead(pinNumber));
Serial.print("Pulsado pin ");
Serial.println(pinNumber);
}
}
}
void codigoServidor(){
escribir("<!DOCTYPE HTML>");
escribir("<html>"); //una pagina web necesita esto <HTML> y </HTML> es el inicio y fin del documento
escribir("<head><title>botones arduino esp8266 html</title>"); //nombre de la pestaña que llevara la pagina
escribir("<body><h1> <FONT SIZE=\"5\" COLOR=\"red\"> botones </h1>"); //titulo del inicio de la pagina
escribir(" <BODY BGCOLOR=\"black\"> ");
escribir("<input type=\"button\" onclick=\"location.href='http://192.168.1.133/pin=13' \" value=\"pin 13\" name=\"boton1\" style='width:100px; height:50px'/>");
escribir("<input type=\"button\" onclick=\"location.href='http://192.168.1.133/pin=12' \" value=\"pin 12\" name=\"boton2\" style='width:100px; height:50px'/>");
escribir("<input type=\"button\" onclick=\"location.href='http://192.168.1.133/pin=11' \" value=\"pin 11\" name=\"boton3\" style='width:100px; height:50px'/>");
escribir("<input type=\"button\" onclick=\"location.href='http://192.168.1.133/pin=10' \" value=\"pin 10\" name=\"boton4\" style='width:100px; height:50px'/>");
escribir("<DIV align=\"center\"><A HREF=\"http://www.hetpro.com\" target=\"_blank\">hetpro.com</a>
</DIV>");
escribir("</html>");
x1=1;
}
void escribir(String text)
{ESP8266.print("AT+CIPSEND=0,");
ESP8266.println(text.length());
if (ESP8266.find(">")){ // Si se recibe el mensaje
{Serial.println(text);
ESP8266.println(text); //mandamos el mensaje por el wifi
delay(1);}
while ( ESP8266.available() > 0 )
{
if ( ESP8266.find("SEND OK") ){ //buscamos "ok" y luego salimos
DEBUG; }
}
}
}
String EnvioDeDatos(String command, const int timeout, boolean debug)
{
String cadena = "";
ESP8266.print(command); // enviar el carácter leído al modulo
long int time = millis();
while( (time+timeout) > millis())
{
while(ESP8266.available())
{
// Muestra los Datos de salida del modulo por el seguimiento de la serie
char c = ESP8266.read(); //Lee el proximo caracter
cadena+=c;
}
}
if(debug)
{
Serial.print(cadena);
}
return cadena;
}
El error esta seguro en el codigo.
Pues si meto este mas sencillo va perfecto y carga por completo.
#include <SoftwareSerial.h>
// arduino Rx (pin 2) ---- ESP8266 Tx
// arduino Tx (pin 3) ---- ESP8266 Rx
SoftwareSerial esp8266(2,3);
void setup()
{
Serial.begin(9600); // monitor serial del arduino
esp8266.begin(9600); // baud rate del ESP8255
pinMode(13,OUTPUT);
digitalWrite(13,LOW);
sendData("AT+RST\r\n",2000); // resetear módulo
sendData("AT+CWMODE=1\r\n",1000); // configurar como cliente
sendData("AT+CWJAP=\"ssid\",\"pasword\"\r\n",8000); //SSID y contraseña para unirse a red
sendData("AT+CIFSR\r\n",1000); // obtener dirección IP
sendData("AT+CIPMUX=1\r\n",1000); // configurar para multiples conexiones
sendData("AT+CIPSERVER=1,80\r\n",1000); // servidor en el puerto 80
}
void loop()
{
if(esp8266.available()) // revisar si hay mensaje del ESP8266
{
if(esp8266.find("+IPD,")) // revisar si el servidor recibio datos
{
delay(1500); // esperar que lleguen los datos hacia el buffer
int conexionID = esp8266.read()-48; // obtener el ID de la conexión para poder responder
esp8266.find("led="); // bucar el texto "led="
int state = (esp8266.read()-48); // Obtener el estado del pin a mostrar
digitalWrite(13, state); // Cambiar estado del pin
while(esp8266.available()){
char c = esp8266.read();
Serial.print(c);
}
//responder y cerrar la conexión para que el navegador no se quede cargando
// página web a enviar
String webpage = "";
if (state==1) webpage += "<h1>LED_13 = encendido!</h1>";
else { webpage += "<h1>LED_13 = apagado!</h1>";}
// comando para enviar página web
String comandoWebpage = "AT+CIPSEND=";
comandoWebpage+=conexionID;
comandoWebpage+=",";
comandoWebpage+=webpage.length();
comandoWebpage+="\r\n";
sendData(comandoWebpage,1000);
sendData(webpage,1000);
// comando para terminar conexión
String comandoCerrar = "AT+CIPCLOSE=";
comandoCerrar+=conexionID;
comandoCerrar+="\r\n";
sendData(comandoCerrar,3000);
}
}
}
/*
Enviar comando al esp8266 y verificar la respuesta del módulo, todo esto dentro del tiempo timeout
*/
void sendData(String comando, const int timeout)
{
long int time = millis(); // medir el tiempo actual para verificar timeout
esp8266.print(comando); // enviar el comando al ESP8266
while( (time+timeout) > millis()) //mientras no haya timeout
{
while(esp8266.available()) //mientras haya datos por leer
{
// Leer los datos disponibles
char c = esp8266.read(); // leer el siguiente caracter
Serial.print(c);
}
}
return;
}]
Lo que ocurre que al ser un poco diferentes no soy capaz de ver donde fallo.
Gracias de antemano.
Un Saludo a todos.