Главная → Связь

Модуль MicroSD-карты для Arduino: обзор и подключение

7 сентября 2026 · Связь

Модуль microSD-карты для Arduino: карта памяти вставляется в слот модуля на макетной плате

Когда данных становится больше, чем умещается в памяти самого Arduino, встаёт вопрос: куда писать логи, показания датчиков, конфиги или, скажем, WAV-файлы для плеера. Стандартный ответ — карта памяти. Не какая-нибудь специальная, а обычная microSD из старого телефона, вставленная в модуль за 150 рублей. Именно этот модуль — со слотом под карту, стабилизатором и преобразователем уровня — и разберём.

Что это за модуль

Сверху — слот microSD, снизу два ряда выводов с шагом 2,54 мм — их удобно втыкать в макетку или паять в гребёнку. На плате могут стоять две микросхемы, и именно они отличают готовый модуль от «голого» слота:

У модуля шесть выводов: GND — общий провод; VCC — питание, обычно 4,5–5,5 В (в версиях без стабилизатора — 3,3 В); CS — выбор чипа, которым Arduino указывает, что обращается именно к этому модулю (пин активен в низком уровне); MOSI — вход модуля, данные от Arduino; MISO — выход модуля, данные к Arduino; SCK — тактирование шины.

Характеристики (из описания производителя/продавца)

Параметр Значение
Поддерживаемые карты microSD (до 2 ГБ), microSDHC (до 32 ГБ)
Файловая система FAT16, FAT32
Интерфейс SPI (MISO, MOSI, SCK, CS)
Питание модуля 4,5–5,5 В (версии без стабилизатора — 3,3 В)
Логика SPI 5 В или 3,3 В (через буфер 74LVC125A)
Потребляемый ток от 0,2 мА (покой) до 200 мА (пик записи)
Габариты платы около 45 × 24 × 9 мм

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

На UNO шина SPI сидит на конкретных выводах, их перепутать нельзя: MOSI — Digital 11, MISO — Digital 12, SCK — Digital 13. Выбор чипа (CS) можно вешать на любой цифровой пин, по традиции берут D4 — так не конфликтуют с Ethernet-шилдами, у которых CS на D10.

Вывод модуля Arduino UNO
VCC 5V
GND GND
CS D4
MOSI D11
MISO D12
SCK D13

У Arduino Mega своя распиновка SPI: MOSI — 51, MISO — 50, SCK — 52, CS — любой цифровой, обычно 53. Скорость обмена задаёт библиотека сама, вручную тактировать не нужно.

Подключение к ESP32

У ESP32 логика 3,3 В, и это меняет расклад. Модуль с буфером и стабилизатором при 5 В на VCC будет выдавать 5-вольтовые уровни туда, куда ESP32 их не ждёт, — для её пинов максимум 3,6 В. Поэтому для ESP32 берут либо «упрощённый» модуль без стабилизатора и буфера, либо обычный модуль, но питают VCC от 3V3: стабилизатору на вход 3,3 В работать не всегда комфортно, зато буфер 74LVC125A как раз нормально пропускает 3,3-вольтовые уровни. Типовая распиновка:

Вывод модуля ESP32
VCC 3V3
GND GND
CS GPIO 5
MOSI GPIO 23
MISO GPIO 19
SCK GPIO 18

Код: пишем и читаем лог

В Arduino IDE есть штатная библиотека SD — ничего дополнительно ставить не надо. Пример ниже инициализирует карту, добавляет строку в log.txt с таймером и выводит содержимое файла в Serial Monitor:

#include <SPI.h>
#include <SD.h>

const int chipSelect = 4;  // пин CS (у Mega обычно 53)

void setup() {
  Serial.begin(9600);

  // SD.begin() возвращает false, если не воткнута SD-карта
  // или CS в скетче не совпадает с реальным пином
  if (!SD.begin(chipSelect)) {
    Serial.println("ошибка: карта не инициализируется");
    return;
  }
  Serial.println("карта найдена");

  // дописываем строку в log.txt
  File logFile = SD.open("log.txt", FILE_WRITE);
  if (logFile) {
    logFile.print("t=");
    logFile.println(millis());
    logFile.close();          // без close() данные не попадут на карту
    Serial.println("log.txt дополнен");
  } else {
    Serial.println("ошибка открытия log.txt");
  }

  // читаем файл обратно и печатаем в Serial
  File readBack = SD.open("log.txt");
  if (readBack) {
    while (readBack.available()) {
      Serial.write(readBack.read());
    }
    readBack.close();
  }
}

void loop() {
  // вся работа сделана в setup(), loop оставляем пустым
}

Для ESP32 в скетче меняется только CS: SD.begin(5). Если подключаете модуль к другим пинам, сначала настраивают шину: SPI.begin(18, 19, 23, 5), затем SD.begin(5, SPI).

Подготовка карты

Частые ошибки

«initialization failed» на рабочем модуле. Первая подозреваемая — формат карты. exFAT и NTFS библиотека SD не понимает, нужна FAT32. Вторая — несоответствие пина CS между платой и скетчем.

Маркировка CS. У дешёвых модулей контакт может называться SS, SD_CS или просто «4». Суть одна — это выбор чипа, но номер в скетче должен совпадать с тем пином, куда реально воткнут провод.

SD и Ethernet-модуль на одной SPI-шине. Оба делят MISO/MOSI/SCK, и если у одного из них CS «висит в воздухе» или остался в активном состоянии, шина конфликтует. CS у каждого SPI-устройства — отдельный пин, ничего не оставляют неподключённым.

Карта на 64 ГБ и больше. SDXC-карты отформатированы в exFAT и в 16-разрядный адрес не влезают. Библиотека SD их просто не увидит.

Запись не видна. Данные из logFile.write() до close() лежат в буфере Arduino, а не на карте. При пропадании питания незакрытый файл чаще всего повреждается — записал строку, сразу закрыл файл.

ESP32 и 5 В на VCC. Если подать 5 В на модуль с буфером высокого уровня, логика 5 В уйдёт прямо в GPIO ESP32 — пин может сгореть. Для ESP32 питание строго 3,3 В и согласование уровней.

Что ещё есть на сайте

Если интересна работа с данными на других носителях — посмотрите обзор модуля часов реального времени DS3231: в логгерах он часто живёт в паре с SD-модулем, чтобы к каждой строке лога прикладывать точное время. А если нужен практический пример на другом модуле — читайте обзор ультразвукового дальномера HC-SR04.

Информация собрана из открытых источников и паспортов производителей и не является истиной в последней инстанции. Характеристики, распиновку и совместимость проверяйте по документации конкретной партии модуля перед покупкой и подключением.

Читайте дальше

Связь

MAX485 и промышленный RS-485 в проекте на Arduino: обзор и подключение

Где заканчивается TTL и начинается RS-485 На коротком проводе от Arduino до датчика UART-уровни 3,3–5 В живут спокойно. Но стоит сигналу уйти…

Читать обзор →
Контроллеры

Raspberry Pi Pico на RP2040: чем он лучше Arduino и где проигрывает

Что это за плата Raspberry Pi Pico — не уменьшенный «Raspberry Pi», а отдельная линейка микроконтроллерных плат на собственном чипе RP2040. Linux…

Читать обзор →
Контроллеры

Arduino Nano, ESP8266 или ESP32: какой контроллер брать под задачу

Три платы, которые лежат у каждого, кто хоть раз паял. Стоят копейки, выглядят похоже, а годятся для разного. Разберём без религии: где…

Читать обзор →