MicroPython: como escrever e ler arquivos de texto em um cartão MicroSD usando ESP32

MicroPython: Cómo escribir y leer archivos de texto en una tarjeta MicroSD usando ESP32

El registro de datos es una parte integral de muchos proyectos integrados. Normalmente, el registro de datos se utiliza para registrar lecturas de sensores, con o sin marca de tiempo. Por ejemplo, muchas aplicaciones de IoT utilizan el registro de datos para almacenar cambios en la red o datos para la resolución de problemas o la verificación.

La forma ideal de grabar datos localmente es utilizando una tarjeta SD o MicroSD. La mayoría de los lectores de tarjetas pueden interactuar con microcontroladores o microcomputadoras a través de un puerto SPI.

El firmware del módulo de la máquina MicroPython contiene una clase SDCard para trabajar con lectores de tarjetas SD y MicroSD. La clase machine.SDCard admite dispositivos de almacenamiento SD, MMC y eMMC. El protocolo de comunicación para los tres tipos de dispositivos de almacenamiento es a través del puerto SPI.

La clase SDCard se puede implementar utilizando los puertos Pyboard, ESP32, CC3200 y mimxrt de MicroPython. El módulo SDCard no es compatible con otros puertos.

En este artículo, discutiremos cómo conectar un lector de tarjetas SD o MicroSD con ESP32.

Con estas tarjetas, es posible agregar de 4 a 128 GB de almacenamiento al sistema integrado. Los datos del sensor u otros datos se registran en archivos de texto sin formato en la tarjeta SD/MicroSD. La mayoría de las tarjetas SD o MicroSD proporcionan una interfaz de 1 bit para la tarjeta de memoria. El puerto SPI se utiliza en placas de conexión de tarjetas SD para acceder al dispositivo de almacenamiento.

Componentes necesarios
Se requieren los siguientes componentes para el registro de datos en el ESP32.

1ESP32x1
2. Módulo de tarjeta MicroSD x1
3. Tarjeta MicroSD de 8GB
4. cable microUSB para conectar el ESP32 al ordenador
5. Cables de puente

módulo de tarjeta microSD
El módulo de tarjeta MicroSD contiene una ranura para insertar la tarjeta y seis terminales para interactuar con un microcontrolador. VDD y tierra son dos de los pines. Los otros cuatro pines (MISO, MOSI, SCK y CS) son los terminales del puerto SPI que facilitan la interfaz de 1 bit con la tarjeta de memoria.

La configuración de pines de una tarjeta MicroSD.

Tarjeta microSD y ESP32
Para interconectar el módulo de tarjeta MicroSD con ESP32:

  • Conecte los pines MOSI, MISO, SCLK y CS del módulo a los pines GPIO12, GPIO13, GPIO14 y GPIO27 del ESP32. Estos pines corresponden al HSPI (SPI1) del ESP32.
  • Conecte los pines VCC y GND del módulo a 3.3V y tierra del ESP32.

Los lectores de tarjetas MicroSD tienen reguladores de voltaje incorporados para convertir el voltaje de entrada a 3,3 VCC. Pero un voltaje de hasta 5 V CC puede dañar el módulo o dañar la tarjeta de memoria.

Las conexiones del circuito para interconectar el módulo de tarjeta MicroSD con el ESP32.

El módulo de la máquina MicroPython
El módulo de la máquina MicroPython fue escrito para manejar las funciones de hardware de los puertos admitidos. El módulo incluye clases para controlar o gestionar entradas/salidas digitales, señales de salida de dispositivos externos, modulación de ancho de pulso, conversión analógica a digital, control de periféricos ADC, UART, SPI, I2C, I2S, temporizador, RTC, temporizador de vigilancia y tarjeta SD.

La clase de tarjeta SD del módulo admite la lectura de tarjetas de memoria SD, MMC y eMMC.

Clase de tarjeta SD
La clase SDCard proporciona acceso a tarjetas de memoria SD o MMC utilizando una interfaz SD/MMC dedicada en un puerto MicroPython determinado o mediante un canal SPI.

