Ethernet SD shield

Hola!

Estoy construyendo un controlador de riego controlable via internet con arduino, mediante un servidor html almacenado en una SD conectada a través de una ethernet shield.

El problema hasta ahora es que a pesar de que he hecho funcionar la ethernet shield correctamente y he creado un html que funciona no he conseguido cargarlo a través de la ethernet. Después de hacer muchas pruebas he llegado a la conclusión de que por algun motivo la SD no se carga correctamente.

He comenzado entonces a hacer pruebas cargando el código de ejemplo "CardInfo" que viene con Arduino, pero una vez cargado el monitor serie no muestra nada cuando lo abro y da la impresión de que la placa no hace nada.

A que puede deberse esto? Utilizo una placa original Arduino UNO y una ethernet SD shield clon.

No pongo el código del CardInfo porque lo podeis ver en Arduino.

Graciassss!! Saludos!!!

Investigando un poco más, he llegado a la conclusión de que por algún motivo la placa ethernet no responde al puerto serial. Cuando cargo el programa CardInfo solo en la placa Arduino UNO y abro el monitor serial me responde diciendome que no hay ningúna tarjeta SD (lo esperable), sin embargo cuando hago lo mismo con la placa ethernet montada simplemente no muestra nada. No obstante, he hecho pruebas con la placa ethernet en cuanto a comunicarme con ella via internet (o red) se refiere y me ha respondido correctamente, además en ese caso si tengo abierto el monitor serial si que me muestra la información de conexión habitual en este tipo de conexiones. Da la impresión de que la placa ethernet no interpreta correctamente el "void setup" a través del puerto serial al menos.

Alguien que me diga donde me estoy equivocando??

Gracias!!

Acabo de ver que las placas ethernet similares a la mia que venden en internet no permiten usar el puerto rj45 y la tarjeta SD al mismo tiempo. Quizá sea este mi problema. ¿Que significa exactamente que no se pueden usar al mismo tiempo? ¿Puede ser que no pueda usar la SD al mismo tiempo que me conecto a la tarjeta de red?

Saludos!!

Hola, yo lo que veo es que si cargas un código CON HTML en la placa, y la sd está metida, no funciona nada. Tengo que sacar la SD y entonces funciona todo.

Yo no sabia del cardinfo y buscando por la red, encontré un trozo de código para esto mismo, para que me comprobara la SD y que yo fuera viendo lo que iba pasando (Lo del void Setup, debajo de Serial.begin(9600) ), le añadí la cabecera http, la configuración y fui viendo el proceso en el monitor serial..

Metele este código (Cambia la mac, IP, gateway y server port) a ver si cuando abras el monitor, ves algo (Y mete el index.htm en la sd):

#include <SD.h>								//Iniciamos la libreria SD
#include <SPI.h>							//Iniciamos la libreria Serial Peripheral Interface
#include <Ethernet.h>							//Iniciamos la libreria Ethernet

byte mac[]	= {0x90,0xA2,0xDA,0x00,0x00,0x00}; 			// Declaramos la MAC (Los 3 primeros octetos son de arduino, los otros inventados)
byte ip[]    	= {192,168,0,2}; 		 			// Declaramos la IP de la shield
byte gateway[]  = {192,168,0,1}; 					// Declaramos la IP del router
byte subnet[] 	= {255,255,255,0};					// Declaramos la mascara de subred
EthernetServer servidor(1080);						// Declaramos el puerto TCP del servidor 1080

File webFile;

void setup()
{
   Ethernet.begin(mac, ip, gateway, subnet);				// Inicializamos con las direcciones asignadas
   servidor.begin();							// Arrancamos el server
   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();			// Server disponible. Intentamos tener un cliente
  
  if(cliente)								
  {
    boolean lineaenblanco=true;						// Tenemos un cliente??	(VERDADERO O FALSO)		
    while(cliente.connected())						// Cliente conectado
    {									// Los datos del cliente estan preparados para leerlos
      if(cliente.available())						// Si el cliente esta¡ disponible
      {
        char c=cliente.read();						// Leemos peticion HTTP caracter a caracter(1 byte del cliente)


   	if (c == '\n' && lineaenblanco) {				// La ultima linea de la peticion es en blanco y finaliza con "\n"
									// Responde al cliente despues de la ultima li­nea recibida
	cliente.println("HTTP/1.1 200 OK");				// Manda una cabecera http estandar
                    cliente.println("Content-Type: text/html");
                    cliente.println("Connection: close");
                    cliente.println();
                    							// Manda una pagina web
                    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
                }
            } 								 // Fin si (cliente.available())
        } 								 // Fin mientras (cliente.connected())
        delay(1);      							 // Dar tiempo al navegador web para recibir los datos
        cliente.stop(); 							 // Cerramos conexion
    } 									 // Fin si (cliente)
}

No sé que decirte, pero o puede que tengas el shield cascado o lo que está cascado es el bus entre la sd y el shield..A ver si alguien que controle más te dice algo mas específico del shield....

Saludos

Gracias por la respuesta!! He probado el código de dos maneras, con la SD y sin ella, y la sorpresa es que sin la SD al menos me da el mensaje de "ERROR - Inicializacion MicroSD fallida!". Con la SD sigue sin responder y empiezo a pensar que la placa puede venir defectuosa, porque no le encuentro otra explicación. El código no es complicado y hay mil ejemplos estándar para probar, ya es casualidad que no funcione ninguno y sin embargo la shield si funcione correctamente en cuanto a comunicaciones normales se refiere.

Esperare a ver si a alguien se le ocurriera algo pero sino estoy pensando en comprar este modelo: Ethernet Shield Module W5100 Micro SD Card Slot For UNO MEGA 2560 Geekcreit for Sale - Banggood USA sold out-arrival notice Es el típico que venden en deal extreme y sitios similares, y tiene muy buenas opiniones. El mío también es un clon, pero no es exactamente el mismo y además lo compré por ebay. A saber...

Saludos!!

Y has probado la sd en un pc ???
:cold_sweat:

Si. La he formateado un par de veces en FAT32 y 16 y he cargado el archivo index.htm. La tarjeta funciona perfectamente. Me decanto más por un problema en la ethernet shield.

Hola, pues lo más seguro es que se te haya cascado...Mira a ver si te cambian el escudo si está en garantia aún...

Salu2

Al final he comprado otra. La que compre por Ebay ya no está en garantía, pero bueno por 6 euros... a ver si con esta tengo más suerte.

Voy informando.

Estaba rota jaja.

Saludos!!