В этом уроке мы научимся создавать, редактировать и удалять файлы на MicroSD карте.
Нам понадобится:
- Piranha Uno R3 х 1шт.
- Trema-модуль адаптер карт MicroSD х 1шт.
- 6 проводной шлейф ПАПА-МАМА для подключения х 1шт.
Для реализации проекта не требуется установка дополнительных библиотек. Библиотека для работы с адаптером карт MicroSD входит в стандартный набор Arduino IDE > Эскиз > Include Library > SD.
Схема подключения:
Подключение адаптера карт MicroSD к Piranha Uno осуществляется к аппаратным выводам SPI (4 вывода: CS, SCK, MOSI, MISO).

| Адаптер карт MicroSD | Piranha 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 к Piranha Uno, подключить Piranha 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 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(){
}
если подключить Trema-модуль адаптер карт MicroSD к Arduino Uno, подключить Arduino Uno к ПК, загрузить скетч, вставить SD-карту и запустить Монитор последовательного порта, то в мониторе будут выведены следующие строки:
file exists (файл обнаружен)
file deleted (файл удалён)
file doesn't exist (файл не обнаружен)
а файл "iarduino.txt" будет удалён с SD-карты.
Если загрузить скетч при вставленной в адаптер карт MicroSD SD-картой, то файл "iarduino.txt" будет удалён с SD-карты, но в мониторе последовательного порта будут две строки "file doesn't exist" (файл не обнаружен).
Дело в том, что функция setup() в обоих случаях выполняется дважды (сразу после загрузки скетча и после запуска монитора последовательного порта). Но в первом случае, после загрузки скетча, SD-карты не было в адаптере, следовательно, файл "iarduino.txt" был удалён только после запуска монитора последовательного порта.

Обсуждение