Use an SD card module with Arduino

FunduinoLast updated on

Daten auf einer SD-Karte speichern und wieder auslesen

Mit einem SD-Karten-Modul kann der Arduino Daten dauerhaft speichern – auch dann, wenn er zwischendurch vom Strom getrennt wird. Das ist zum Beispiel praktisch, wenn du Messwerte eines Sensors über einen längeren Zeitraum aufzeichnen möchtest.

In dieser Anleitung schließt du das Modul an den Arduino an, legst mit einem Sketch eine Textdatei auf der SD-Karte an, schreibst Text hinein und liest ihn anschließend wieder aus.

Schaltplan mit SPI-SD-Karten-Modul am Arduino UNO: CS an D5, SCK an D13, MOSI an D11, MISO an D12
Schaltplan: SD-Karten-Modul am Arduino UNO

Das SD-Karten-Modul anschließen

Das SD-Karten-Modul verfügt über sechs Pins:

  • CS – Pin für die Erfassung der SD-Karte, an Pin D5 des Arduinos
  • SCK – Pin für die Synchronisierung des Datentransfers, an Pin D13 des Arduinos
  • MOSI – Pin für den Datentransfer (Master Out Slave In), an Pin D11 des Arduinos
  • MISO – Pin für den Datentransfer (Master In Slave Out), an Pin D12 des Arduinos
  • VCC – Pin für die Stromversorgung, an den 5V-Pin des Arduinos
  • GND – Ground-Pin, an den GND-Pin des Arduinos
Schaltplan mit SPI-SD-Karten-Modul am Arduino UNO: CS an D5, SCK an D13, MOSI an D11, MISO an D12
Schaltplan: SD-Karten-Modul am Arduino UNO

Bibliothek und Beispielsketch

Sobald die Verkabelung steht, kannst du mit dem Sketch beginnen. Die Bibliothek für das SD-Karten-Modul ist in der Arduino-Software bereits enthalten – du musst also nichts zusätzlich installieren.

Für den Datentransfer kannst du auf den Beispielsketch ReadWrite zurückgreifen. Zum besseren Verständnis haben wir ihn ins Deutsche übersetzt, geringfügig geändert und kommentiert.

Zwei Dinge musst du beachten: Du kannst immer nur eine Datei der SD-Karte gleichzeitig bearbeiten – das gilt fürs Auslesen wie fürs Schreiben. Willst du Werte in verschiedenen Dateien ablegen, musst du jede Datei nach dem Schreiben wieder schließen. Und: Das Modul kann nur auf SD-Karten zugreifen, die im Format FAT32 vorliegen.

Menü der Arduino-Software mit dem Beispielsketch ReadWrite für die SD-Bibliothek
Den Beispielsketch ReadWrite findest du in der Arduino-Software unter Beispiele → SD

Textdatei schreiben und auslesen

Der Sketch legt die Datei test.txt an, schreibt drei Zeilen Beispieltext hinein, schließt sie wieder und liest sie anschließend Zeichen für Zeichen in den Seriellen Monitor zurück. Alles passiert im Setup – der Loop bleibt leer, damit der Vorgang nur einmal läuft.

Programmcode – Textdatei schreiben und auslesen
#include <SPI.h>
#include <SD.h>  // In diesem Sketch verwenden wir die SD-Bibliothek
File Textdatei;  // An dieser Stelle wird die Variable "Textdatei" als File (dt. Datei) deklariert.
void setup() {
  Serial.begin(9600);
  Serial.println("Initialisiere SD-Karte");
  if (!SD.begin(5)) {                                 // Wenn die SD-Karte nicht gefunden werden kann ...
    Serial.println("Initialisierung fehlgeschlagen!"); // ... soll eine Fehlermeldung ausgegeben werden.
    return;
  }
  Serial.println("Initialisierung abgeschlossen");     // ... ansonsten diese Meldung.
  Textdatei = SD.open("test.txt", FILE_WRITE);        // Hier wird die Textdatei erstellt: Sie soll "test" heißen und im Format ".txt" angelegt werden.
  if (Textdatei)                                      // Wenn die Textdatei gefunden wurde ...
  {
    Serial.println("Schreibe in Textdatei ...");      // ... soll eine Meldung im Seriellen Monitor erscheinen ...
    Textdatei.println("Funduino GmbH");               // ... und die Textdatei anschließend befüllt werden.
    Textdatei.println("1, 2, 3, 4, 5");
    Textdatei.println("a, b, c, d, e");
    Textdatei.println();
    Textdatei.close();                                // Anschließend wird die Textdatei wieder geschlossen ...
    Serial.println("Abgeschlossen.");                 // ... und eine erneute Meldung ausgegeben.
    Serial.println();
  }
  else                                                // Wenn KEINE Textdatei gefunden werden kann ...
  {
    Serial.println("Textdatei konnte nicht ausgelesen werden"); // ... erscheint eine Fehlermeldung.
  }

  // NUN WIRD DIE TEXTDATEI AUSGELESEN
  Textdatei = SD.open("test.txt");                    // Die Textdatei auf der SD-Karte wird wieder geöffnet ...
  if (Textdatei)
  {
    Serial.println("test.txt:");                      // ... und der Name der Datei wird ausgegeben.
    while (Textdatei.available())                     // Anschließend wird die Datei so lange ausgelesen ...
    {
      Serial.write(Textdatei.read());                 // ... bis keine Daten mehr gefunden werden.
    }
    Textdatei.close();                                // Im Anschluss wird die Textdatei wieder geschlossen.
  }
  else                                                // Sollte test.txt nicht gefunden werden ...
  {
    Serial.println("Textdatei konnte nicht geoeffnet werden"); // ... erscheint eine Fehlermeldung.
  }
}
void loop()  // Der Loop bleibt leer.
{
}
Rate the instructions

Comments

Ask a question or share an experience

Contact us if something doesn’t work. Please include your board and the error message.

We review every comment before publication. Your email address remains with us.