Как подключить модуль карты MicroSD к ESP32 с помощью Arduino IDE

Kak Podklucit Modul Karty Microsd K Esp32 S Pomos U Arduino Ide



ESP32 — это усовершенствованная плата микроконтроллера, которая может подключать к себе различное количество периферийных устройств. Как и другие датчики, вы также можете подключить модуль карты MicroSD к ESP32. Вы можете использовать датчик карты MicroSD для приложений регистрации данных или увеличить емкость вашей платы микроконтроллера.

В этой статье будут описаны шаги по сопряжению карты MicroSD с платой ESP32 с использованием Arduino IDE.

Оглавление:







1. Модуль карты MicroSD



2. Как подключить ESP32 к модулю карты MicroSD



3. Аппаратное обеспечение





4. Код

5. Выход



6. Выполнение различных функций на карте MicroSD с помощью ESP32

Заключение

1. Модуль карты MicroSD

Модуль карты MicroSD представляет собой датчик ESP32, который позволяет подключить SD-карту к плате микроконтроллера. Он работает по протоколу связи SPI. Это позволяет ESP32 или любой другой плате микроконтроллера, такой как Arduino, получать доступ к данным, хранящимся на SD-карте, по протоколу SPI.

Рабочее напряжение модуля SD-карты составляет 3,3 В, поэтому напрямую подключить его к ESP32 или любой другой плате микроконтроллера невозможно. Для этого нам нужно использовать модуль SD-карты или датчик, работающий при напряжении более 5 В.

1.1. Распиновка

Карта MicroSD имеет шесть контактов. Два из них являются контактами питания: VCC и GND. При чтении четыре контакта используются для протокола связи SPI. Ниже приведены сведения обо всех этих шести контактах:

Силовые контакты:

  • ВКК: Подключается к контакту ESP32 5 В.
  • Земля: Подключается к контакту заземления (GND) ESP32.

SPI-контакты:

  • МИСО: (Главный вход, ведомый выход) Подключается к контакту ESP32 MOSI (главный выход, ведомый вход).
  • ДЫМ: Подключается к контакту ESP32 MISO (Master In Slave Out).
  • СКК: Подключается к контакту ESP32 SCK (Serial Clock).
  • SS: (Выбор ведомого) Подключается к контакту, указанному в коде Arduino как контакт SS (Выбор ведомого).

2. Как подключить ESP32 к модулю карты MicroSD

Чтобы соединить ESP32 с модулем карты MicroSD, вам необходимо настроить контакты питания для датчика SD-карты. Затем настройте контакты SPI. Здесь у вас есть два варианта: вы можете установить контакты SPI по умолчанию или определить свои собственные контакты SPI.

При использовании выводов SPI по умолчанию мы добавим СД. ч. и SD_MMC.h библиотеки. По умолчанию эти библиотеки используют контакты VSPI SPI (23, 19, 18, 5) для связи SPI. Однако вы также можете установить другие контакты для связи SPI.

ESP32 содержит два интерфейса SPI HSPI и VSPI со следующими подробностями контактов:

СПИ ДЫМ МИСО КЛК CS
ВСПИ Д23 Д19 Д18 Д5
HSPI Д13 Д12 Д14 Д15

Связанный: Справочник по распиновке ESP32 — полное руководство

2.2. Подготовьте SD-карту

Далее, прежде чем вы сможете приступить к чтению и записи данных на карту MicroSD, сначала вам необходимо настроить ее, отформатировав все предыдущие данные на ней.

Откройте SD-карту с помощью любого кард-ридера и формат это.

Выберите FAT32 для файловой системы вашей карты и нажмите Начинать .

После форматирования карты выберите ХОРОШО .

Теперь ваша SD-карта готова к подключению к ESP32 с помощью модуля SD-карты.

2.3. Принципиальная схема

Чтобы подключить датчик карты MicroSD к ESP32, следуйте приведенной ниже конфигурации:

Ниже приведена таблица конфигурации контактов соединительного провода:

Карта MicroSD ЭСП32
Земля Земля
ВКК ПРИХОДИТЬ
CS Д5
ДЫМ Д23
ССК Д18
МИСО Д19

