Cómo conectar el módulo de tarjeta MicroSD con ESP32 usando Arduino IDE

Como Conectar El Modulo De Tarjeta Microsd Con Esp32 Usando Arduino Ide



ESP32 es una placa de microcontrolador avanzada que puede conectar varios periféricos con ella. Al igual que otros sensores, también puedes conectar el módulo de tarjeta MicroSD con el ESP32. Puede utilizar el sensor de la tarjeta MicroSD para aplicaciones de registro de datos o aumentar la capacidad de almacenamiento de su placa microcontroladora.

Este artículo explicará los pasos para interconectar una tarjeta MicroSD con una placa ESP32 usando el IDE de Arduino.

Tabla de contenido:







1. Módulo de tarjeta MicroSD



2. Cómo conectar ESP32 con el módulo de tarjeta MicroSD



3. Hardware





4. Código

5. Salida



6. Realizar diferentes funciones en la tarjeta MicroSD usando ESP32

Conclusión

1. Módulo de tarjeta MicroSD

El módulo de tarjeta MicroSD es un sensor ESP32 que puede conectar la tarjeta SD a su placa microcontroladora. Funciona sobre el protocolo de comunicación SPI. Permite que ESP32 o cualquier otra placa de microcontrolador como Arduino acceda a los datos almacenados en la tarjeta SD a través del protocolo SPI.

El voltaje de funcionamiento del módulo de la tarjeta SD es de 3,3 V, por lo que no es posible conectarlo directamente al ESP32 ni a ninguna otra placa de microcontrolador. Para eso, necesitamos usar el módulo de tarjeta SD o sensor que funcione a más de 5V.

1.1. Configuración de pines

La tarjeta MicroSD cuenta con un total de seis pines. Dos de ellos son pines de alimentación: VCC y GND. Mientras que los cuatro pines de lectura se utilizan para el protocolo de comunicación SPI. A continuación se detallan los detalles de estos seis pines:

Pines de alimentación:

  • CCV: Se conecta al pin ESP32 5V.
  • Tierra: Se conecta al pin de tierra (GND) del ESP32.

Pines SPI:

  • MISO: (Master In Slave Out) Se conecta al pin ESP32 MOSI (Master Out Slave In).
  • FUMAR: Se conecta al pin ESP32 MISO (Master In Slave Out).
  • SCK: Se conecta al pin ESP32 SCK (Serial Clock).
  • SS: (Selección de esclavo) Se conecta al pin especificado en el código Arduino como pin SS (Selección de esclavo).

2. Cómo conectar ESP32 con el módulo de tarjeta MicroSD

Para conectar ESP32 con el módulo de tarjeta MicroSD, deberá configurar los pines de alimentación para el sensor de su tarjeta SD. Luego configure los pines SPI. Aquí tiene dos opciones: puede configurar los pines SPI predeterminados o definir sus propios pines SPI personalizados.

Cuando usemos pines SPI predeterminados, agregaremos el SD. y SD_MMC.h bibliotecas. De forma predeterminada, estas bibliotecas toman los pines VSPI SPI (23, 19, 18, 5) para la comunicación SPI. Sin embargo, también puedes configurar otros pines para la comunicación SPI.

El ESP32 contiene dos interfaces SPI, HSPI y VSPI, con sus pines detallados a continuación:

SPI FUMAR MISO CLK CS
VSPI D23 D19 D18 D5
HSPI D13 D12 D14 D15

Relacionado: Referencia de distribución de pines ESP32: una guía completa

2.2. Prepare la tarjeta SD

A continuación, antes de poder continuar con la lectura y escritura de datos en una tarjeta MicroSD, primero debe configurarla formateando los datos anteriores que contenga.

Abra su tarjeta SD usando cualquier lector de tarjetas y formato él.

Seleccione el FAT32 para el sistema de archivos de su tarjeta y haga clic Comenzar .

Después de formatear la tarjeta, seleccione DE ACUERDO .

Ahora su tarjeta SD está lista para conectarse con ESP32 usando el módulo de tarjeta SD.

2.3. Diagrama esquemático

Para conectar el sensor de la tarjeta MicroSD con ESP32, siga la siguiente configuración:

A continuación se muestra la tabla para la configuración de pines del cable de conexión:

Tarjeta micro SD ESP32
Tierra Tierra
VCC VENIR
CS D5
FUMAR D23
SCK D18
MISO D19

3. Hardware

Para el hardware, solo necesita algunos cables de puente, una placa junto con ESP32 y un módulo de tarjeta SD.

4. Código

