Escolar Documentos
Profissional Documentos
Cultura Documentos
OBJETIVOS
MATERIAL REQUERIDO.
UnShield Ethernet
LAS SD CARD
En los ltimos aos, las tarjetas SD y microSD se han popularizado mucho, debido al auge de la fotografa digital y la telefona mvil. No es fcil
http://www.prometec.net/sdcard/ 1/14
21/6/2016 ShieldEthernetySDcard|TutorialesArduino
encontrar un telfono mvil o Tablet, a quien no se le pueda ampliar la memoria con una de estas tarjetas, con la excepcin claro est, de Apple, que
como es habitual va por libre.
Basadas en la tecnologa de memoria FLASH, permiten escribir con buena velocidad (Relativamente ) y adems no pierden el contenido cuando las
desconectamos, lo que las ha convertido en una solucin de primera para intercambiar informacin.
Desde cmaras de fotos, Telfonos digitales y Memorias USBs, la tecnologa FLASH ha tenido un xito rotundo y una aceptacin masiva, lo que ha
llevado los precios a la baja y prcticamente han acabado con CDs DVDs y dems formatos pticos para la transferencia de informacin.
Hoy da no es raro comprar memorias USB de 8, 16 o 32 Gb por el precio de una entrada de cine. Y como nuestro Shield Ethernet lleva un lector
grabador de tarjetas micro SD, no podamos dejar pasar la ocasin sin ver cmo usarlas.
Lo primero que os interesa saber es que Arduino puede leer y escribir SD Cards con ciertas limitaciones, debido a la librera actualmente en uso.
Como siempre estas limitaciones o especi caciones pueden cambiar en el futuro, pero es importante que las tengis en cuenta.
La primera es que Arduino puede leer y escribir en estas tarjetas, pero no formatearlas. Esto debe hacerse desde vuestros PCs. No es grave, pero es
as.
Lo segundo es que vuestros PCs pueden manejar varios formatos de sistema de archivos, pero la librera SD por ahora solo soporta FAT16 y FAT32.
Ambos formatos son una herencia de los viejos tiempos y de algn modo determinan el mximo tamao de disco (O de tarjeta) que puedes usar. En
principio si usas FAT32 deberas poder usar hasta una tarjeta de 32Gb.
As que si queris que el Shield Ethernet lea vuestra tarjeta, nada de formatearla en NTFS de Windows, HPFS de Apple o extN de Linux. Solo FAT16
y FAT32.
Despus tenemos otra limitacin con los nombres e archivos que quedan limitados al viejo formato 8.3, con nombre de 8 caracteres y extensiones de
tres. Y nada de acentos en los nombres ni s ni espacios en blanco. Nada que no sean letras y nmeros, sin signos raros.
Si usas Windows en cualquier versin, puedes introducir la tarjeta SD y formatearla desde el administrador de archivos. Introduce la tarjeta en el
lector y cuando la reconozca, apuntala y pulsa el botn derecho. Elige la opcin formatear y veras una ventana como esta:
http://www.prometec.net/sdcard/ 2/14
21/6/2016 ShieldEthernetySDcard|TutorialesArduino
En el sistema de archivos puedes elegir FAT32, y mantn el tick en la opcin formato rpido. Con inicio te formatear la tarjeta.
En OSX ve a Aplicaciones, Utilidades, Discos. Elije la tarjeta SD y selecciona el formato de disco MS-DOS FAT
Existe un programa que suelen recomendar si tenis cualquier problema, que tiene versiones para Mac y Windows llamado SD Formatter que podis
descargar gratuitamente de internet. Est desarrollado y soporte por la asociacin de fabricantes de tarjetas SD.
Por ultimo tenis que saber que la librera puede no escribir inmediatamente los datos que le envas a la SD, y para asegurarse de que es as, debes
hacer una llamada a ush (Vaciar) o close (Guardar y cerrar).
COMPROBANDO LA SD CARD
Necesitis saber que el Shield Ethernet y la librera, controlan el acceso a Ethernet y a la SD Card por SPI. Vimos que era as en el caso Ethernet y
recordad que no podamos usar unos pines en el Arduino, los que corresponden a la gestin el bus SPI.
Usamos el pin 10, Slave Select habitualmente en un UNO para seleccionar el acceso a Ethernet (El 53 en un MEGA), y necesitamos otro pin para
indicar que vamos a hablar con la tarjeta SD. En el caso de un Arduino UNO el Shield Ethernet utiliza el pin 4 y por tambin lo reservamos en las
sesiones anteriores.
http://www.prometec.net/sdcard/ 3/14
21/6/2016 ShieldEthernetySDcard|TutorialesArduino
Vamos a comprobar que la SD esta correcta y que podemos usarla. Aseguraros de que esta formateada y ponerle uso pocos cheros en ella (con
nombre 8.3) introducidla en el lector del Shield y enciende Arduino.
Como la librera SD viene de serie con nuestro Arduino, podemos cargar uno de los ejemplos para comprobar que lee la tarjeta:
\\Achivo\Ejemplos\SD\CardInfo
Os informa de que ha podido identi car la SD, y os da informacin del tipo de formato, tamao de la tarjeta y hasta hace un listado de los cheros
que contiene junto con algunas caractersticas.
Si veis algo as, perfecto podemos seguir. SI recibs algn mensaje de error, necesitamos que lo corrijis antes de seguir.
No tener bien encajado el Shield en el Arduino
Por defecto trae el pin 10 como output pero si usis un Mega tenis que cambiarlo pinMode(10,
OUTPUT); // change this to 53 on a mega
EL PROGRAMA DE CONTROL
Para usar la tarjeta SD, tenis en primer lugar que cargar las libreras SPI y la SD:
#include<SPI.h>
#include<SD.h>
pinMode(10,OUTPUT);//ParaunArduinoUNO
pinMode(53,OUTPUT);//ParaunMEGA
SD.begin(4);
http://www.prometec.net/sdcard/ 4/14
21/6/2016 ShieldEthernetySDcard|TutorialesArduino
Donde 4 es el chipSelect es de la tarjeta SD. El resto es fcil. De nir un objeto File para leer un chero de la SD:
Fileroot;
Ya solo queda abrir un chero para lectura. Supn que se llama index.htm
FiledataFile=SD.open("index.htm");
Si consigue abrir correctamente dataFile tomara un valor que apunta a la estructura a leer del chero, en caso contrario se pondr a 0 indicando el
error.
Vamos a ver cmo hacer un programa que lea un chero en la SD y lo envi a la consola para ver lo que contiene:
#include<SPI.h>
#include<SD.h>
constintchipSelect=4;
voidsetup()
{Serial.begin(9600);
while(!Serial);//waitforserialporttoconnect.NeededforLeonardoonly
Serial.print("ProbandoSDcard...");
pinMode(10,OUTPUT);//Estoesnecesarioaunquecreasquenolousas.
if(!SD.begin(chipSelect))
{Serial.println("Nohaytarjeta");
return;//NOsigas
}
Serial.println("Sdencontrada.");
FiledataFile=SD.open("index.htm");
if(dataFile)//Sihapodidoabrirelfichero
{while(dataFile.available())//Mientrasnolleguesalfinal
Serial.write(dataFile.read());//Leeelficheroyenvialoalserie
dataFile.close();//Cierraelficheroalacabar
}
else//SInopuedeabrirelfichero
Serial.println("Error,nopuedousarindes.htm");
}
voidloop()
{}
SD.open() abre el chero que buscamos y devuelve un puntero de tipo File para leer datos directamente., o un 0 si no puede.
Conviene insistir en que la SD card es tambin una clase que deriva de stream y por tanto hereda propiedades que ya conocemos de otras sesiones.
Es el caso de datFile.Available() que vimos anteriormente con Serial como Serial.Available(), es decir, mientras haya datos disponibles, pendientes de
leer.
dataFile.read(), lee un carcter del chero y Serial.write lo enva a la consola. Por ultimo dataFile.Close, cierra y libera el chero .
Si no hacemos dataFile.close(), no podemos estar seguros de que se ha escrito todo lo que queramos al
chero.
No basta con sacar la SD y llevrtela. Si lo haces puedes corromper toda la informacin de la SD Card.
Adems la librera SD solo permite un chero abierto a la vez. Si quieres abrir otro chero tienes que cerrar
primero el anterior
http://www.prometec.net/sdcard/ 5/14
21/6/2016 ShieldEthernetySDcard|TutorialesArduino
La tarjeta SD se comporta como la puesta Serie, y prcticamente se maneja igual, con pequeas diferencias. En el programa anterior para leer el
chero, usbamos:
FiledataFile=SD.open("index.htm");
Sin pasarle ningn parmetro a SD.open() diferente del nombre del chero. Esto hace que lo abramos en forma de lectura, lo que impide que
escribamos en l. Solo podemos leer.
FiledataFile=SD.open("data.txt",FILE_WRITE);
La idea del nuevo programaPrograma 65_2, es que va a escribir unos valores que lee de las puertas A2 a A4 y lo graba en el chero data.txt
(Naturalmente, como no tenemos nada conectado, leer basura, pero eso no nos importa mucho ahora mismo). La parte interesante del programa
est aqu:
FiledataFile=SD.open("data.txt",FILE_WRITE);
if(dataFile)//Sihapodidoabrirelfichero
{dataFile.println("VamosaescribirunpardetextosenlatarjetaSD")
for(intj=0;j<20;j++)
{
dataFile.println("Analog2:"+String(analogRead(A2)));
dataFile.println("Analog3:"+String(analogRead(A3)));
dataFile.println("Analog4:"+String(analogRead(A4)));
dataFile.println("....................................");
delay(100);
}
dataFile.close();
Serial.println("Listo.Terminado");
Volcado();
}
Abrimos el chero data.txt y escribimos a l como si fuera la puerta Serie. Al acabar simplemente cerramos el chero y listo.
Volcado() es una funcin que hace lo que vimos en el programa anterior. Copia a la consola el contenido del chero para que veis lo que contiene.
Si corris el programa unas cuantas veces veris que, la primera vez, crea el chero data.txt y escribe lo que le pedimos en l. Pero si cuando hace
el SD.open () el chero ya existe, la informacin que le enviamos se aade al nal, sin borra el contenido anterior.
Lo que resulta muy prctico cuando quieres grabar informacin de sensores y generar un histrico
Siempre que creas un sistema de cheros en un dispositivo vas a necesitar ayudas para mantenerlo. La librera SD de Arduino, nos da una serie de
funciones para jugar con cheros y directorios. Al hacer
SD.open(File.txt)
Se crea el chero en caso de no existir y podemos leer, pero no escribir. Y cuando hacemos:
SD.open("data.txt",FILE_WRITE)
Se crea, si no existe, y escribir desde el principio. Pero si existe, todo lo que escribamos decamos que se aade al nal de lo que ya exista. Pero a
veces nos interesa empezar una pgina en blanco, lo que podemos hacer borrando el chero si existe:
SD.remove(data.txt);
if(SD.exists(data.txt)
SD.remove(data.txt);
Tambin podemos usar estructuras de directorios (Aunque no tengo claro hasta donde) y podemos crearlos y brrarlos conla SD library:
SD.mkdir("/a/b/c")
SD.rmdir(filename)
Mkdir puede crear directorios anidados y basta con referir el path completo del chero y rmdir los elimina con todo su contenido
MTODO DESCRIPCIN
File. ush() Se asegura de que se escribe en la SD todo. Algo que hace automticamente al hacer close()
File.position() Te indica la posicin donde escribir/leer el prximo carcter en relacin al principio el chero
Coloca el apuntador que indica donde leer/escribir en la posicin que le indicamos a partir del inicio y siempre
File.seek(pos)
que este entre 0 y File.size()
Hay algn que otro mtodo adicional que podis consultar en la documentacin de la SD library
http://www.prometec.net/sdcard/ 7/14
21/6/2016 ShieldEthernetySDcard|TutorialesArduino
RESUMEN DE LA SESIN
Hemos presentado la librera Arduino que nos permite acceder a la SD Card incluida.
Hemos visto un par de ejemplos sencillos, para mostrar cmo se lee y se escribe en la tarjeta.
Hemos visto que cuando escribimos, el modo por defecto, es aadir desde el nal de lo que hubiera. La idea
de esto es facilitar la creacin de registros de datos de una forma cmoda, y es uno de los usos ms
habituales de las tarjetas SD.
ANTERIOR SIGUIENTE
(45) COMMENTS
Suso.
http://www.prometec.net/sdcard/ 8/14
21/6/2016 ShieldEthernetySDcard|TutorialesArduino
Reply
Saludos.
mil gracias
http://www.prometec.net/sdcard/ 9/14
21/6/2016 ShieldEthernetySDcard|TutorialesArduino
Alvaro 15 Nov 2015
Hola que tal muy bueno el tutorial , estube haciendo el servidor web con ethernet shield en el arduino , pero quisiera subir imagenes a la
pagina , como se podria hacer ? Gracias
Reply
Probablemente te funcionar
http://www.prometec.net/sdcard/ 10/14
21/6/2016 ShieldEthernetySDcard|TutorialesArduino
scar
Reply No creo que arduino pueda correr SQL lite, por lo que no creo q sea posible guardar tus datos directamente en la tarjeta
SD, pero podrias enviar esoas lecturas a un servidor y que sea este quien guarda los datos. Echa una ojeada aqui:
http://combustory.com/wiki/index.php/Arduino_Communications_-_SQLite
En la SD puedes guradar textos separados por comas o CSV les, y luego importarlas a SQL lite en tu pc
Despues puedes leer en secuencia buscando el tiempo o lo que sea y lees la linea entera, te da igual que sean
10 valores y seleccionas el que quieres . No se si eso te puede valer
http://www.prometec.net/sdcard/ 11/14
21/6/2016 ShieldEthernetySDcard|TutorialesArduino
resultado: no hay tarjeta
Saludos.
He probado los ejemplos que vienen con el IDE y funcionaban, as que mirando lnea
por lnea he visto que t incluas esa que no estaba en los ejemplos de arduino. Ha
sido marcarla como comentario y a funcionar.
Muchas gracias por todo.
Alberto.
http://www.prometec.net/sdcard/ 12/14
21/6/2016 ShieldEthernetySDcard|TutorialesArduino
cambie la sd de 1gb a 8gb la formatie en fat 16 y 32, y hacen lo mismo, use el ejemplo ListFile de la libreria SD solo que traslade la
lectura en el SETUP que se hace una ves al LOOP con un delay de 500ms para no saturar la sd, pensaras para q quiero re leer un
archivo especial tantas veces, la cuestion es que este error lo tengo con un proyecto en el cual no puedo leer el archivo por mas de esa
cantidad. (aclaro, la prueba que hice es para ver la lista de archivos dentro de una sd, solo puse un archivito nuevo llamada 1.txt) para
eliminar opciones y solo lea algo simple. pero no se que esta pasando, Si lo podes hacerlo vos y me decis q si se puede, entonces me
pego un tiro (en sentido gurado), gracias. ha y tambien probe poner en ves de close() en ush(); igual resultado
Aun cuando ese fuera el caso deberias poder cerrar la sesion y volver a abrir otra vez. Puedes postear el codigo para
revisarlo?
saludos.
Reply http://forum.arduino.cc/index.php?topic=46969.0
Estan hablando de como detectar esto y tiene sus propios problemas pero dependiendo de lo que quieras hacer te puede
valer:
void loop() {
TIENDA
if(SD.exists(test le.txt)) Serial.println(Fiel Exists ARDUINO
so SD seems RASPBERRY PI
to be in); FORO PROYECTOS CONTACTO
else Serial.println(Fiel does NOT exists or SD is not in socket);
delay(1000);
}
Reply
GIVE A REPLY
Message
http://www.prometec.net/sdcard/ 13/14
21/6/2016 ShieldEthernetySDcard|TutorialesArduino
URL
Post comment
WordPress Anti-Spam by WP-SpamShield
CATEGORIAS DE LOS
PRODUCTOS
Eligeunacategora
http://www.prometec.net/sdcard/ 14/14