Arduino – Konfiguration von der SD-Karte lesen
In diesem Tutorial lernen wir, wie man die Konfigurationsdatei auf der Micro-SD-Karte verwendet. Im Detail werden wir lernen:
Speichern Sie eine config.txt-Datei auf der Micro-SD-Karte. Die Datei enthält die Schlüssel-Wert-Paare
Lesen Sie die Konfiguration von der Micro-SD-Karte und speichern Sie sie in eine int-Variable
Lesen Sie die Konfiguration von der Micro-SD-Karte und speichern Sie sie in eine float-Variable
Lesen Sie die Konfiguration von der Micro-SD-Karte und speichern Sie sie in eine String-Variable
Oder Sie können die folgenden Kits kaufen:
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.
Wenn Sie nichts über das Micro-SD-Kartenmodul wissen (Pinbelegung, wie es funktioniert, wie man programmiert ...), erfahren Sie im Arduino - Micro-SD-Karten-Modul Tutorial mehr darüber.
Die Schlüssel-Wert-Paare sind gemäß dem folgenden Format auf der Micro-SD-Karte vorab gespeichert:
Jedes Schlüssel-Wert-Paar befindet sich in einer Zeile. Mit anderen Worten ist jedes Schlüssel-Wert-Paar von den anderen durch ein Zeilenumbruchzeichen getrennt.
Der Schlüssel und der Wert sind durch ein =-Zeichen getrennt.
Der Arduino-Code sucht nach dem Schlüssel, findet den entsprechenden Wert und speichert ihn in einer Variablen. Der Variablentyp kann int, float oder String sein.

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
※ Notiz:
Wenn Sie ein Ethernet-Shield oder ein Shield verwenden, das einen Micro-SD-Kartenhalter hat, müssen Sie das Micro-SD-Kartenmodul nicht verwenden. Sie müssen lediglich die Micro-SD-Karte in den Micro-SD-Kartenhalter auf dem Shield einsetzen.
myString_1=Hello
myString_2=ArduinoGetStarted.com
myInt_1=2
myInt_2=-105
myFloat_1=0.74
myFloat_2=-46.08
Schließen Sie die Micro-SD-Karte über einen USB 3.0 SD-Kartenleser an den PC an.
Stellen Sie sicher, dass die Micro-SD-Karte im FAT16- oder FAT32-Format formatiert ist (dazu im Internet googeln).
Kopieren Sie die Datei config.txt in das Stammverzeichnis der Micro-SD-Karte.
Trennen Sie die Micro-SD-Karte vom PC.
Schließen Sie die Micro-SD-Karte gemäß dem oben gezeigten Verdrahtungsdiagramm über das Micro-SD-Kartenmodul an den Arduino an.
Kopieren Sie den untenstehenden Code und öffnen Sie ihn mit der Arduino IDE.
#include <SD.h>
#define PIN_SPI_CS 4
#define FILE_NAME "config.txt"
#define KEY_MAX_LENGTH 30
#define VALUE_MAX_LENGTH 30
int myInt_1;
int myInt_2;
float myFloat_1;
float myFloat_2;
String myString_1;
String myString_2;
void setup() {
Serial.begin(9600);
if (!SD.begin(PIN_SPI_CS)) {
Serial.println(F("SD Card failed, or not present"));
while (1);
}
Serial.println(F("SD Card initialized."));
myInt_1 = SD_findInt(F("myInt_1"));
myInt_2 = SD_findInt(F("myInt_2"));
myFloat_1 = SD_findFloat(F("myFloat_1"));
myFloat_2 = SD_findFloat(F("myFloat_2"));
myString_1 = SD_findString(F("myString_1"));
myString_2 = SD_findString(F("myString_2"));
Serial.print(F("myInt_1 = "));
Serial.println(myInt_1);
Serial.print(F("myInt_2 = "));
Serial.println(myInt_2);
Serial.print(F("myFloat_1 = "));
Serial.println(myFloat_1);
Serial.print(F("myFloat_2 = "));
Serial.println(myFloat_2);
Serial.print(F("myString_1 = "));
Serial.println(myString_1);
Serial.print(F("myString_2 = "));
Serial.println(myString_2);
}
void loop() {
}
bool SD_available(const __FlashStringHelper * key) {
char value_string[VALUE_MAX_LENGTH];
int value_length = SD_findKey(key, value_string);
return value_length > 0;
}
int SD_findInt(const __FlashStringHelper * key) {
char value_string[VALUE_MAX_LENGTH];
int value_length = SD_findKey(key, value_string);
return HELPER_ascii2Int(value_string, value_length);
}
float SD_findFloat(const __FlashStringHelper * key) {
char value_string[VALUE_MAX_LENGTH];
int value_length = SD_findKey(key, value_string);
return HELPER_ascii2Float(value_string, value_length);
}
String SD_findString(const __FlashStringHelper * key) {
char value_string[VALUE_MAX_LENGTH];
int value_length = SD_findKey(key, value_string);
return HELPER_ascii2String(value_string, value_length);
}
int SD_findKey(const __FlashStringHelper * key, char * value) {
File configFile = SD.open(FILE_NAME);
if (!configFile) {
Serial.print(F("SD Card: error on opening file "));
Serial.println(FILE_NAME);
return;
}
char key_string[KEY_MAX_LENGTH];
char SD_buffer[KEY_MAX_LENGTH + VALUE_MAX_LENGTH + 1];
int key_length = 0;
int value_length = 0;
PGM_P keyPoiter;
keyPoiter = reinterpret_cast<PGM_P>(key);
byte ch;
do {
ch = pgm_read_byte(keyPoiter++);
if (ch != 0)
key_string[key_length++] = ch;
} while (ch != 0);
while (configFile.available()) {
int buffer_length = configFile.readBytesUntil('\n', SD_buffer, 100);
if (SD_buffer[buffer_length - 1] == '\r')
buffer_length--;
if (buffer_length > (key_length + 1)) {
if (memcmp(SD_buffer, key_string, key_length) == 0) {
if (SD_buffer[key_length] == '=') {
value_length = buffer_length - key_length - 1;
memcpy(value, SD_buffer + key_length + 1, value_length);
break;
}
}
}
}
configFile.close();
return value_length;
}
int HELPER_ascii2Int(char *ascii, int length) {
int sign = 1;
int number = 0;
for (int i = 0; i < length; i++) {
char c = *(ascii + i);
if (i == 0 && c == '-')
sign = -1;
else {
if (c >= '0' && c <= '9')
number = number * 10 + (c - '0');
}
}
return number * sign;
}
float HELPER_ascii2Float(char *ascii, int length) {
int sign = 1;
int decimalPlace = 0;
float number = 0;
float decimal = 0;
for (int i = 0; i < length; i++) {
char c = *(ascii + i);
if (i == 0 && c == '-')
sign = -1;
else {
if (c == '.')
decimalPlace = 1;
else if (c >= '0' && c <= '9') {
if (!decimalPlace)
number = number * 10 + (c - '0');
else {
decimal += ((float)(c - '0') / pow(10.0, decimalPlace));
decimalPlace++;
}
}
}
}
return (number + decimal) * sign;
}
String HELPER_ascii2String(char *ascii, int length) {
String str;
str.reserve(length);
str = "";
for (int i = 0; i < length; i++) {
char c = *(ascii + i);
str += String(c);
}
return str;
}
Klicken Sie auf die Hochladen-Schaltfläche in der Arduino-IDE, um Code auf den Arduino hochzuladen
Sehen Sie das Ergebnis im Serial Monitor.
SD Card initialized.
myInt_1 = 2
myInt_2 = -105
myFloat_1 = 0.74
myFloat_2 = -46.08
myString_1 = Hello
myString_2 = ArduinoGetStarted.com
Jetzt kannst du den Code ändern, um weitere Variablen hinzuzufügen.
※ Notiz:
Der obige Code kümmert sich nicht um die Reihenfolge der Schlüssel-Wert-Paare. Er sucht vom Anfang bis zum Ende der Datei nach dem Schlüssel, bis dieser gefunden wird.
Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.