Para usar la clase en un script MicroPython, sdcard.py debe cargarse en ESP32 y luego importarse al script. También se deben importar el sistema operativo y el módulo de la máquina.

Para importar los módulos necesarios, agregue esta declaración en un script MicroPython:
máquina de importación, tarjeta SD, sistema operativo

Se debe inicializar un objeto de la clase SDCard dentro del script. El constructor de la clase SDCard tiene este prototipo:
clase machine.SDCard(ranura=1, ancho=1, cd=Ninguno, wp=Ninguno, sck=Ninguno, miso=Ninguno, mosi=Ninguno, cs=Ninguno, freq=20000000)

Los parámetros en la función constructora:

  • ranura: selecciona una de las interfaces disponibles o utiliza la predeterminada
  • ancho: selecciona el ancho del bus para la interfaz SD/MMC (para adaptadores de tarjetas SD/MicroSD, el ancho es “1”. No es necesario especificarlo explícitamente a menos que el hardware en el puerto de la tarjeta SD tenga un paralelo para leer tarjetas de memoria .)
  • cd: especifica un pin de detección de tarjeta
  • wp: especifica un pin de protección contra escritura
  • sck: especifica un pin de reloj SPI
  • miso: especifica un pin SPI de miso
  • mosi: especifica un pin SPI mosi
  • cs: especifica un pin de selección de chip SPI
  • frecuencia: selecciona la frecuencia de la interfaz SD/MMC en Hz (solo compatible con ESP32)

Hay dos bloques SPI de hardware en ESP32: HSPI (SPI1) y VSPI (SPI2). Para este proyecto, el adaptador de tarjeta MicroSD está conectado a través de SPI 1.

Para iniciar el objeto SDCard, agregue esta declaración al script MicroPython:
sd = sdcard.SDCard(máquina.SPI(1), máquina.Pin(27))

El módulo del sistema operativo
El módulo MicroPython OS proporciona funciones para acceder y montar el sistema de archivos. Los siguientes métodos son útiles cuando se trabaja con una tarjeta MicroSD.

os.VfsFat: crea un objeto de sistema de archivos que utiliza el formato del sistema de archivos FAT. Un dispositivo de bloque, que implementa el protocolo de bloque, proporciona almacenamiento en el sistema de archivos FAT. Básicamente, permite que un dispositivo admita el sistema de archivos MicroPython. El hardware físico está representado por la clase de sistema de archivos. Se utiliza un sistema de archivos FAT cuando se crea un objeto con os.VfsFat. El objeto se puede montar utilizando el método os.mount.

Los puertos MicroPython admiten sistemas de archivos.

os.mount: monta objetos del sistema de archivos especificados en la ubicación del sistema de archivos virtual proporcionada por un argumento de cadena. El objeto del sistema de archivos puede ser un objeto virtual que tenga un método de montaje o un dispositivo de bloque. Si es un dispositivo de bloque, el tipo de sistema de archivos se detectará automáticamente; de lo contrario, se planteará una excepción.

La cadena que especifica la ubicación puede ser '/' para montar el objeto del sistema de archivos en la raíz, o '/ ' para montarlo en un subdirectorio debajo de la raíz. El método toma tres argumentos: un objeto del sistema de archivos, una cadena que especifica la ubicación y un parámetro de solo lectura. Si solo lectura es "Verdadero", el sistema de archivos se montará como de solo lectura. Si la ubicación ya está montada, generará un OSError (EPERM).

os.listdir: si se llama sin argumentos, enumera el directorio actual. De lo contrario, enumera el directorio especificado.

os.umount: "desmonta" un sistema de archivos. La ubicación puede ser una cadena que nombre la ubicación de montaje o un objeto del sistema de archivos previamente montado. Durante el proceso de desmontaje, se llama al método umount para el objeto del sistema de archivos.

