Скидки, ограниченное предложение! Полный список акционных товаров

Урок 20. Подключение и работа с флеш картой на Arduino

Необходимые детали
Видео уроки

В этом уроке мы научимся создавать, редактировать и удалять файлы на MicroSD карте.

Нам понадобится:

Для реализации проекта не требуется установка дополнительных библиотек. Библиотека для работы с адаптером карт MicroSD v1.0 входит в стандартный набор Arduino IDE > Эскиз > Include Library > SD.

Схема подключения:

Подключение адаптера карт MicroSD v1.0 к Arduino Uno осуществляется к аппаратным выводам SPI (4 вывода: CS, SCK, MOSI, MISO).

Схема подключения адаптера карт MicroSD к Arduino Uno

Адаптер карт MicroSD Arduino Uno
CS (Chip Select) 10
SCK (Serial ClocK) 13
MOSI (Master Out Slave In) 11
MISO (Master In Slave Out) 12
Vcc 5V
GND GND

Питание:

Питание адаптера подаётся на выводы Vcc и GND, напряжением 5В постоянного тока.

Базовые функции, для работы с файлами SD-карты:

// создание переменной myFile класса File библиотеки SD, которая будет служить "указателем" на файл
   File myFile;                                   // переменная потребуется для открытия и закрытия файла, а так же для работы с открытым файлом
// открытие файла "iarduino.txt" для чтения и записи, начиная с конца файла:
   myFile = SD.open("iarduino.txt", FILE_WRITE);  // если файла с именем "iarduino.txt" - нет, то он будет создан.
// запись строки в файл >"iarduino.txt":
   myFile.print("начало строки, ");               // запись строки в открытый файл "iarduino.txt", без добавления символов перехода на новую строку.
   myFile.println("продолжение строки.");         // запись строки в открытый файл "iarduino.txt", с  добавлением символов перехода на новую строку.
// закрытие файла "iarduino.txt":
   myFile.close();
// открытие файла "iarduino.txt" для чтения, начиная с начала файла:
   myFile = SD.open("iarduino.txt");              // если файла с именем "iarduino.txt" - нет, то он не будет открыт.
// чтение строк из файла "iarduino.txt":
   while(myFile.available()){                     // если есть данные для чтения из открытого файла "iarduino.txt"
      Serial.write(myFile.read());                // читаем очередной байт из файла и выводим его в последовательный порт.
   }
// удаление файла "iarduino.txt":
   SD.remove("iarduino.txt");                     // функция возвращает результат удаления true/false
// создание файла "iarduino.txt":
   myFile = SD.open("iarduino.txt", FILE_WRITE);  // если файла с именем "iarduino.txt" - нет, то он будет создан.
   myFile.close();                                // закрываем файл "iarduino.txt" без записи данных.
// проверка существования файла "iarduino.txt":
   if(SD.exists("example.txt")){...;}             // условие будет выполнено, если файл "iarduino.txt" существует на SD-карте
// проверка открытия файла "iarduino.txt":
   if(myFile){...;}                               // условие будет выполнено, если файл был успешно открыт: myFile = SD.open(...)
// создание каталога "my_Dir"
   SD.mkdir("my_Dir");                             // функция возвращает результат создания true/false. Если указать "first_Dir/my_Dir", то будет создано два каталога (каталог my_Dir в каталоге first_Dir)
// удаление каталога "my_Dir"
   SD.rmdir("my_Dir");                             // функция возвращает результат удаления true/false. Удаляемый каталог должен быть пустым

Создадим два скетча. В первом будим создавать файл и записывать в него информацию, а во втором, удалим созданный файл.

Создание файла:

// подключение библиотек SPI и SD:
#include <SPI.h>
#include <SD.h>
const uint8_t PIN_CS = 10;                         // указываем номер вывода arduino подключенного к выводу CS адаптера
File myFile;                                       // создаём переменную myFile класса File, которая будет служить "указателем" на открытый файл
void setup(){
  Serial.begin(9600);                              // открываем последовательный порт на скорости 9600 бод
  while(!Serial){;}                                // ожидаем соединение последовательного порта
//используем ответ инициализации, для определения работоспособности карты и адаптера
  if(!SD.begin(PIN_CS)){                           // инициализация SD карты с указанием номера вывода CS
    Serial.println("SD-card not found"); return;   // ошибка инициализации. карта не обнаружена или не подключён (неправильно подключён) адаптер карт MicroSD
  }
//проверяем наличие файла "iarduino.txt" на SD-карте
  if(SD.exists("iarduino.txt")){                   // если файл с именем "iarduino.txt" существует, то ...
    Serial.println("file exists");
  }else{                                           // иначе ...
    Serial.println("file doesn't exist");
  }
//открываем файл "iarduino.txt" для чтения и записи, начиная с конца файла, и записываем в него строку
  myFile = SD.open("iarduino.txt", FILE_WRITE);    // если файла с именем "iarduino.txt" - нет, то он будет создан.
  if(myFile){                                      // если файл доступен (открыт для записи), то ...
    Serial.println("file is opened");
    myFile.print("The beginning of a line, ");     // записываем первую часть строки в файл
    myFile.println("The end of the line");         // записываем вторую часть строки в файл
    Serial.println("data written to the file");
    myFile.close();                                // закрываем файл
    Serial.println("file is closed");
  }else{                                           // иначе ...
    Serial.println("file is not opened");
  }
//проверяем наличие файла "iarduino.txt" на SD-карте
  if(SD.exists("iarduino.txt")){                   // если файл с именем "iarduino.txt" существует, то ...
    Serial.println("file exists");
  }else{                                           // иначе ...
    Serial.println("file doesn't exist");
  }
}
void loop(){
}