Ahora escribiremos un código que creará un archivo de texto dentro de la tarjeta MicroSD y luego escribirá una cadena de texto en él. Una vez hecho esto, leeremos el contenido del archivo de texto en el monitor serie Arduino IDE.

Inicie Arduino IDE y compile el código proporcionado. Después de eso, grábalo en tu placa ESP32:

#incluir

#incluir

Archivo mi archivo ;
constante En t CS = 5 ;

// Escribe el mensaje dado en un archivo en la ruta especificada
vacío Escribir archivo ( constante carbonizarse * camino , constante carbonizarse * mensaje ) {
    // Abre el archivo. Admite la apertura de un archivo a la vez.
    //cierra el otro archivo antes de abrir un nuevo archivo
mi archivo = DAKOTA DEL SUR. abierto ( camino , ARCHIVO_ESCRIBIR ) ;

    si ( mi archivo ) {
De serie. imprimirf ( 'Escribiendo a %s ' , camino ) ;
mi archivo. imprimir ( mensaje ) ;
mi archivo. cerca ( ) ; //Cerrar el archivo
De serie. imprimir ( 'terminado.' ) ;
    } demás {
De serie. imprimir ( 'error al abrir el archivo' ) ;
De serie. imprimir ( camino ) ;
    }
}

// Imprime el contenido del archivo en la ruta especificada
vacío Leer archivo ( constante carbonizarse * camino ) {
    // Abrir documento
mi archivo = DAKOTA DEL SUR. abierto ( camino ) ;
    si ( mi archivo ) {
De serie. imprimirf ( 'Leyendo archivo de %s \norte ' , camino ) ;
        // Lee el archivo completo hasta llegar al último
        mientras ( mi archivo. disponible ( ) ) {
De serie. escribir ( mi archivo. leer ( ) ) ;
        }
mi archivo. cerca ( ) ; //Cerrar el archivo
    } demás {
        // Si el archivo no se pudo abrir, imprime un error:
De serie. imprimir ( 'Error al abrir test.txt' ) ;
    }
}

vacío configuración ( ) {
De serie. comenzar ( 9600 ) ;
demora ( 500 ) ;
    mientras ( ! De serie ) { ; }

De serie. imprimir ( 'Inicializando tarjeta SD...' ) ;
    si ( ! DAKOTA DEL SUR. comenzar ( CS ) ) {
De serie. imprimir ( '¡Inicialización falló!' ) ;
        devolver ;
    }
De serie. imprimir ( 'Inicialización realizada'. ) ;

Escribir archivo ( '/test.txt' , 'Linuxhint.com' ) ;
Leer archivo ( '/test.txt' ) ;
}

vacío bucle ( ) {
   
}

4.1. Explicación del código

Para una mejor comprensión, dividiremos este código en subpartes.

Inicialización y configuración: Primero, el código comenzó incluyendo algunas bibliotecas importantes relacionadas con el módulo de la tarjeta SD. La biblioteca SPI.h se agrega para la comunicación con la tarjeta SD y SD.h para manejar las operaciones de la tarjeta SD. A continuación, define una variable global. mi archivo de tipo archivo para gestionar operaciones de archivos. La constante CS está configurada en el pin 5, que se utilizará como pin de selección de chip (CS) para la tarjeta SD.

Función de configuración(): Dentro de la función de configuración, se inicia la comunicación serie. Después de eso, inicializamos el módulo de la tarjeta SD usando la función SD.begin(CS). Además, también hemos definido dos funciones diferentes para leer y escribir texto en un archivo de texto.

Escribiendo en la tarjeta SD: La función WriteFile() abre el archivo test.txt para escribir usando SD.open(ruta, FILE_WRITE). Después de eso, escribe la cadena Linuxhint.com en el archivo usando myFile.println(message).

Lectura de la tarjeta SD: Para leer el contenido del archivo, hemos utilizado la función ReadFile(). Si se lee correctamente, los datos se enviarán al puerto serie Arduino y se mostrarán en el monitor serie Arduino IDE.

5. Salida

En el resultado, puede ver que la misma cadena que definimos dentro del código IDE de Arduino se muestra en su monitor serie IDE de Arduino.

6. Realizar diferentes funciones en la tarjeta MicroSD usando ESP32

Podemos realizar diversas operaciones como crear, eliminar o agregar directorios en tarjetas MicroSD directamente a través del código IDE de Arduino.

6.1. Crear directorios en la tarjeta MicroSD

