Как да свържете модула на MicroSD карта с ESP32 с помощта на Arduino IDE

Kak Da Sv Rzete Modula Na Microsd Karta S Esp32 S Pomosta Na 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 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 карта.