если подключить адаптер карт MicroSD v1.0 к Arduino Uno, подключить Arduino Uno к ПК, загрузить скетч, вставить SD-карту и запустить Монитор последовательного порта, то в мониторе будут выведены следующие строки:

file doesn't exist (файл не обнаружен)
file is opened (файл открыт)
data written to the file (данные записаны в файл)
file is closed (файл закрыт)
file exists (файл обнаружен)

а на SD-карте появится файл "iarduino.txt" с одной строкой "The beginning of a line, The end of the line".

Если загрузить скетч при вставленной в адаптер карт MicroSD v1.0 SD-картой, то на SD-карте появится файл "iarduino.txt" с двумя строками "The beginning of a line, The end of the line", а первой строкой в мониторе последовательного порта будет "file exists" (файл обнаружен).

Дело в том, что функция setup() в обоих случаях выполняется дважды (сразу после загрузки скетча и после запуска монитора последовательного порта). Но в первом случае, после загрузки скетча, SD-карты не было в адаптере, следовательно, файл "iarduino.txt" был создан только после запуска монитора последовательного порта.

Удаление файла:

// подключение библиотек SPI и SD:
#include <SPI.h>
#include <SD.h>
const uint8_t PIN_CS = 10;                         // указываем номер вывода arduino подключенного к выводу CS адаптера
void setup(){
  Serial.begin(9600);                              // открываем последовательный порт на скорости 9600 бод
  while(!Serial){;}                                // ожидаем соединение последовательного порта
//используем ответ инициализации, для определения работоспособности карты и адаптера
  if(!SD.begin(PIN_CS)){                           // инициализация SD карты с указанием номера вывода CS
    Serial.println("SD-card not found"); return;   // ошибка инициализации. карта не обнаружена или не подключён (неправильно подключён) адаптер карт MicroSD
  }
//проверяем наличие файла "iarduino.txt" на SD-карте
  if(SD.exists("iarduino.txt")){                   // если файл с именем "iarduino.txt" существует, то ...
    Serial.println("file exists");
//  удаляем файл "iarduino.txt":
    if(SD.remove("iarduino.txt")){                 // функция возвращает результат удаления true/false
      Serial.println("file deleted");
    }else{
      Serial.println("file is not deleted");
    }
  }else{                                           // иначе ...
    Serial.println("file doesn't exist");
  }
//проверяем наличие файла "iarduino.txt" на SD-карте
  if(SD.exists("iarduino.txt")){                   // если файл с именем "iarduino.txt" существует, то ...
    Serial.println("file exists");
  }else{                                           // иначе ...
    Serial.println("file doesn't exist");
  }
}
void loop(){
}

если подключить адаптер карт MicroSD v1.0 к Arduino Uno, подключить Arduino Uno к ПК, загрузить скетч, вставить SD-карту и запустить Монитор последовательного порта, то в мониторе будут выведены следующие строки:

file exists (файл обнаружен)
file deleted (файл удалён)
file doesn't exist (файл не обнаружен)

а файл "iarduino.txt" будет удалён с SD-карты.

Если загрузить скетч при вставленной в адаптер карт MicroSD v1.0 SD-картой, то файл "iarduino.txt" будет удалён с SD-карты, но в мониторе последовательного порта будут две строки "file doesn't exist" (файл не обнаружен).

Дело в том, что функция setup() в обоих случаях выполняется дважды (сразу после загрузки скетча и после запуска монитора последовательного порта). Но в первом случае, после загрузки скетча, SD-карты не было в адаптере, следовательно, файл "iarduino.txt" был удалён только после запуска монитора последовательного порта.


Обсуждение

Присоединяйся

Другие уроки

На главную