3. Аппаратное обеспечение

Что касается аппаратного обеспечения, вам просто понадобятся несколько перемычек и макет вместе с ESP32 и модулем SD-карты.

4. Код

Теперь мы напишем код, который создаст текстовый файл на карте MicroSD и после этого запишет в него некоторую текстовую строку. После этого мы прочитаем содержимое текстового файла на последовательном мониторе Arduino IDE.

Запустите Arduino IDE и скомпилируйте данный код. После этого запишите его на свою плату ESP32:

#include

#include

Файл ;
константа интервал CS '=' 5 ;

// Записываем данное сообщение в файл по указанному пути
пустота ЗаписьФайл ( константа голец * путь , константа голец * сообщение ) {
// Открыть файл. Он поддерживает одновременное открытие одного файла
// закрываем другой файл перед открытием нового файла
мой файл '=' СД. открыть ( путь , ФАЙЛ_ЗАПИСЬ ) ;

если ( мой файл ) {
Сериал. печать ( 'Пишу %s' , путь ) ;
мой файл. println ( сообщение ) ;
мой файл. закрывать ( ) ; // Закрываем файл
Сериал. println ( 'завершенный.' ) ;
} еще {
Сериал. println ( 'ошибка открытия файла' ) ;
Сериал. println ( путь ) ;
}
}

// Распечатываем содержимое файла по указанному пути
пустота ЧтениеФайла ( константа голец * путь ) {
// Открыть файл
мой файл '=' СД. открыть ( путь ) ;
если ( мой файл ) {
Сериал. печать ( 'Чтение файла из %s \п ' , путь ) ;
// Читаем весь файл до последнего
пока ( мой файл. доступный ( ) ) {
Сериал. писать ( мой файл. читать ( ) ) ;
}
мой файл. закрывать ( ) ; // Закрываем файл
} еще {
// Если файл не открылся, выводим ошибку:
Сериал. println ( 'ошибка открытия test.txt' ) ;
}
}

пустота настраивать ( ) {
Сериал. начинать ( 9600 ) ;
задерживать ( 500 ) ;
пока ( ! Серийный ) { ; }

Сериал. println ( «Инициализация SD-карты…» ) ;
если ( ! СД. начинать ( CS ) ) {
Сериал. println ( 'Ошибка инициализации!' ) ;
возвращаться ;
}
Сериал. println ( «Инициализация выполнена». ) ;

ЗаписьФайл ( '/test.txt' , «Линуксхинт.com» ) ;
ЧтениеФайла ( '/test.txt' ) ;
}

пустота петля ( ) {

}

4.1. Объяснение кода

Для лучшего понимания разделим этот код на подразделы.

Инициализация и настройка: Во-первых, код начался с включения некоторых важных библиотек, связанных с модулем SD-карты. Добавлена ​​библиотека SPI.h для связи с SD-картой и SD.h для обработки операций с SD-картой. Далее он определяет глобальную переменную мой файл типа file для управления файловыми операциями. Константа CS установлена ​​на контакте 5, который будет использоваться в качестве контакта выбора чипа (CS) для SD-карты.

Настройка() Функция: Внутри функции настройки запускается последовательная связь. После этого мы инициализировали модуль SD-карты с помощью функции SD.begin(CS). Кроме того, мы также определили две разные функции для чтения и записи текста в текстовый файл.

Запись на SD-карту: Функция WriteFile() открывает файл test.txt для записи с помощью SD.open(path, FILE_WRITE). После этого он записывает строку Linuxhint.com в файл, используя myFile.println(message).

Чтение с SD-карты: Чтобы прочитать содержимое файла, мы использовали функцию ReadFile(). В случае успешного считывания данные будут отправлены в последовательный порт Arduino и отображены на последовательном мониторе Arduino IDE.

5. Выход

В выводе вы можете увидеть ту же строку, которую мы определили в коде Arduino IDE, которая отображается на последовательном мониторе Arduino IDE.

6. Выполнение различных функций на карте MicroSD с помощью ESP32

