Abrir archivo en microSD con Arduino

En ejercicios anteriores vimos cómo leer la información de una tarjeta microSD, en otro ejercicio vimos cómo crear un archivo y guardar texto en una tarjeta microSD, ahora vamos a ver cómo abrir el archivo y mostrar el contenido en el Monitor Serial.

Lo que vamos a utilizar:

  • Arduino (yo voy a utilizar un Arduino UNO)
  • Lector de tarjeta microSD (Catalex)
  • Tarjeta microSD (cualquier capacidad)
  • Cables

El esquemático de conexión entre el lector y Arduino es el siguiente:

  1. VCC a 5V de Arduino.
  2. GND a GND de Arduino.
  3. CS a PIN digital 4 de Arduino.
  4. MOSI a PIN digital 11 de Arduino.
  5. MISO a PIN digital 12 de Arduino.
  6. SCK a PIN digital 13 de Arduino.


Conexion
Conexión modulo SD y Arduino UNO
// Incluimos librerias
#include <SPI.h>
#include <SD.h>

File archivo;

// Variables utilizadas por la libreria SD
Sd2Card card;
SdVolume volume;
SdFile root;

const int chipSelect = 4; // Aquí le decimos en que PIN digital se va a conectar el lector SD

void setup() {
  // Abrimos la comunicación por puerto Serial, y esperamos a que esté disponible:
  Serial.begin(9600);
  while (!Serial) {
    ; // Esperamos a que el puerto serial esté disponible
  }


  Serial.print("\nInicializando microSD...");

  // El siguiente fragmento de código verifica que la tarjeta funcione correctamente
  if (!card.init(SPI_HALF_SPEED, chipSelect)) {
    Serial.println("inicialización fallida. Verifique lo siguiente:");
    Serial.println("* la tarjeta ha sido incertada correctamente?");
    Serial.println("* el cableado es correcto?");
    Serial.println("* seleccionaste el PIN correcto de tu chipSelect?");
    while (1);
  } else {
    Serial.println("El cableado es correcto y la tarjeta funciona");
  }

  // Se imprime la información de la tarjeta
  Serial.println();
  Serial.print("Tipo de tarjeta:         ");
  switch (card.type()) {
    case SD_CARD_TYPE_SD1:
      Serial.println("SD1");
      break;
    case SD_CARD_TYPE_SD2:
      Serial.println("SD2");
      break;
    case SD_CARD_TYPE_SDHC:
      Serial.println("SDHC");
      break;
    default:
      Serial.println("Desconocida");
  }

  // Ahora se va intentar abrir el tipo de 'voluimen o partición, solamente se muestra FAT16 o FAT32
  if (!volume.init(card)) {
    Serial.println("No se reconoce partición FAT16/FAT32. \nAsegurece de que el formato sea correcto");
    while (1);
  }

  Serial.print("Clusters:             ");
  Serial.println(volume.clusterCount());
  Serial.print("Bloques x Cluster:    ");
  Serial.println(volume.blocksPerCluster());

  Serial.print("Total de Bloques:     ");
  Serial.println(volume.blocksPerCluster() * volume.clusterCount());
  Serial.println();

  // Se imprime el tipo y tamaño del primer FAT que se encuentre
  uint32_t volumesize;
  Serial.print("El tipo de volumen es:    FAT");
  Serial.println(volume.fatType(), DEC);

  volumesize = volume.blocksPerCluster();    // Los clusters son colecciones de bloques
  volumesize *= volume.clusterCount();       // hay muchos grupos
  volumesize /= 2;                           // Los bloques de las SD son siempre 512 bytes (2 bloques son 1KB)
  Serial.print("Volume en (Kb):  ");
  Serial.println(volumesize);
  Serial.print("Volume en (Mb):  ");
  volumesize /= 1024;
  Serial.println(volumesize);
  Serial.print("Volume en (Gb):  ");
  Serial.println((float)volumesize / 1024.0);

  Serial.println("\nLos archivos que se encontraron en la tarjeta (nombre, fecha y tamaño en bytes): ");
  root.openRoot(volume);

  // Se muestra la lista de archivos en la tarjeta con fecha y tamaño
  root.ls(LS_R | LS_DATE | LS_SIZE);

  if (!SD.begin(4)) {  // Se inicia el servicio de SD
    Serial.println("Falló inicio de SD");
    while (1);
  }
  archivo = SD.open("LOGO.txt", FILE_WRITE);  // Abrimos el archivo

  if (archivo) {
    Serial.print("Escribiendo en LOGO.txt...    ");   // Enviamos confirmación en Terminal
    archivo.println("Esto es una linea de Texto");    // Guardamos una linea de texto
    archivo.close();                                  // Es importante siempre cerrar el archivo
    Serial.println("se guardó el texto en archivo");  // Confirmamos en Terminal que se guardó
  } else {
    Serial.println("Error abriendo LOGO.txt");        // Si no se abre el archivo aventamos error en Terminal
  }

  archivo = SD.open("LOGO.txt");                      // Volvemos a abrir el archivo
  if (archivo) {
    Serial.println("LOGO.txt:");
    while (archivo.available()) {                     // Se imprime todo el archivo
      Serial.write(archivo.read());
    }
    archivo.close();                                  // No se olvide cerrar el archivo
  } else {
    Serial.println("Erro abriendo LOGO.txt");         // Si no se abre mandamos error
  }
}

void loop(void) {
  //Nada pasa aqui
}

Leer-texto
Texto leído desde microSD

Vemos como este ejercicio, lee la información de la microSD, crea un archivo de texto (si no existe), agrega una linea de texto, guarda y muestra el contenido el archivo TXT

About: Pablo


    Leave a Reply

    Your email address will not be published. Required fields are marked *

    Share via
    Copy link