Подключение модуля microSD к ESP32
Карта памяти по SPI
Модуль microSD к ESP32 подключается по SPI: SCK (GPIO18), MISO (GPIO19), MOSI (GPIO23), CS (например GPIO5). Для самой карты нужно 3,3 В.
Схема подключения модуля microSD к ESP32
| Модуль microSD | ESP32 |
|---|---|
| CS | GPIO5 |
| MISO | GPIO19 |
| MOSI | GPIO23 |
| SCK | GPIO18 |
| VCC | 3V3 |
| GND | GND |
Схема из примера «Карта SD: чтение и запись файлов».
Выводы Модуль microSD
| Вывод | Назначение |
|---|---|
| CS | выбор карты |
| MISO | данные от карты |
| MOSI | данные к карте |
| SCK | тактовый сигнал |
| VCC | питание |
| GND | общий провод |
Код для ESP32
#include <SD.h>
#include <SPI.h>
const int CS = 5;
void setup() {
Serial.begin(115200);
delay(200);
if (!SD.begin(CS)) {
Serial.println("карта не найдена: проверьте CS, MISO и питание");
return;
}
Serial.printf("карта на месте, размер %llu МБ\n", SD.cardSize() / (1024 * 1024));
// Что уже лежит на карте.
File root = SD.open("/");
for (File f = root.openNextFile(); f; f = root.openNextFile()) {
Serial.printf(" %s %u байт\n", f.name(), f.size());
f.close();
}
// Читаем готовый файл.
File readme = SD.open("/README.TXT");
if (readme) {
while (readme.available()) Serial.write(readme.read());
readme.close();
}
// И пишем свой.
File log = SD.open("/LOG.TXT", FILE_WRITE);
if (log) {
log.println("первая запись с платы");
log.close();
Serial.println("записано в /LOG.TXT");
}
}
void loop() {
delay(1000);
}
Скетч можно править и запускать в симуляторе без платы и установки среды.
Что учесть на ESP32
- Модули со стабилизатором и преобразователем уровней питают 5 В с VIN, «голые» адаптеры — 3,3 В.
- Карту форматируют в FAT32 (до 32 ГБ): большие карты в exFAT библиотека SD не понимает.
Частые ошибки при подключении к ESP32
- Модуль на 5 В запитать от 3V3: стабилизатор на плате не получает достаточного напряжения, карта не инициализируется.
- CS на выводе загрузки (GPIO0, 2, 12, 15): карта при включении мешает старту ESP32.
SD.begin()возвращает false — карта в exFAT (карты от 64 ГБ). Форматируйте в FAT32.- Файл пустой — не вызван
file.close()илиflush(): данные остались в буфере. - Питание просаживается при записи — карта берёт до 100 мА импульсами. Конденсатор 10–100 мкФ у модуля помогает.
- Вывод CS другого SPI-устройства не поднят в HIGH — два устройства отвечают одновременно.
Ещё по теме
Другие детали для ESP32
HC-SR04DHT22 (AM2302)BME280DS3231SSD1306 OLED 0,96″LCD 1602 с I2CMAX7219TM1637MPU6050 (GY-521)Модуль релеWS2812B (NeoPixel)KY-040Клавиатура 4×4HX711ФоторезисторRGB-светодиодСервопривод SG9074HC595ИК-приёмник (VS1838B)TFT ST7735 1,8″Шаговый двигательКнопкаПотенциометрПьезопищалкаСветодиодDS18B20Ползунковый переключательHC-SR501TTP223Датчик влажности почвыMQ-2LM35Джойстик KY-023DHT11HTU21DSN65HVD230