Este es un ejemplo válido de un sistema de archivos FAT para una tarjeta MicroSD, montando el objeto del sistema de archivos en la memoria.

vfs = sistema operativo.VfsFat(sd)
sistema operativo.mount(vfs, “/fc”)
imprimir ("verificación del sistema de archivos")
imprimir(os.listdir(“/fc”))

Creando archivos de texto
Agregar archivos de texto sin formato a una tarjeta MicroSD es sencillo. Puede crear varios archivos de texto sin formato en una tarjeta de memoria. Simplemente cree una cadena que especifique la ruta del archivo de texto.

Aquí hay un ejemplo válido para crear archivos de texto simples en una tarjeta MicroSD usando MicroPython.
fn = “/fc/log.txt”

Escribir un solo bloque
Un solo bloque es una línea de texto. Se debe especificar un archivo con una variable de cadena y se debe abrir una ruta de archivo especificada utilizando el método open para escribir un bloque. El argumento "w" también debe pasarse como modo de archivo. Se puede escribir un solo bloque llamando al método de escritura.

Este es un ejemplo válido de cómo escribir un solo bloque en un archivo de texto en una tarjeta MicroSD.

fn = “/fc/una-línea-log.txt”
imprimir
print(“Escribir en un solo bloque”)
con open(fn, “w”) como f:
n = f.write(“1234567890\n”) # un bloque
print(n, “bytes escritos”)

Leer un solo bloque
Para leer un archivo, el archivo especificado por una variable de cadena debe abrirse utilizando el método open con el modo de archivo especificado como "r". El archivo se lee llamando al método de lectura.

Este es un ejemplo válido de lectura de un archivo de texto desde una tarjeta MicroSD.

fn = “/fc/una-línea-log.txt”
imprimir
imprimir ("Lectura de bloque único")
con open(fn, “r”) como f:
resultado = f.leer
print(len(resultado2), “bytes leídos”)
imprimir
imprimir (resultado)

Escribir varios bloques
Escribir varios bloques en un archivo de texto es similar a escribir un solo bloque, excepto que el objeto de cadena pasado contiene varias líneas de texto.

A continuación se muestra un ejemplo válido de cómo escribir varios bloques en un archivo de texto en una tarjeta MicroSD.

línea = “abcdefghijklmnopqrstuvwxyz\n”
líneas = línea * 200 # 5400 caracteres
fn = “/fc/multi-line-log.txt”
imprimir
print(“Escribiendo en múltiples bloques”)
con open(fn, “w”) como f:
n = f.escribir(líneas)
print(n, “bytes escritos”)

Leer múltiples bloques
Varias líneas en un archivo de texto se leen de manera similar a una sola línea. A continuación se muestra un ejemplo válido de lectura de un archivo de texto multibloque desde una tarjeta MicroSD.

fn = “/fc/multi-line-log.txt”
imprimir
print(“Leyendo múltiples bloques”)
con open(fn, “r”) como f:
resultado = f.leer
print(len(resultado2), “bytes leídos”)
imprimir
imprimir (resultado)

Preparando el ESP32
Antes de continuar, asegúrese de que el IDE de MicroPython esté listo para escribir, editar y cargar códigos. Puede utilizar uPyCraft IDE o Thonny IDE como desarrollo de software. Con la ayuda del IDE respectivo, cargue el firmware MicroPython para ESP8266 o ESP32.

Para saber cómo haga clic aquí .

Cargando sdcard.py a ESP32
En uPyCraft IDE, cree un nuevo archivo navegando a Archivos->Nuevo. Copie y pegue el siguiente código en el archivo y guárdelo como sdcard.py.

Haga clic en el botón "Descargar y ejecutar" para cargar sdcard.py en el directorio raíz de ESP32. Consulte el registro de la consola para verificar la escritura y lectura de archivos de texto en la tarjeta MicroSD. Una vez escritos los archivos, se informa el número de bytes. Después de leer los archivos, se lee el número de bytes y el texto leído se imprime en la consola.

contenido relacionado

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.