Leggere e scrivere una memoria SD con Arduino

Ciao ragazzi, oggi in questo articolo vediamo come leggere e scrivere un file su una SD Card con Arduino.

arduino_modulo_sd

Per poter fare ciò abbiamo bisogno di un modulo apposito come quello nella foto, nel mio caso si tratta del modulo della LC Studio.

Vediamo i collegamenti:
(li riporto in questo ordine – Arduino / Modulo SD)

  • 5V —> 5V
  • Gnd —> Gnd
  • pin 13 —> SCK
  • pin 12 —> MISO
  • pin 11 —> MOSI
  • pin 10 —> CS

Nello sketch che segue, vediamo come salvare una semplice stringa dentro un file di testo, ad esempio test.txt
Potete scegliere voi se creare il file prima di inserire nel modulo la vostra SD Card o no, tanto se il file non esiste verrà creato automaticamente, se invece esiste già e contiene anche del testo o dati salvati non preoccupatevi, perché Arduino continuerà a scrivere il file senza sovrascrivere nulla.

Ok, vediamo queste poche righe di codice che servono per salvare una stringa e successivamente leggere il contenuto del file creato:

#include <SD.h>
 
int CS_pin = 10;
 
void setup()
{
  pinMode(CS_pin, OUTPUT);
  Serial.begin(9600);
 
  if (!SD.begin(CS_pin)) { 
    Serial.println("Avvio SD Card fallito!");
    return;
  }

  Serial.println("SD Card avviata.");
 
  File myFile;
 
 /* Scrittura del file *******************************************/
 
 myFile = SD.open("test.txt", FILE_WRITE);
 
 if (myFile) {
   Serial.println("Mi preparo a scrivere il file test.txt ...");
   myFile.println("Prova.");
   myFile.close();
   Serial.println("scrittura eseguita correttamente.");
 }
 else {
   Serial.println("Non è stato possibile scrivere il file test.txt!");
 }
 
/* Lettura del file *******************************************/
 
 myFile = SD.open("test.txt", FILE_READ);
 
 if (myFile) {
   Serial.println("Leggo il contenuto di test.txt :");
 
   while (myFile.available()) {
     Serial.write(myFile.read());
   }
   
   myFile.close();
 }
 else {
   Serial.println("Non è stato possibile leggere il file test.txt!");
 }
}
 
void loop()
{
 // loop vuoto
}

se volete fare un controllo se il file esiste o meno, questo è il codice:

if (SD.exists("test.txt")) {
 // il file esiste
}
else {
 // il file non esiste
}

ovviamente possiamo controllare anche all’interno di eventuali cartelle:

if (SD.exists("miaCartella/miaCartella2/test.txt")) {
 // il file esiste
}
else {
 // il file non esiste
}

vediamo anche come eliminare un file:

if (SD.remove("test.txt")) {
 // file eliminato
}
else {
 // file non eliminato
}

stesso discorso vale con le cartelle

per creare una cartella:

if (SD.mkdir("miaCartella")) {
 // cartella creata
}
else {
 // cartella non creata
}

per creare una sotto cartella:

if (SD.mkdir("miaCartella/miaCartella2")) {
 // cartella creata
}
else {
 // cartella non creata
}

controllare se una cartella esiste o no:

if (SD.exists("miaCartella/miaCartella2")) {
 // la cartella esiste
}
else {
 // la cartella non esiste
}

eliminare anche una cartella

if (SD.rmdir("miaCartella/miaCartella2")) {
 // cartella eliminata
}
else {
 // cartella non eliminata
}

rmdir() però ha una piccola limitazione, non può eliminare una cartella se al suo interno sono presenti altre cartelle o file, quindi bisogna eliminarle singolarmente dalla più interna.

… buon lavoro e alla prossima.

2 Risposte a “Leggere e scrivere una memoria SD con Arduino”

  1. Salve,
    volevo sapere come è possibile creare cartelle con il nome della directory che varia

    Esempio “anno/mese/test.txt”
    Dove anno e mese sono l’anno e il mese attuale ?

    1. Ciao Daniele,

      dovresti aggiungere al tuo circuito un modulo RTC, tipo quello che ho descritto in quest articolo;
      a quel punto non farai altro che andare a recuperare la data dal modulino per crearti la stringa che poi sarà il percorso del tuo file.

      Saluti
      Antonino

I commenti sono chiusi.