Мы можем выполнять различные операции, такие как создание, удаление или добавление каталогов на картах MicroSD, непосредственно через код Arduino IDE.

6.1. Создание каталогов на карте MicroSD

Приведенный ниже код создаст новый каталог на карте MicroSD. Он определяет функцию под названием создатьDir который принимает объект файловой системы (fs::FS) и путь в качестве входных данных. Эта функция пытается создать каталог по указанному пути и печатает сообщения, указывающие на успех или неудачу.

#include 'FS.h'

#include 'SD.h'

#include 'SPI.h'

пустота создатьDir ( фс :: ФС & фс , константа голец * путь ) {

Сериал. печать ( 'Создание каталога: %s \п ' , путь ) ;

если ( фс. мкдир ( путь ) ) {

Сериал. println ( «Режиссёр создал» ) ;

} еще {

Сериал. println ( 'mkdir не удалось' ) ;

}

}

пустота настраивать ( ) {



Сериал. начинать ( 115200 ) ;

// Инициализируем SD-карту

если ( ! СД. начинать ( ) ) {

Сериал. println ( «Ошибка монтирования карты» ) ;

возвращаться ;

}

// Создаем каталог с именем 'mydir'

создатьDir ( СД , '/мидир' ) ;

}

пустота петля ( ) {



}

В выводе вы можете видеть, что новый каталог создан с помощью /mydir имя.

6.2. Перечисление каталогов на карте MicroSD

В приведенном ниже коде мы собираемся перечислить все каталоги, имеющиеся на карте MicroSD. списокDir функция рекурсивно перечисляет содержимое каталога на SD-карте. Он печатает информацию как о каталогах (с префиксом «DIR»), так и о файлах (с префиксом «FILE»), включая их имена и размеры.

#include 'FS.h'
#include 'SD.h'
#include 'SPI.h'

пустота списокDir ( фс :: ФС & фс , константа голец * имя каталога , uint8_t уровни ) {
Сериал. печать ( 'Каталог листинга: %s \п ' , имя каталога ) ;
Корень файла '=' фс. открыть ( имя каталога ) ;
если ( ! корень ) {
Сериал. println ( «Не удалось открыть каталог» ) ;
возвращаться ;
}
если ( ! корень. isDirectory ( ) ) {
Сериал. println ( «Не каталог» ) ;
возвращаться ;
}
Файл файл '=' корень. открытьСледующийФайл ( ) ;
пока ( файл ) {
если ( файл. isDirectory ( ) ) {
Сериал. Распечатать ( ' ТЫ : ' ) ;
Сериал. println ( файл. имя ( ) ) ;
если ( уровни ) {
списокDir ( фс , файл. имя ( ) , уровни - 1 ) ;
}
} еще {
Сериал. Распечатать ( ' ФАЙЛ: ' ) ;
Сериал. Распечатать ( файл. имя ( ) ) ;
Сериал. Распечатать ( ' РАЗМЕР: ' ) ;
Сериал. println ( файл. размер ( ) ) ;
}
файл '=' корень. открытьСледующийФайл ( ) ;
}
}

пустота настраивать ( ) {
Сериал. начинать ( 115200 ) ;
если ( ! СД. начинать ( ) ) {
Сериал. println ( «Ошибка монтирования карты» ) ;
возвращаться ;
}
списокDir ( СД , '/' , 0 ) ;
}

пустота петля ( ) {

}

В выводе вы можете увидеть два разных файла. Один из них — текстовый файл, а другой — каталог, который мы создали внутри предыдущего кода.

6.3. Удаление каталогов

Теперь удалим ранее созданные каталоги и текстовые файлы. Для этого мы собираемся использовать удалитьDir функция, она попытается удалить каталог, указанный в пути. В случае успеха он печатает Каталог удален. ; в противном случае он печатает rmdir не удалось .

#include 'FS.h'
#include 'SD.h'
#include 'SPI.h'

пустота удалитьDir ( фс :: ФС & фс , константа голец * путь ) {
Сериал. печать ( 'Удаление каталога: %s \п ' , путь ) ;
если ( фс. это РМ ( путь ) ) {
Сериал. println ( 'Режиссер удален' ) ;
} еще {
Сериал. println ( 'рмдир не удался' ) ;
}
}

