Карта памяти SD
Микро SD-карта модуль
Питание: 4.5 В ~ 5.5 В, 3.3 с регулятором напряжения
Коммуникационный интерфейс: стандартный интерфейс SPI
Параметр:
1. Напряжение питания: 4.5 В (мин), 5 В (типичный), 5.5 В (макс.)
2. Ток: 0.2mA (мин), 80mA (типичный), мА (Макс.)
3. Поддерживаемые карты: микро SD карты (<= 2 г), Мирко SDHC карты (<= 32 г)
4. Размер: 42x24x12 мм
5. Вес: 5 г
Интерфейс:
1. Интерфейс управления: Шесть выводов (GND, VCC, Мисо, MOSI, СХК, CS), GND общий, VCC питания, Мисо, MOSI, СХК является SPI, CS
2. 3.3 В регулятор напряжения: LDO регулятор выход 3.3 В
3. Преобразования уровня цепи: Сигнал микро SD карты в направлении 3.3 В, Мисо сигнал, который управления интерфейс направлении также превращается в 3.3 В. Генеральный AVR микроконтроллер система может читать сигнала;
4. Микро разъем SD-карта: легко вставить и удалить
5. Колличество отверстий: 4 шт. 2 мм диаметр винта M2
Картридер microSD доступен при помощи библиотеки SD Library.
Библиотека SD предназначена для чтения и записи информации карт памяти SD. Библиотека поддерживает файловые системы FAT16 и FAT32 на стандартных SD-картах и картах памяти SDHC. При этом необходимо помнить, что корректно библиотека поддерживает работу только с короткими именами файлов по схеме
Начиная с версии 1.0, библиотека поддерживает открытие нескольких файлов.
Библиотека использует выводы 11, 12 и 13 (на большинстве плат Arduino) или 50, 51 и 52 (Arduino Mega). При использовании этой библиотеки вывод 4 задействуется для сигнала SS (Slave Select).
Arduino-библиотека SD
Класс SD
Класс SD предоставляет функции для доступа к карте памяти SD и манипулирования файлами и каталогами.
Функции класса SD:
begin();
exists();
mkdir();
open();
remove();
rmdir().
Функция begin()
Функция begin() инициализирует библиотеку SD, назначая вывод для сигнала SS (Slave Select).
Синтаксис
SD.begin(); SD.begin(pin)
Параметр: pin — вывод для сигнала SS.
Возвращаемые значения: true — в случае удачного соединения, false — в случае неудачи.
Функция exists()
Функция exists() проверяет, существует на карте SD файл или каталог. Синтаксис:
SD.exists(path)
Параметр: path — имя файла или каталога.
Возвращаемые значения: true — в случае удачного соединения, false — в случае неудачи.
Функция mkdir()
Функция mkdir() cоздает папку на карте памяти SD. Синтаксис:
SD.exists(dirpath)
Параметр: dirpath — имя создаваемого каталога (папки). Если параметр задается в виде пути с несуществующими промежуточными каталогами, то создаются и все промежуточные каталоги.
Возвращаемые значения: true — если папка создана, false — в случае неудачи.
Функция rmdir()
Функция rmdir() удаляет папку с карты памяти SD, папка должна быть пустой. Синтаксис:
SD.exists(dirpath)
Параметр: dirpath — имя удаляемой папки.
Возвращаемые значения: true — если папка удалена, false — в случае неудачи.
Функция open()
Функция open() открывает файл на карте памяти SD. Если файл не существует и открывается для записи, то он будет создан.
Синтаксис:
SD.open(filepath) SD.open(filepath, mode)
Параметры:
filepath — имя открываемого файла;
mode — режим открытия файла:
— открыть файл для чтения, начиная с начала файла;
— открыть файл для чтения и записи, начиная с конца файла. Возвращаемые значения: true — в случае удачи, false — в случае неудачи.
Функция remove()
Функция remove() удаляет файл с карты памяти SD. Синтаксис:
SD.remove(filepath)
Параметр: filepath — имя удаляемого файла.
Возвращаемые значения: true — в случае удачи, false — в случае неудачи.
Класс File
Класс File предоставляет функции для чтения и записи отдельных файлов на карте памяти SD.
Функции класса File:
available();
close();
flush();
peek();
position();
print();
println();
seek();
size();
read();
write();
isDirectory();
openNextFile();
rewindDirectory().
Функция available()
Функция available() проверяет, есть ли доступный для чтения байт в открытом файле.
Синтаксис:
myFile.available()
Параметр: File — экземпляр файла File, возвращаемый SD.open(). Возвращаемое значение: число доступных для чтения байтов.
Пример использования функции available() представлен в примере
// открыть файл для чтения myFile = SD.open("test.txt",); if (myFile)
{
// чтение из файла и отправка
// в последовательный порт while (myFile.available())
{
Serial.write(myFile.read());
}
}
// закрыть файл myFile.close();
Функция close()
Функция close() закрывает файл и сохраняет записанные на него данные на карту SD. Синтаксис:
myFile.close()
Параметр: File — экземпляр файла File, возвращаемый SD.open(). Возвращаемого значения нет.
Функция flush()
Функция flush() гарантирует, что любые байты, записанные в файл, физически сохранятся на SD-карте (при закрытии файла это делается автоматически).
Синтаксис:
myFile.flush()
Параметр: File — экземпляр файла File, возвращаемый SD.open(). Возвращаемого значения нет.
Функция peek()
Функция peek() считывает байт из файла из текущей позиции, не продвигаясь к следующей позиции.
Синтаксис:
myFile.peek()
Параметр: File — экземпляр файла File, возвращаемый SD.open(). Возвращаемые значения: байт из файла или –1, если байт не считан.
Функция position()
Функция position() возвращает текущую позицию в файле, куда следующий байт будет записываться или откуда считываться.
Синтаксис:
myFile.position()
Параметр: File — экземпляр файла File, возвращаемый SD.open(). Возвращаемое значение: текущая позиция в файле.
Функция print()
Функция print() записывает данные в файл, который был открыт для записи. Синтаксис:
myFile.print(data) myFile.print(data, BASE)
Параметры:
File — экземпляр файла File, возвращаемый SD.open();
data — данные для записи в файл;
BASE — вид передаваемых символов:
• BIN — двоичный;
• DEC — десятичный;
• OCT — восьмеричный;
• HEX — шестнадцатеричный. Возвращаемого значения нет.
Функция println()
Функция println() записывает данные в файл, который был открыт для записи, данные дополняются символами перевода строки.
Синтаксис:
myFile.println() myFile.println(data) myFile.println(data, BASE)
Параметры:
File — экземпляр файла File, возвращаемый SD.open();
data — данные для записи в файл;
BASE — вид передаваемых символов:
• BIN — двоичный;
• DEC — десятичный;
• OCT — восьмеричный;
• HEX — шестнадцатеричный. Возвращаемого значения нет.
Функция seek()
Функция seek() устанавливает новую позицию в файле для чтения или записи байта. Синтаксис:
myFile.seek(pos)
Параметры:
File — экземпляр файла File, возвращаемый SD.open();
pos — новая устанавливаемая позиция в файле для чтения или записи в файле. Возвращаемые значения: true — в случае удачи, false — в случае неудачи.
Функция size()
Функция size() возвращает размер файла в байтах. Синтаксис:
myFile.size()
Параметр: File — экземпляр файла File, возвращаемый SD.open(). Возвращаемое значение: размер файла в байтах.
Функция read()
Функция read() возвращает байт из открытого файла. Синтаксис:
myFile.read()
Параметр: File — экземпляр файла File, возвращаемый SD.open(). Возвращаемое значение: полученный из файла байт.
Функция write()
Функция write() записывает данные в открытый для записи файл. Синтаксис:
myFile.write(data) myFile.write(buf, len)
Параметры:
File — экземпляр файла File, возвращаемый SD.open();
data — передаваемые данные;
buf — массив символов или байтов;
len — размер символов в буфере для записи. Возвращаемое значение: количество записанных байтов.
Функция isDirectory()
Функция isDirectory() проверяет, является ли текущий файл каталогом или нет. Синтаксис:
myFile.isDirectory()
Параметр: File — экземпляр файла File, возвращаемый SD.open(). Возвращаемое значение: true — если да, false — если нет.
Функция openNextFile()
Функция openNextFile() возвращает имя следующего по позиции файла из каталога. Синтаксис:
myFile.openNextFile()
Параметр: File — экземпляр файла File, возвращаемый SD.open(). Возвращаемое значение: имя следующего файла из каталога.
Функция rewindDirectory()
Функция rewindDirectory() приведет вас обратно в первый файл в каталоге. Функ- ция используется в сочетании с openNextFile().
Синтаксис:
rewindDirectory()
Параметр: File — экземпляр файла File, возвращаемый SD.open(). Возвращаемое значение: имя первого файла каталога.
Запись показаний датчиков на SD-карту
Создадим скетч на Arduino, позволяющий каждую секунду записывать показания с нескольких датчиков на SD-карту. Схема подключения представлена на рисунке. Воспользуемся платой Ethernet shield, имеющей разъем для карт типа microSD. Для сигнала SS используется вывод 4.
Показания с датчиков температуры будем снимать 1 раз в 60 сек. Для получения времени применим библиотеку RTClib, которую можно скачать по ссылке https://github.com/adafruit/RTClib. Класс RTC_Millis использует Arduino-функцию millis(), добавляющую смещение к первоначально установленному времени — оно устанавливается в момент компиляции скетча из системного времени компьютера.
![]() |
Схема подключения DS18B20 |
Сначала необходимо подключить необходимые библиотеки, инициализировать их и установить начальное время.
#include <Wire.h>
#include "RTClib.h"
#include <SD.h>
#include <SPI.h>
#include <OneWire.h>
// вход 1wire датчиков OneWire ds(7);
// 1wire коды датчиков
byte my_addr[3][8]={{0x28,0x81,0xC4,0xBA,2,0,0,0x3B},
{0x28,0x67,0xE5,0xC7,2,0,0,0xA0},
{0x28,0xF6,0x98,0xBA,2,0,0,0x92}};
// текущий датчик int tek_sensor=0; File myFile; RTC_Millis RTC; DateTime dt;
unsigned int gettemp=0;
// имя файла текущего дня ymd String sfilename;
char filename[20];
// температура, полученная с датчика String sTemp;
// строка для записи в файл String record;
void setup () { Serial.begin(9600); Wire.begin();
RTC.begin(DateTime( DATE , TIME )); if (!SD.begin(4)) {
Serial.println("initialization SD failed!"); return;
}
Serial.println("initialization SD done.");
}