Модуль Micro SD Card Reader: карта памяти для Arduino

Как подключить модуль SD или microSD к Arduino по SPI, проверить карту и записывать на неё показания датчиков.
Зачем Arduino карта памяти
Собственной памяти для данных у микроконтроллеров очень мало: у Arduino Mega это 4 Кб EEPROM, у Uno — всего 1 Кб. Для проектов, которые накапливают большие объёмы данных либо работают с изображениями или звуком, этого недостаточно. Самый доступный способ расширить хранилище — подключить SD-карту. Плат-адаптеров для SD и microSD выпускается много, принцип работы у них общий.

Перед использованием карту форматируют в FAT16 или FAT32 — средствами операционной системы или программой SDCardFormatter.

Подключение по SPI
Обмен с картой идёт по протоколу SPI, задействованы четыре линии. На Arduino Uno это 13 — SCK, 12 — MISO, 11 — MOSI. Для выбора устройства (CS) чаще всего берут вывод 10 или 4, но подойдёт и любой другой — его номер указывается в программе.

Проверка карты
В Arduino IDE уже есть библиотека для работы с картами, она называется SD. Для первой проверки достаточно загрузить пример CardInfo (Файл → Примеры → SD → CardInfo): в последовательный порт будут выведены сведения о файловой системе, ёмкость карты и список файлов на ней. Остальные функции библиотеки позволяют создавать, читать и дополнять файлы.

Пример: журнал показаний датчика
Типичное применение — регистратор данных. В примере из источника на карту сохраняются показания датчика BME280, а привязку ко времени обеспечивают часы реального времени DS3231.
Скетч подключает библиотеки SPI, SD, Adafruit_BME280 и DS1307RTC, вывод CS назначен на пин 10. При старте вызывается SD.begin(pinCS); если карта не инициализировалась, в порт уходит сообщение об ошибке. Далее раз в 60 секунд программа считывает влажность, температуру и атмосферное давление, собирает их в одну строку вместе с текущим временем (часы и минуты) и дописывает в файл, открытый через SD.open(имя, FILE_WRITE). Та же строка для отладки дублируется в последовательный порт. Имя файла формируется из даты — буква f, затем год, месяц и день, расширение .txt, — так что за каждый день получается отдельный файл, который потом можно открыть на компьютере.
Если что-то не работает
- Карта не читается: проверьте соединения модуля с платой, работоспособность карты на компьютере и формат — нужен FAT16 или FAT32.
- Файл не создаётся: имя должно соответствовать формату 8.3.