В этом уроке мы научимся создавать, редактировать и удалять файлы на 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" был удалён только после запуска монитора последовательного порта.
Обсуждение