INHALT
- Funktionsprinzip des SD Speicherkarte Modul Arduino
- Anschließen des SD Speicherkarte Modul an den Arduino
- Code für die Überprüfung von micro SD Speicherkarte
- Code für das Lesen von Informationen von der SD-Karte
- Code für das Schreiben von Informationen auf die SD-Karte
- SD.h-Bibliothek für die Arbeit mit SD Speicherkarte Modul
Das Speicherkartenmodul (Arduino Micro SD Card) wird verwendet, um Daten von Sensoren bei der Erstellung komplexer Projekte zu speichern, da der eigene nichtflüchtige Speicher des Mikrocontrollers – das eeprom – nur 4 KByte Speicher auf dem Arduino Mega erlaubt. In diesem Artikel werden wir uns ansehen, wie man mit dem Arduino Informationen auf die Speicherdatei des SD-Kartenmoduls richtig liest und schreibt.
Bestandteile:
Einige Hersteller bieten SD-Karten-Shields mit zwei Stromanschlüssen an – 5 und 3,3 Volt (siehe Abbildung unten). In diesem Fall muss eine stabilisierte Spannung von 3,3 Volt an den 3,3V-Pin angeschlossen werden. Wenn es keinen solchen Pin gibt, dann müssen 5 Volt vom Mikrocontroller an den 5V-Pin angeschlossen werden. Es wird empfohlen, das FAT16- oder FAT32-Dateisystem auf der microSD zu verwenden, um mit dem Modul zu arbeiten.
SPI SD Speicherkartemodul Arduino pinout, datasheet
Merkmale des SD Speicherkartemodul Arduino (datasheet)
- Versorgungsspannung: 5 V oder 3,3 V
- Stromverbrauch: 0,2mA bis 200mA
- Unterstützt Karten: micro SD, micro SDHC
- Schnittstelle: SPI
- Abmessungen: 42 x 24 x 12 mm
Das Modul ist mit dem Arduino über die SPI-Schnittstelle verbunden, für die Sie (SCK, MISO, MOSI und CS). Die Arduino Uno und Nano Boards haben dedizierte Pins für den SPI-Bus, das Mega 2560 Board hat SPI-Ports an anderen Pins. Sie können jeden freien Arduino-Pin für den CS-Pin verwenden und die Änderung im Programm angeben. Standardmäßig werden die Pins der in der Tabelle unten aufgeführten Mikrocontroller verwendet.
Wie man einen Micro SD Card Module Arduino anschließt
SD card shield | Arduino Uno | Arduino Nano | Arduino Mega |
GND | GND | GND | GND |
VCC | 5V | 5V | 5V |
MOSI | 11 | 11 | 51 |
MISO | 12 | 12 | 50 |
SCK | 13 | 13 | 52 |
SC | 4 | 4 | 53 |
Um die Verbindung des micro sd-Moduls mit dem Arduino Uno-Board und dem Flash-Speicher zu überprüfen, verwenden Sie den Standard-SD.h-Bibliothekssketch – CardInfo. Nach dem Laden des Programms öffnen Sie den Monitor der seriellen Schnittstelle der Arduino IDE und Sie werden Informationen über das Dateisystem der Karte, die verfügbare Speicherkapazität und eine Liste der Dateien mit ihrem Erstellungsdatum sehen.
Programm Arduino für die Überprüfung von micro SD Module
#include "SPI.h" #include "SD.h" Sd2Card card; SdVolume volume; SdFile root; const int chipSelect = 4; void setup() { Serial.begin(9600); pinMode(SS, OUTPUT); while (!card.init(SPI_HALF_SPEED, chipSelect)) { Serial.println("initialization failed"); } Serial.print("\nCard type: "); 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("Unknown"); } if (!volume.init(card)) { Serial.println("Could not find FAT16/FAT32 partition"); return; } uint32_t volumesize; Serial.print("\nVolume type is FAT"); Serial.println(volume.fatType(), DEC); Serial.println(); volumesize = volume.blocksPerCluster(); volumesize *= volume.clusterCount(); volumesize *= 512; Serial.print("Volume size (Kbytes): "); volumesize /= 1024; Serial.println(volumesize); Serial.print("Volume size (Mbytes): "); volumesize /= 1024; Serial.println(volumesize); Serial.println("\nFiles found on the card (name, date, size in bytes): "); root.openRoot(volume); root.ls(LS_R | LS_DATE | LS_SIZE); } void loop() { }
- Probleme mit der sd-karte sind ein falsch angeschlossenes modul, eine defekte sd-karte, eine unformatierte sd-karte;
- Sobald die Karte diagnostiziert wurde und das SD-Modul richtig an die Karte angeschlossen ist, kann dieser Test abgeschlossen werden.
Im folgenden Beispiel können Sie die Datei test.txt von der Speicherkarte öffnen (wenn es keine Datei mit diesem Namen gibt, wird sie erstellt) und eine Textzeile „test 1, 2, 3“ in die Datei schreiben. Schließen Sie dann die Datei, so dass alle Daten gespeichert sind und alle Informationen aus der Datei an den COM-Port der Arduino IDE übertragen werden. Laden Sie das folgende Programm und öffnen Sie den Monitor der seriellen Schnittstelle.
Programm für das Lesen von Informationen von der SD Module
#include "SPI.h" #include "SD.h" File myFile; const int chipSelect = 4; void setup() { Serial.begin(9600); pinMode(SS, OUTPUT); while (!SD.begin(SPI_HALF_SPEED, chipSelect)) { Serial.println("initialization failed"); } myFile = SD.open("test.txt", FILE_WRITE); if (myFile) { Serial.println("Writing to test.txt"); myFile.println("testing 1, 2, 3"); myFile.close(); } else { Serial.println("error opening test.txt"); } myFile = SD.open("test.txt"); if (myFile) { Serial.println("\ntest.txt:"); while (myFile.available()) { Serial.write(myFile.read()); } myFile.close(); } else { Serial.println("error opening test.txt"); } } void loop() { }
- Jedes Mal, wenn dieses Programm wieder in den Mikrocontroller geladen wird – werden der Datei neue Daten hinzugefügt und nicht überschrieben;
- Das SD-Kartenmodul kann nicht mehrere Dateien gleichzeitig öffnen, bevor eine neue Datei geöffnet wird, muss die alte Datei geschlossen werden.
Programm für das Schreiben von Informationen auf die SD Module
Mit dem folgenden Code können Sie auf dem Portmonitor Informationen über die Größe der Datei test.txt aus dem vorigen Beispiel und alle in sie geschriebenen Informationen anzeigen lassen. Beachten Sie, dass der Dateiname auf der SD-Karte nicht mehr als 8 Zeichen enthalten darf, die Dateierweiterung nicht eingeschlossen. Die SD.h-Bibliothek unterscheidet nicht zwischen Groß- und Kleinschreibung im Dateinamen.
#include "SPI.h" #include "SD.h" File myFile; const int chipSelect = 4; void setup() { Serial.begin(9600); pinMode(SS, OUTPUT); while (!SD.begin(SPI_HALF_SPEED, chipSelect)) { Serial.println("initialization failed"); } myFile = SD.open("test.txt"); if (myFile) { Serial.print(myFile.size()); Serial.println(" Kb"); Serial.println("\ntest.txt:"); while (myFile.available()) { Serial.write(myFile.read()); } myFile.close(); } else { Serial.println("error opening test.txt"); } } void loop() { }
- Die SD.h-Bibliothek unterscheidet nicht zwischen Groß- und Kleinschreibung, d. h. die Befehle SD.open(„test.txt“); und SD.open(„TEST.txt“); werden dieselbe Datei öffnen.
SD.h-Bibliotheksbefehle für den Micro-SD-Betrieb
available() – prüft, ob die Datei lesbare Bytes enthält;
size() – zeigt Informationen über die Datengröße an;
read() – liest Informationen;
write() – schreibt in die Datei;
close() – schließt die Datei und stellt sicher, dass die Daten auf der SD-Karte sind;
flush() – stellt sicher, dass die Daten auf die Karte geschrieben werden;
name() – gibt den Zeiger auf den Namen zurück;
peek() – liest die Datenbytes, ohne den Zeiger zu bewegen;
position() – zeigt die aktuelle Position des Zeigers in der Datei an;
seek() – ändert die aktuelle Position in der Datei;
print() – gibt die Daten in eine separate Datei aus;
print() – druckt die Daten in die Datei bis zu der Stelle, an der die Leerzeile erscheint;
isDirectory() – prüft, ob die Datei ein Verzeichnis (Ordner) ist;
openNextFile() – gibt den nächsten Dateinamen auf der Karte aus;
rewindDirectory() – kehrt zur ersten Datei im Ordner zurück.
Schlussfolgerung. Bevor Sie mit dem Speicherkartenmodul arbeiten, müssen Sie die Bibliotheken SD.h und SPI.h installieren, die Sie von unserer Website herunterladen können. Dieses Modul wird in Projekten nützlich sein, in denen Sie Informationen regelmäßig speichern müssen. Zum Beispiel, wenn Sie täglich Informationen vom Luftdrucksensor bmp180 (GY-68) auf einer Speicherkarte für den Arduino speichern wollen.
Schreibe einen Kommentar