Arduino Nano - Lire la configuration depuis une carte SD

Ce tutoriel vous explique comment utiliser un fichier de configuration sur une carte Micro SD. Plus précisément, nous allons examiner :

Fichier de configuration de carte Micro SD pour Arduino Nano

Préparation du matériel

1×Official Arduino Nano
1×Alternativement: DIYables ATMEGA328P Nano Development Board
1×Câble USB A vers Mini-B
1×Carte Micro SD
1×Module carte Micro SD
1×Fils de connexion
1×Optionnel: Adaptateur carte mémoire MicroSD vers SD
1×Optionnel: 9V Power Adapter for Arduino Nano
1×Recommandé: Carte d'extension à bornier à vis pour Arduino Nano
1×Recommandé: Carte d'extension breakout pour Arduino Nano
1×Recommandé: Répartiteur d'alimentation pour Arduino Nano

Ou vous pouvez acheter les kits suivants:

1×Kit de Capteurs DIYables (30 capteurs/écrans)
1×Kit de Capteurs DIYables (18 capteurs/écrans)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos du module de carte Micro SD

Si vous ne connaissez pas le module de carte Micro SD, y compris son schéma de brochage, son fonctionnement et comment le programmer, consultez le tutoriel Arduino Nano - Carte Micro SD..

Comment ça marche

Chaque paire clé-valeur est stockée sur la carte Micro SD sur sa propre ligne. La clé et la valeur sont séparées par un signe =. Un caractère de nouvelle ligne sépare chaque paire clé-valeur des autres.

Le code Arduino Nano recherchera la clé et localisera la valeur associée, puis la stockera dans une variable. La variable peut être de type int, float ou String.

Diagramme de câblage

  • Vous pouvez utiliser des câbles à jumper male-femelle pour connecter le module de carte micro SD à l'Arduino Nano.
Schéma de câblage du module de carte Micro SD Arduino Nano

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

  • Ou vous pouvez connecter le module de carte micro SD à la planche d'essai, puis utiliser les fils cavaliers mâle-mâle.
Schéma de câblage du module de carte Micro SD Arduino Nano

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Voir Comment alimenter un Arduino Nano..

Comment lire la configuration dans des variables

  • Générez un fichier config.txt sur votre PC en utilisant le Bloc-notes ou Notepad++.
  • Copiez les paires clé-valeur suivantes et collez-les dans le config.txt :
myString_1=Hello myString_2=ArduinoGetStarted.com myInt_1=2 myInt_2=-105 myFloat_1=0.74 myFloat_2=-46.08
  • Connectez la carte Micro SD au PC à l'aide d'un lecteur de carte SD USB 3.0.
  • Assurez-vous que la carte Micro SD est formatée en FAT16 ou FAT32 (vous pouvez chercher des instructions en ligne).
  • Placez le fichier config.txt dans le dossier principal de la carte Micro SD.
  • Détachez la carte Micro SD du PC.
  • Connectez la carte Micro SD à l'Arduino Nano en utilisant le module de carte Micro SD, en suivant le schéma de câblage.
  • Copiez le code ci-dessous et ouvrez-le avec l'IDE Arduino.
/* * Ce code Arduino Nano a été développé par newbiely.fr * Ce code Arduino Nano est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-nano/arduino-nano-read-config-from-sd-card */ #include <SD.h> #define PIN_SPI_CS 4 #define FILE_NAME "config.txt" #define KEY_MAX_LENGTH 30 // change it if key is longer #define VALUE_MAX_LENGTH 30 // change it if value is longer // variables 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); // don't do anything more: } 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]; // 1 is = character int key_length = 0; int value_length = 0; // Flash string to string 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); // check line by line while (configFile.available()) { int buffer_length = configFile.readBytesUntil('\n', SD_buffer, 100); if (SD_buffer[buffer_length - 1] == '\r') buffer_length--; // trim the \r if (buffer_length > (key_length + 1)) { // 1 is = character if (memcmp(SD_buffer, key_string, key_length) == 0) { // equal if (SD_buffer[key_length] == '=') { value_length = buffer_length - key_length - 1; memcpy(value, SD_buffer + key_length + 1, value_length); break; } } } } configFile.close(); // close the file 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; }
  • Cliquez sur le bouton Upload dans l'IDE Arduino pour compiler et téléverser le code sur l'Arduino Nano.
  • Vérifiez le moniteur série pour le résultat.
COM6
Send
SD Card initialized. myInt_1 = 2 myInt_2 = -105 myFloat_1 = 0.74 myFloat_2 = -46.08 myString_1 = Hello myString_2 = ArduinoGetStarted.com
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Le moniteur série affiche les valeurs des variables qui sont identiques à celles stockées sur la carte micro SD.

Vous pouvez maintenant modifier le code afin d'inclure des variables supplémentaires.

※ Note:

Le code ne prend pas en compte la séquence des paires clé-valeur. Il parcourrera le fichier du début à la fin jusqu'à ce que la clé soit trouvée.

Vidéo

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !