Hola a todos! Bueno paso a contarles, estoy aprendiendo a encender y apagar dos leds a traves de la ethernet shield de arduino. El arduino utilizado es el UNO y una Shield Ethernet con micro SD. Usando una web embebida en la memoria del shield funciona perfecto pero luego modifique el codigo para que me leyera la web alojada en la micro SD. Es un simple index.htm con 4 botones (2 encienden los leds y 2 apagan los leds).
Cuando intento ingresar a la IP programada el navegador me da error, es como que el arduino no me levanta la web que tengo alojada en la micro SD, me fije en el monitor serial del compilador y la tarjeta me la lee exitosamente.
Les dejo el codigo para ver si alguien me puede dar una mano con esto.
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
//Declaración de la direcciones MAC e IP. También del puerto 80
byte mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED}; //MAC
IPAddress ip(192,168,1,85); //IP
EthernetServer servidor(80);
File webFile;
int PIN_LED1=7;
String readString1=String(30);
String state1=String(3);
int PIN_LED2=8;
String state2=String(3);
void setup()
{
Ethernet.begin(mac, ip); //Inicializamos con las direcciones asignadas
servidor.begin();
pinMode(PIN_LED1,OUTPUT);
digitalWrite(PIN_LED1,LOW);
state1="OFF";
pinMode(PIN_LED2,OUTPUT);
digitalWrite(PIN_LED2,LOW);
state2="OFF";
Serial.begin(9600); // Iniciamos el monitor serial para comprobar errores
Serial.println("Inicializando MicroSD..."); // Inicializamos la SD card
if (!SD.begin(4)) { // Caso si no hay respuesta por parte de la SD
Serial.println("ERROR - Inicializacion MicroSD fallida!"); // Inicio fallido
return; // Volvemos a intentar inicializar la SD card
}
Serial.println("EXITO - MicroSD inicializada."); // Caso si hay respuesta por parte de la SD
if (!SD.exists("index.htm")) { // Comprueba en la SD si esta el archivo index.htm
Serial.println("ERROR - No encuentro index.htm!"); // Caso que no encuentra el archivo index.htm
return; // Volvemos a intentar inicializar la SD card
}
Serial.println("EXITO - Index.htm encontrado."); // Caso que si encuentra el archivo index.htm
}
void loop()
{
EthernetClient cliente= servidor.available();
if(cliente)
{
boolean lineaenblanco=true;
while(cliente.connected())//Cliente conectado
{
if(cliente.available())
{
char c=cliente.read();
if(readString1.length()<30)//Leemos petición HTTP caracter a caracter
{
readString1.concat(c); //Almacenar los caracteres en la variable readString
}
if(c=='\n' && lineaenblanco)//Si la petición HTTP ha finalizado
{
int LED1 = readString1.indexOf("LED1=");
int LED2 = readString1.indexOf("LED=");
if(readString1.substring(LED1,LED1+6)=="LED1=T")
{
digitalWrite(PIN_LED1,HIGH);
state1="ON";
} else if (readString1.substring(LED1,LED1+6)=="LED1=F")
{
digitalWrite(PIN_LED1,LOW);
state1="OFF";
}
if(readString1.substring(LED2,LED2+5)=="LED=T")
{
digitalWrite(PIN_LED2,HIGH);
state2="ON";
} else if (readString1.substring(LED2,LED2+5)=="LED=F")
{
digitalWrite(PIN_LED2,LOW);
state2="OFF";
}
//Cabecera HTTP estándar
cliente.println("HTTP/1.1 200 OK");
cliente.println("Content-Type: text/html");
cliente.println("Connection: close");
cliente.println();
//agregado microSD
webFile = SD.open("index.htm"); // Abre el archivo index.htm
if (webFile) {
while(webFile.available()) {
cliente.write(webFile.read()); // Manda una pagina web al cliente
}
webFile.close();
}
break;
}
// Cada linea del texto recibido del cliente acaba con "\r\n"
if (c == '\n') {
// Comenzando una nueva linea con el siguiente caracter leido
lineaenblanco = true; // Ultimo caracter en la linea de texto recibido
}
else if (c != '\r') {
lineaenblanco = false; // Un caracter de texto se recibe del cliente
}
cliente.stop();//Cierro conexión con el cliente
readString1="";
}}}}
Muchas gracias