Тази статия ще обясни стъпките за свързване на MicroSD карта с ESP32 платка с помощта на Arduino IDE.
Съдържание:
2. Как да свържете ESP32 с MicroSD карта модул
6. Изпълнение на различни функции на MicroSD карта с помощта на ESP32
- 6.1. Създаване на директории в MicroSD карта
- 6.2. Изброяване на директории в MicroSD карта
- 6.3. Премахване на директории
- 6.4. Вземете тип MicroSD карта
- 6.5. Вземете размер на SD картата
1. Модул за MicroSD карта
Модулът за карта MicroSD е сензор ESP32, който може да свърже SD картата към платката на вашия микроконтролер. Работи по комуникационния протокол SPI. Той позволява на ESP32 или друга микроконтролерна платка като Arduino да осъществява достъп до данните, съхранени на SD картата през SPI протокола.
Работното напрежение за модула на SD картата е 3,3 V, така че не е възможно да го свържете директно към ESP32 или друга микроконтролерна платка. За целта трябва да използваме модула на SD картата или сензора, който работи над 5V.
1.1. Pinout
MicroSD картата разполага с общо шест пина. Два от тях са захранващи щифтове: VCC и GND. Докато четенето се използват четири пина за комуникационен протокол SPI. Следват подробностите за всички тези шест пина:
Захранващи щифтове:
- VCC: Свързва се към щифта ESP32 5V.
- GND: Свързва се към щифта за заземяване на ESP32 (GND).
SPI щифтове:
- MISO: (Master In Slave Out) Свързва се към щифта ESP32 MOSI (Master Out Slave In).
- ДИМ: Свързва се към щифта ESP32 MISO (Master In Slave Out).
- SCK: Свързва се към щифта ESP32 SCK (сериен часовник).
- СС: (Избор на подчинен) Свързва се към щифта, посочен в кода на Arduino като щифт SS (Избор на подчинен).
2. Как да свържете ESP32 с MicroSD карта модул
За да свържете ESP32 с модула за MicroSD карта, ще трябва да настроите захранващите щифтове за вашия сензор за SD карта. След това настройте SPI щифтовете. Тук имате два избора, можете или да зададете SPI щифтовете по подразбиране, или да дефинирате свои собствени персонализирани SPI щифтове.
Когато използваме SPI щифтове по подразбиране, ще добавим SD h и SD_MMC.h библиотеки. По подразбиране тези библиотеки приемат VSPI SPI пинове (23, 19, 18, 5) за SPI комуникация. Можете обаче да зададете и други пинове за SPI комуникация.
ESP32 съдържа два SPI интерфейса HSPI и VSPI с подробности за техните щифтове, както следва:
SPI | ДИМ | MISO | CLK | CS |
VSPI | D23 | D19 | D18 | D5 |
HSPI | D13 | D12 | D14 | D15 |
Свързани: ESP32 Справочник за Pinout – Пълно ръководство
2.2. Подгответе SD картата
След това, преди да можете да продължите с четене и запис на данни на MicroSD карта, първо трябва да я настроите, като форматирате всички предишни данни в нея.
Отворете вашата SD карта с помощта на който и да е четец на карти и формат то.
Изберете FAT32 за файловата система на вашата карта и щракнете Започнете .
След като форматирате картата, изберете Добре .
Сега вашата SD карта е готова за свързване с ESP32 с помощта на модула за SD карта.
2.3. Схематична диаграма
За да свържете сензора на MicroSD картата с ESP32, следвайте дадената по-долу конфигурация:
Следва таблицата за конфигурация на щифтовете на свързващия проводник:
MicroSD карта | ESP32 |
GND | GND |
VCC | ИДВАМ |
CS | D5 |
ДИМ | D23 |
SCK | D18 |
MISO | D19 |
3. Хардуер
Що се отнася до хардуера, вие просто се нуждаете от няколко джъмперни кабела и макетна платка заедно с ESP32 и модул за SD карта.
4. Код
Сега ще напишем код, който ще създаде текстов файл в MicroSD картата и след това ще напише някакъв текстов низ към него. След като приключим, ще прочетем съдържанието на текстовия файл на серийния монитор Arduino IDE.
Стартирайте Arduino IDE и компилирайте дадения код. След това го запишете на вашата платка ESP32:
#include#include
Файл myFile ;
конст вътр CS = 5 ;
// Запишете даденото съобщение във файл на посочения път
невалиден WriteFile ( конст въглен * път , конст въглен * съобщение ) {
// Отворете файла. Поддържа отваряне на един файл наведнъж
// затворете другия файл, преди да отворите нов файл
myFile = SD. отворен ( път , FILE_WRITE ) ;
ако ( myFile ) {
Сериен. printf ( „Пиша до %s“ , път ) ;
myFile. println ( съобщение ) ;
myFile. близо ( ) ; // Затваряне на файла
Сериен. println ( 'завършено'. ) ;
} друго {
Сериен. println ( 'грешка при отваряне на файл' ) ;
Сериен. println ( път ) ;
}
}
// Отпечатване на съдържанието на файла по посочения път
невалиден ReadFile ( конст въглен * път ) {
// Отворете файла
myFile = SD. отворен ( път ) ;
ако ( myFile ) {
Сериен. printf ( „Четене на файл от %s \н ' , път ) ;
// Прочетете целия файл до последния
докато ( myFile. на разположение ( ) ) {
Сериен. пишете ( myFile. Прочети ( ) ) ;
}
myFile. близо ( ) ; // Затваряне на файла
} друго {
// Ако файлът не се отвори, отпечатайте грешка:
Сериен. println ( 'грешка при отваряне на test.txt' ) ;
}
}
невалиден настройвам ( ) {
Сериен. започвам ( 9600 ) ;
забавяне ( 500 ) ;
докато ( ! Сериен ) { ; }
Сериен. println ( „Инициализиране на SD картата...“ ) ;
ако ( ! SD. започвам ( CS ) ) {
Сериен. println ( „Неуспешна инициализация!“ ) ;
връщане ;
}
Сериен. println ( „Инициализацията е извършена.“ ) ;
WriteFile ( '/test.txt' , 'Linuxhint.com' ) ;
ReadFile ( '/test.txt' ) ;
}
невалиден цикъл ( ) {
}
4.1. Код Обяснение
За по-добро разбиране ще разделим този код на подчасти.
Инициализация и настройка: Първо, кодът започна с включването на някои важни библиотеки, свързани с модула на SD картата. Библиотеката SPI.h е добавена за комуникация със SD картата и SD.h за обработка на операции с SD карта. След това дефинира глобална променлива myFile от тип файл за управление на файлови операции. CS константата е настроена на пин 5, който ще се използва като щифт за избор на чип (CS) за SD картата.
Функция Setup(): Във функцията за настройка се стартира серийна комуникация. След това инициализирахме модула на 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 картата. Той дефинира функция, наречена createDir който приема обект на файлова система (fs::FS) и път като вход. Тази функция се опитва да създаде директория с посочения път и отпечатва съобщения, показващи успех или неуспех.
#include 'FS.h'#включете 'SD.h'
#включете 'SPI.h'
невалиден createDir ( fs :: FS и fs , конст въглен * път ) {
Сериен. printf ( „Създаване на директория: %s \н ' , път ) ;
ако ( fs. mkdir ( път ) ) {
Сериен. println ( „Dir създаден“ ) ;
} друго {
Сериен. println ( 'mkdir не успя' ) ;
}
}
невалиден настройвам ( ) {
Сериен. започвам ( 115200 ) ;
// Инициализиране на SD картата
ако ( ! SD. започвам ( ) ) {
Сериен. println ( „Неуспешно монтиране на карта“ ) ;
връщане ;
}
// Създаване на директория с име 'mydir'
createDir ( SD , '/mydir' ) ;
}
невалиден цикъл ( ) {
}
В изхода можете да видите, че е създадена нова директория с /mydir име.
6.2. Изброяване на директории в MicroSD карта
В кода по-долу ще изброим всички директории, присъстващи в MicroSD картата. The listDir функция рекурсивно изброява съдържанието на директория на SD карта. Той отпечатва информация както за директории (с префикс „DIR“), така и за файлове (с префикс „FILE“), включително техните имена и размери.
#include 'FS.h'#включете 'SD.h'
#включете 'SPI.h'
невалиден listDir ( fs :: FS и fs , конст въглен * dirname , uint8_t нива ) {
Сериен. printf ( „Директория с обяви: %s \н ' , dirname ) ;
Корен на файла = fs. отворен ( dirname ) ;
ако ( ! корен ) {
Сериен. println ( „Неуспешно отваряне на директорията“ ) ;
връщане ;
}
ако ( ! корен. isDirectory ( ) ) {
Сериен. println ( „Не е директория“ ) ;
връщане ;
}
Файл файл = корен. openNextFile ( ) ;
докато ( файл ) {
ако ( файл. isDirectory ( ) ) {
Сериен. печат ( ' ВИЕ : ' ) ;
Сериен. println ( файл. име ( ) ) ;
ако ( нива ) {
listDir ( fs , файл. име ( ) , нива - 1 ) ;
}
} друго {
Сериен. печат ( ' ФАЙЛ: ' ) ;
Сериен. печат ( файл. име ( ) ) ;
Сериен. печат ( ' РАЗМЕР: ' ) ;
Сериен. println ( файл. размер ( ) ) ;
}
файл = корен. openNextFile ( ) ;
}
}
невалиден настройвам ( ) {
Сериен. започвам ( 115200 ) ;
ако ( ! SD. започвам ( ) ) {
Сериен. println ( „Неуспешно монтиране на карта“ ) ;
връщане ;
}
listDir ( SD , '/' , 0 ) ;
}
невалиден цикъл ( ) {
}
В резултат можете да видите два различни файла. Единият е текстов файл, а другият е директория, която създадохме вътре в предишния код.
6.3. Премахване на директории
Сега ще премахнем създадените преди това директории и текстови файлове. За това ще използваме removeDir функция, ще се опита да премахне директория, посочена от пътя. При успех се отпечатва Директорията е премахната ; в противен случай се отпечатва rmdir се провали .
#include 'FS.h'#включете 'SD.h'
#включете 'SPI.h'
невалиден removeDir ( fs :: FS и fs , конст въглен * път ) {
Сериен. printf ( „Премахване на директория: %s \н ' , път ) ;
ако ( fs. е rm ( път ) ) {
Сериен. println ( „Dir премахнат“ ) ;
} друго {
Сериен. println ( 'rmdir се провали' ) ;
}
}
невалиден настройвам ( ) {
Сериен. започвам ( 115200 ) ;
ако ( ! SD. започвам ( ) ) {
Сериен. println ( „Неуспешно монтиране на карта“ ) ;
връщане ;
}
}
невалиден цикъл ( ) {
}
6.4. Вземете тип MicroSD карта
MicroSD карта или С ecure д igital картата е проектирана първоначално от асоциацията за SD карти и е предназначена за използване в преносими устройства като смартфони и камери. SD картите съдържат основно четири типа семейства:
- SDSC (SD със стандартен капацитет): Тези карти предлагат скромен диапазон от капацитет за съхранение от 2 GB и използват файловите системи FAT-12 и FAT-16.
- SDHC (SD с голям капацитет): Тези карти варират от 2GB до 32GB и използват файловата система FAT-32.
- SDXC (SD с разширен капацитет): Тези карти използват файловата система exFAT и започват от 32GB до 2TB.
- SDIO: SDIO картите служат за двойна цел, като комбинират съхранението на данни с функциите INPUT/OUTPUT.
За да проверите типа на вашата карта, изпълнете кода по-долу:
#include 'FS.h'#включете 'SD.h'
#включете 'SPI.h'
невалиден настройвам ( ) {
Сериен. започвам ( 115200 ) ;
ако ( ! SD. започвам ( ) ) {
Сериен. println ( „Неуспешно монтиране на карта“ ) ;
връщане ;
}
uint8_t вид на карта = SD. вид на карта ( ) ;
ако ( вид на карта == CARD_NONE ) {
Сериен. println ( „Няма прикачена SD карта“ ) ;
връщане ;
}
Сериен. печат ( 'Тип SD карта: ' ) ;
ако ( вид на карта == CARD_MMC ) {
Сериен. println ( 'MMC' ) ;
} друго ако ( вид на карта == CARD_SD ) {
Сериен. println ( 'SDSC' ) ;
} друго ако ( вид на карта == CARD_SDHC ) {
Сериен. println ( 'SDHC' ) ;
} друго {
Сериен. println ( 'НЕИЗВЕСТЕН' ) ;
}
uint64_t cardSize = SD. cardSize ( ) / ( 1024 * 1024 ) ;
Сериен. printf ( 'Размер на SD картата: %lluMB \н ' , cardSize ) ;
}
невалиден цикъл ( ) {
}
Тъй като имам 32GB карта, можете да видите, че тя е в обхвата на SDHC карти.
6.5. Вземете размер на MicroSD карта
Можете също така да получите размера на SD картата, като качите кода по-долу на вашата платка ESP32.
#include 'FS.h'#включете 'SD.h'
#включете 'SPI.h'
невалиден настройвам ( ) {
Сериен. започвам ( 115200 ) ;
ако ( ! SD. започвам ( ) ) {
Сериен. println ( „Неуспешно монтиране на карта“ ) ;
връщане ;
}
uint8_t вид на карта = SD. вид на карта ( ) ;
ако ( вид на карта == CARD_NONE ) {
Сериен. println ( „Няма прикачена SD карта“ ) ;
връщане ;
}
uint64_t cardSize = SD. cardSize ( ) / ( 1024 * 1024 ) ;
Сериен. printf ( 'Размер на SD картата: %lluMB \н ' , cardSize ) ;
// Други функции (listDir, createDir, removeDir и др.) могат да бъдат извикани тук
}
невалиден цикъл ( ) {
}
От изхода можете да видите, че имам SD карта от приблизително 30 GB.
Заключение
Модул за MicroSD карта се използва за четене и запис на данните от SD картата с помощта на платката ESP32. Модулът на картата MicroSD комуникира с микроконтролера чрез SPI интерфейс. Така че можете или да използвате SPI библиотеката, или да дефинирате свои собствени SPI пинове вътре в кода. След като се свържете, можете да четете, да пишете текстов файл или да създавате нови директории във вашата SD карта.