Перейти к содержанию

Arduino micro SD: подключение sd карты к Ардуино

Arduino micro SD подключение к Ардуино

Модуль карты памяти (arduino micro sd card) используется для сохранения данных от датчиков при создании сложных проектов, поскольку собственная энергонезависимая память микроконтроллера — eeprom позволяет использовать только 4 Кбайт памяти на Arduino Mega. В этой статье рассмотрим, как правильно читать и записывать информацию в файл памяти модуля SD карты Ардуино с помощью микроконтроллера Ардуино.

Необходимые компоненты:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • SD card shield Arduino
  • коннекторы
  • скачать библиотеку SD.h и SPI.h

Дополнительные материалы на эту тему:

  1. EEPROM Ардуино, пример использования
  2. Массивы данных, массивы строк Ардуино
  3. Типы данных, типы переменных в Ардуино

Некоторые производители предлагают SD card shield с двумя контактами питания — 5 и 3,3 вольт (см. картинку ниже). В этом случае к выводу 3.3V должно быть подключено стабилизированное напряжение 3,3 вольта. Если такого контакта нет, то 5 вольт от микроконтроллера должны быть подключены к контакту ‘5V’. Для работы с модулем рекомендуется использовать файловую систему FAT16 или FAT32 на карте microSD.

Arduino SD card распиновка, характеристики

Arduino micro SD card распиновка, характеристики

micro SD Arduino характеристики

  • Напряжение питания: 5 В или 3.3 В
  • Потребляемый ток: от 0.2 мА до 200 мА
  • Поддержка карт: micro SD, micro SDHC
  • Интерфейс: SPI
  • Габариты: 42мм х 24мм х 12мм

Модуль подключается к Arduino через интерфейс SPI, для этого вам понадобятся контакты SCK, MISO, MOSI и CS. Платы Arduino Uno и Nano имеют выделенные контакты для шины SPI, плата Mega 2560 имеет порты SPI на других контактах. Вы можете использовать любой свободный пин Ардуино для контакта CS и указать изменение в программе. По умолчанию используются контакты микроконтроллеров, перечисленных в таблице ниже.

Как подключить модуль SD карты к Ардуино

Как подключить модуль SD карты Ардуино

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

Чтобы проверить подключение micro sd модуля к плате Arduino Uno и флэш-памяти, используйте стандартный скетч библиотеки SD.h — CardInfo (пример кода показан ниже). После загрузки программы в микроконтроллер откройте монитор последовательного порта Arduino IDE, и вы увидите информацию о файловой системе карты, доступном объеме памяти и список файлов с датой их создания, находящихся на карте micro sd.

Скетч для проверки карты памяти micro SD


#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 card (name, date and size in bytes): ");
   root.openRoot(volume);

   root.ls(LS_R | LS_DATE | LS_SIZE);
}

void loop() {
}

Следующий пример позволяет открыть файл test.txt с карты памяти для его записи (если файла с таким именем нет, он будет создан) и записать в файл строку текста «test 1, 2, 3». Затем файл закрывается, чтобы сохранились все данные. Далее вся информация из сохраненного файла передается в COM-порт Arduino IDE. Загрузите следующую программу для записи информации на SD-карту и откройте монитор последовательного порта.

Скетч для Ардуино записи на SD карту данных

#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() {
}

Arduino micro SD подключение к Ардуино

Следующий код позволяет вывести на монитор порта информацию о размере файла test.txt из предыдущего примера и всей информации, которая была в него записана. Обратите внимание, что имя файла на SD-карте не должно содержать более 8 символов (латинских букв), не включая расширение файла. Библиотека SD.h не чувствительна к регистру в имени файла, то есть «TEST.txt» и «test.txt» — это один и тот же файл.

Скетч для Ардуино чтения с SD карты данных

#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() {
}

Команды библиотеки SD.h для работы с micro sd

available() – проверяет наличие в файле байт, доступные для чтения;
size() – выводит информацию о размере данных;
read() – считывает информацию;
write() – производит запись в файл;
close() – закрывает файл, проверяя сохранены ли данные на sd карту;
flush() – позволяет убедиться, записаны ли данные на карту памяти;
name() – возвращает указатель на имя;
peek() – считывает байты данных, не перемещая указатель;
position() – показывает текущее положение указателя в файле;
seek() – меняет положение текущей позиции в файле;
print() – выводит данные в отдельный файл;
println() – печатает данные в файл до места, где появляется пустая строка;
isDirectory() – проверка, является ли файл директорией (папкой);
openNextFile() – выводит имя следующего файла на карте;
rewindDirectory() – возвращает к первому файлу в папке;

Заключение. Перед началом работы с модулем карты памяти необходимо установить библиотеки SD.h и SPI.h, которые вы можете скачать с нашего сайта. Этот модуль будет полезен в проектах, где необходимо периодически сохранять информацию. Например, если вы хотите ежедневно сохранять информацию с датчика  температуры DHT22 или данные с датчика давления bmp180 (GY-68) на карте памяти для Ардуино.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

newzaym
➜