пустота настраивать ( ) {
Сериал. начинать ( 115200 ) ;

если ( ! СД. начинать ( ) ) {
Сериал. println ( «Ошибка монтирования карты» ) ;
возвращаться ;
}


}

пустота петля ( ) {

}

6.4. Получить тип карты MicroSD

Карта MicroSD или С обеспечить Д Карта igital изначально была разработана ассоциацией SD-карт и предназначена для использования в портативных устройствах, таких как смартфоны и камеры. SD-карты в основном содержат четыре типа семейств:

  • SDSC (SD стандартной емкости): Эти карты предлагают скромный объем памяти в 2 ГБ и используют файловые системы FAT-12 и FAT-16.
  • SDHC (SD высокой емкости): Эти карты имеют объем от 2 до 32 ГБ и используют файловую систему FAT-32.
  • SDXC (SD расширенной емкости): Эти карты используют файловую систему exFAT и имеют объем от 32 ГБ до 2 ТБ.
  • СДИО: Карты SDIO служат двойной цели, объединяя хранилище данных с функциями ВВОДА/ВЫВОДА.

Чтобы проверить тип вашей карты, запустите следующий код:

#include 'FS.h'
#include 'SD.h'
#include 'SPI.h'

пустота настраивать ( ) {
Сериал. начинать ( 115200 ) ;

если ( ! СД. начинать ( ) ) {
Сериал. println ( «Ошибка монтирования карты» ) ;
возвращаться ;
}

uint8_t тип карты '=' СД. тип карты ( ) ;
если ( тип карты == КАРТА_НЕТ ) {
Сериал. println ( «SD-карта не подключена» ) ;
возвращаться ;
}

Сериал. Распечатать ( «Тип SD-карты: » ) ;
если ( тип карты == КАРТА_MMC ) {
Сериал. println ( 'ММК' ) ;
} еще если ( тип карты == КАРТА_SD ) {
Сериал. println ( 'СДСК' ) ;
} еще если ( тип карты == КАРТА_SDHC ) {
Сериал. println ( 'СДХК' ) ;
} еще {
Сериал. println ( 'НЕИЗВЕСТНЫЙ' ) ;
}

uint64_t размер карты '=' СД. размер карты ( ) / ( 1024 * 1024 ) ;
Сериал. печать ( «Размер SD-карты: %lluMB \п ' , размер карты ) ;
}

пустота петля ( ) {
}

Поскольку у меня карта на 32 ГБ, вы можете видеть, что она находится в диапазоне SDHC карты.

6.5. Получить размер карты MicroSD

Вы также можете узнать размер SD-карты, загрузив приведенный ниже код на плату ESP32.

#include 'FS.h'
#include 'SD.h'
#include 'SPI.h'

пустота настраивать ( ) {
Сериал. начинать ( 115200 ) ;

если ( ! СД. начинать ( ) ) {
Сериал. println ( «Ошибка монтирования карты» ) ;
возвращаться ;
}

uint8_t тип карты '=' СД. тип карты ( ) ;
если ( тип карты == КАРТА_НЕТ ) {
Сериал. println ( «SD-карта не подключена» ) ;
возвращаться ;
}

uint64_t размер карты '=' СД. размер карты ( ) / ( 1024 * 1024 ) ;
Сериал. печать ( «Размер SD-карты: %lluMB \п ' , размер карты ) ;

// Здесь можно вызвать другие функции (listDir, createDir, RemoveDir и т. д.)
}

пустота петля ( ) {

}

Из вывода видно, что у меня есть SD-карта объемом примерно 30 ГБ.

Заключение

Модуль карты MicroSD используется для чтения и записи данных с SD-карты с помощью платы ESP32. Модуль карты MicroSD взаимодействует с микроконтроллером с помощью интерфейса SPI. Таким образом, вы можете либо использовать библиотеку SPI, либо определить свои собственные контакты SPI внутри кода. После подключения вы можете читать, записывать текстовый файл или создавать новые каталоги на SD-карте.