El siguiente código creará un nuevo directorio dentro de la tarjeta MicroSD. Define una función llamada crearDir que toma un objeto del sistema de archivos (fs::FS) y una ruta como entrada. Esta función intenta crear un directorio con la ruta especificada e imprime mensajes que indican el éxito o el fracaso.

#incluir 'FS.h'

#incluir 'SD.h'

#incluir 'SPI.h'

vacío crearDir ( fs :: FS & fs , constante carbonizarse * camino ) {

De serie. imprimirf ( 'Creando directorio: %s \norte ' , camino ) ;

  si ( fs. mkdir ( camino ) ) {

De serie. imprimir ( 'Dir creado' ) ;

  } demás {

De serie. imprimir ( 'mkdir falló' ) ;

  }

}

vacío configuración ( ) {

 

De serie. comenzar ( 115200 ) ;

  // Inicializa la tarjeta SD

  si ( ! DAKOTA DEL SUR. comenzar ( ) ) {

De serie. imprimir ( 'Error al montar la tarjeta' ) ;

  devolver ;

}

// Crea un directorio llamado 'mydir'

crearDir ( Dakota del Sur , '/midir' ) ;

  }

  vacío bucle ( ) {

 

}

En el resultado, puede ver que se crea un nuevo directorio con /midir nombre.

6.2. Listado de directorios en la tarjeta MicroSD

En el siguiente código, enumeraremos todos los directorios presentes dentro de la tarjeta MicroSD. El listaDir La función enumera de forma recursiva el contenido de un directorio en una tarjeta SD. Imprime información sobre directorios (con el prefijo 'DIR') y archivos (con el prefijo 'FILE'), incluidos sus nombres y tamaños.

#incluir 'FS.h'
#incluir 'SD.h'
#incluir 'SPI.h'

vacío listaDir ( fs :: FS & fs , constante carbonizarse * nombre de dirección , uint8_t niveles ) {
De serie. imprimirf ( 'Directorio de listado: %s \norte ' , nombre de dirección ) ;
raíz del archivo = fs. abierto ( nombre de dirección ) ;
    si ( ! raíz ) {
De serie. imprimir ( 'Error al abrir el directorio' ) ;
        devolver ;
    }
    si ( ! raíz. esDirectorio ( ) ) {
De serie. imprimir ( 'No es un directorio' ) ;
        devolver ;
    }
archivo de archivo = raíz. abrirSiguienteArchivo ( ) ;
    mientras ( archivo ) {
        si ( archivo. esDirectorio ( ) ) {
De serie. imprimir ( ' TÚ : ' ) ;
De serie. imprimir ( archivo. nombre ( ) ) ;
            si ( niveles ) {
listaDir ( fs , archivo. nombre ( ) , niveles - 1 ) ;
            }
        } demás {
De serie. imprimir ( ' ARCHIVO: ' ) ;
De serie. imprimir ( archivo. nombre ( ) ) ;
De serie. imprimir ( ' TAMAÑO: ' ) ;
De serie. imprimir ( archivo. tamaño ( ) ) ;
        }
archivo = raíz. abrirSiguienteArchivo ( ) ;
    }
}

vacío configuración ( ) {
De serie. comenzar ( 115200 ) ;
    si ( ! DAKOTA DEL SUR. comenzar ( ) ) {
De serie. imprimir ( 'Error al montar la tarjeta' ) ;
        devolver ;
    }
listaDir ( Dakota del Sur , '/' , 0 ) ;
}

vacío bucle ( ) {
   
}

En el resultado, puede ver dos archivos diferentes. Uno es un archivo de texto y el otro es un directorio que creamos en el código anterior.

6.3. Eliminar directorios

Ahora eliminaremos los directorios y archivos de texto creados anteriormente. Para eso vamos a utilizar el eliminarDir función, intentará eliminar un directorio especificado por la ruta. Si tiene éxito, imprime Directorio eliminado ; de lo contrario, imprime rmdir falló .

#incluir 'FS.h'
#incluir 'SD.h'
#incluir 'SPI.h'

vacío eliminarDir ( fs :: FS & fs , constante carbonizarse * camino ) {
De serie. imprimirf ( 'Eliminando directorio: %s \norte ' , camino ) ;
    si ( fs. es rm ( camino ) ) {
De serie. imprimir ( 'Dir eliminado' ) ;
    } demás {
De serie. imprimir ( 'Error en rmdir' ) ;
    }
}

vacío configuración ( ) {
De serie. comenzar ( 115200 ) ;

    si ( ! DAKOTA DEL SUR. comenzar ( ) ) {
De serie. imprimir ( 'Error al montar la tarjeta' ) ;
        devolver ;
    }

   
}

vacío bucle ( ) {
   
}

6.4. Obtener tipo de tarjeta MicroSD

Tarjeta microSD o S seguro D La tarjeta digital fue diseñada originalmente por la asociación de tarjetas SD y diseñada para su uso en dispositivos portátiles como teléfonos inteligentes y cámaras. Las tarjetas SD contienen principalmente cuatro tipos de familias:

  • SDSC (SD de capacidad estándar): Estas tarjetas ofrecen un rango modesto de capacidad de almacenamiento de 2 GB y utilizan los sistemas de archivos FAT-12 y FAT-16.
  • SDHC (SD de alta capacidad): Estas tarjetas van desde 2 GB hasta 32 GB y utilizan el sistema de archivos FAT-32.
  • SDXC (SD de capacidad extendida): Estas tarjetas utilizan el sistema de archivos exFAT y van desde 32 GB hasta 2 TB.
  • SDIO: Las tarjetas SDIO tienen un doble propósito al combinar el almacenamiento de datos con funciones de ENTRADA/SALIDA.

Para verificar su tipo de tarjeta, ejecute el siguiente código:

#incluir 'FS.h'
#incluir 'SD.h'
#incluir 'SPI.h'

vacío configuración ( ) {
De serie. comenzar ( 115200 ) ;

  si ( ! DAKOTA DEL SUR. comenzar ( ) ) {
De serie. imprimir ( 'Error al montar la tarjeta' ) ;
    devolver ;
  }

  uint8_t tipo de tarjeta = DAKOTA DEL SUR. tipo de tarjeta ( ) ;
  si ( tipo de tarjeta == TARJETA_NINGUNA ) {
De serie. imprimir ( 'No hay tarjeta SD conectada' ) ;
    devolver ;
  }

De serie. imprimir ( 'Tipo de tarjeta SD: ' ) ;
  si ( tipo de tarjeta == TARJETA_MMC ) {
De serie. imprimir ( 'MMC' ) ;
  } demás si ( tipo de tarjeta == TARJETA_SD ) {
De serie. imprimir ( 'SDSC' ) ;
  } demás si ( tipo de tarjeta == TARJETA_SDHC ) {
De serie. imprimir ( 'SDHC' ) ;
  } demás {
De serie. imprimir ( 'DESCONOCIDO' ) ;
  }

  uint64_t Tamaño de la tarjeta = DAKOTA DEL SUR. Tamaño de la tarjeta ( ) / ( 1024 * 1024 ) ;
De serie. imprimirf ( 'Tamaño de tarjeta SD: %lluMB \norte ' , Tamaño de la tarjeta ) ;
}

vacío bucle ( ) {
  }

Como tengo una tarjeta de 32 GB, puedes ver que está en el rango de SDHC tarjetas.

6.5. Obtener tamaño de tarjeta MicroSD

También puedes obtener el tamaño de la tarjeta SD cargando el siguiente código en tu placa ESP32.

#incluir 'FS.h'
#incluir 'SD.h'
#incluir 'SPI.h'

vacío configuración ( ) {
De serie. comenzar ( 115200 ) ;

  si ( ! DAKOTA DEL SUR. comenzar ( ) ) {
De serie. imprimir ( 'Error al montar la tarjeta' ) ;
    devolver ;
  }

  uint8_t tipo de tarjeta = DAKOTA DEL SUR. tipo de tarjeta ( ) ;
  si ( tipo de tarjeta == TARJETA_NINGUNA ) {
De serie. imprimir ( 'No hay tarjeta SD conectada' ) ;
    devolver ;
  }

  uint64_t Tamaño de la tarjeta = DAKOTA DEL SUR. Tamaño de la tarjeta ( ) / ( 1024 * 1024 ) ;
De serie. imprimirf ( 'Tamaño de tarjeta SD: %lluMB \norte ' , Tamaño de la tarjeta ) ;

  // Aquí se pueden llamar otras funciones (listDir, createDir, removeDir, etc.)
}

vacío bucle ( ) {
 
}

En la salida puedes ver que tengo una tarjeta SD de aproximadamente 30 GB.

Conclusión

Se utiliza un módulo de tarjeta MicroSD para leer y escribir los datos de la tarjeta SD usando la placa ESP32. El módulo de tarjeta MicroSD se comunica con el microcontrolador mediante la interfaz SPI. Entonces puedes usar la biblioteca SPI o definir tus propios pines SPI dentro del código. Una vez conectado, puede leer, escribir un archivo de texto o crear nuevos directorios en su tarjeta SD.