Kako povezati modul kartice MicroSD z ESP32 z uporabo Arduino IDE

Kako Povezati Modul Kartice Microsd Z Esp32 Z Uporabo Arduino Ide



ESP32 je napredna mikrokrmilniška plošča, ki lahko z njo poveže različno število zunanjih naprav. Tako kot drugi senzorji lahko tudi modul kartice MicroSD povežete z ESP32. Senzor kartice MicroSD lahko uporabite za aplikacije za beleženje podatkov ali povečate kapaciteto pomnilnika za vašo mikrokontrolersko ploščo.

Ta članek pojasnjuje korake za povezovanje kartice MicroSD s ploščo ESP32 z uporabo Arduino IDE.

Kazalo:







1. Modul kartice MicroSD



2. Kako povezati ESP32 z modulom kartice MicroSD



3. Strojna oprema





4. Koda

5. Izhod



6. Izvajanje različnih funkcij na kartici MicroSD z uporabo ESP32

Zaključek

1. Modul kartice MicroSD

Modul kartice MicroSD je senzor ESP32, ki lahko poveže kartico SD z vašo mikrokontrolersko ploščo. Deluje preko komunikacijskega protokola SPI. Omogoča ESP32 ali kateri koli drugi mikrokrmilniški plošči, kot je Arduino, dostop do podatkov, shranjenih na kartici SD, prek protokola SPI.

Delovna napetost za modul kartice SD je 3,3 V, zato ga ni mogoče neposredno povezati z ESP32 ali katero koli drugo mikrokontrolersko ploščo. Za to moramo uporabiti modul kartice SD ali senzor, ki deluje preko 5V.

1.1. Pinout

Kartica MicroSD ima skupaj šest nožic. Dva izmed njih sta napajalna zatiča: VCC in GND. Med branjem se za komunikacijski protokol SPI uporabljajo štirje zatiči. Sledijo podrobnosti za vseh teh šest zatičev:

Zatiči za napajanje:

  • VCC: Priključi se na ESP32 5V pin.
  • GND: Povezuje se z zatičem ozemljitve ESP32 (GND).

Zatiči SPI:

  • MISO: (Master In Slave Out) Povezuje se s priključkom ESP32 MOSI (Master Out Slave In).
  • DIM: Povezuje se s priključkom ESP32 MISO (Master In Slave Out).
  • SCK: Povezuje se s priključkom ESP32 SCK (Serial Clock).
  • SS: (Slave Select) Povezuje se s pinom, določenim v kodi Arduino kot SS (Slave Select).

2. Kako povezati ESP32 z modulom kartice MicroSD

Za povezavo ESP32 z modulom kartice MicroSD boste morali nastaviti napajalne zatiče za senzor kartice SD. Nato nastavite zatiče SPI. Tu imate dve možnosti, lahko nastavite privzete zatiče SPI ali določite lastne zatiče SPI po meri.

Pri uporabi privzetih zatičev SPI bomo dodali SD h in SD_MMC.h knjižnice. Te knjižnice privzeto uporabljajo nožice VSPI SPI (23, 19, 18, 5) za komunikacijo SPI. Vendar pa lahko nastavite tudi druge zatiče za komunikacijo SPI.

ESP32 vsebuje dva vmesnika SPI HSPI in VSPI z naslednjimi podrobnostmi o zatičih:

SPI DAJITE MISO CLK CS
VSPI D23 D19 D18 D5
HSPI D13 D12 D14 D15

Sorodno: ESP32 Reference Pinout – Celoten vodnik

2.2. Pripravite kartico SD

Nato, preden lahko nadaljujete z branjem in pisanjem podatkov na kartico MicroSD, jo morate najprej nastaviti tako, da formatirate vse prejšnje podatke na njej.

Odprite kartico SD s katerim koli bralnikom kartic in format to.

Izberite FAT32 za datotečni sistem vaše kartice in kliknite Začetek .

Po formatiranju kartice izberite v redu .

Zdaj je vaša kartica SD pripravljena za povezavo z ESP32 z uporabo modula kartice SD.

2.3. Shematski diagram

Za povezavo senzorja kartice MicroSD z ESP32 sledite spodnji konfiguraciji:

Sledi tabela za konfiguracijo pinov za povezovalno žico:

Kartica MicroSD ESP32
GND GND
VCC PRIDITE
CS D5
DAJITE D23
SCK D18
MISO D19

3. Strojna oprema

Za strojno opremo potrebujete le nekaj premostitvenih žic za navigacijsko ploščo skupaj z ESP32 in modulom kartice SD.

4. Koda

Zdaj bomo napisali kodo, ki bo ustvarila besedilno datoteko znotraj kartice MicroSD in nato vanjo zapisal nekaj besedilnega niza. Ko končamo, bomo prebrali vsebino besedilne datoteke na serijskem monitorju Arduino IDE.

Zaženite Arduino IDE in prevedite dano kodo. Nato ga zapišite na svojo ploščo ESP32:

#include

#include

Datoteka myFile ;
konst int CS = 5 ;

// Zapišite dano sporočilo v datoteko na podani poti
praznina WriteFile ( konst char * pot , konst char * sporočilo ) {
// Odpri datoteko. Podpira odpiranje ene datoteke naenkrat
// zaprite drugo datoteko, preden odprete novo datoteko
mojaDatoteka = SD. odprto ( pot , FILE_WRITE ) ;

če ( mojaDatoteka ) {
Serijski. printf ( 'Pišem %s' , pot ) ;
mojaDatoteka. println ( sporočilo ) ;
mojaDatoteka. blizu ( ) ; // Zaprite datoteko
Serijski. println ( 'dokončano.' ) ;
} drugače {
Serijski. println ( 'napaka pri odpiranju datoteke' ) ;
Serijski. println ( pot ) ;
}
}

// Natisni vsebino datoteke na določeno pot
praznina ReadFile ( konst char * pot ) {
// Odpri datoteko
mojaDatoteka = SD. odprto ( pot ) ;
če ( mojaDatoteka ) {
Serijski. printf ( 'Branje datoteke iz %s \n ' , pot ) ;
// Preberi celotno datoteko do zadnje
medtem ( mojaDatoteka. na voljo ( ) ) {
Serijski. pisati ( mojaDatoteka. prebrati ( ) ) ;
}
mojaDatoteka. blizu ( ) ; // Zaprite datoteko
} drugače {
// Če se datoteka ne odpre, natisni napako:
Serijski. println ( 'napaka pri odpiranju test.txt' ) ;
}
}

praznina nastaviti ( ) {
Serijski. začeti ( 9600 ) ;
zamuda ( 500 ) ;
medtem ( ! Serijski ) { ; }

Serijski. println ( 'Inicializacija kartice SD ...' ) ;
če ( ! SD. začeti ( CS ) ) {
Serijski. println ( 'Inicializacija ni uspela!' ) ;
vrnitev ;
}
Serijski. println ( 'Inicializacija končana.' ) ;

WriteFile ( '/test.txt' , 'Linuxhint.com' ) ;
ReadFile ( '/test.txt' ) ;
}

praznina zanka ( ) {

}

4.1. Koda Razlaga

Za boljše razumevanje bomo to kodo razdelili na poddele.

Inicializacija in nastavitev: Prvič, koda se je začela z vključitvijo nekaterih pomembnih knjižnic, povezanih z modulom kartice SD. Dodana je knjižnica SPI.h za komunikacijo s kartico SD in SD.h za upravljanje operacij s kartico SD. Nato definira globalno spremenljivko mojaDatoteka datoteke tipa za upravljanje operacij z datotekami. Konstanta CS je nastavljena na pin 5, ki bo uporabljen kot pin za izbiro čipa (CS) za kartico SD.

Funkcija Setup(): Znotraj nastavitvene funkcije se zažene serijska komunikacija. Po tem smo inicializirali modul kartice SD s funkcijo SD.begin(CS). Poleg tega smo definirali dve različni funkciji za branje in pisanje besedila v besedilno datoteko.

Pisanje na kartico SD: Funkcija WriteFile() odpre datoteko test.txt za pisanje z uporabo SD.open(path, FILE_WRITE). Po tem zapiše niz Linuxhint.com v datoteko z uporabo myFile.println(message).

Branje s kartice SD: Za branje vsebine datoteke smo uporabili funkcijo ReadFile(). Če so uspešno prebrani, bodo podatki poslani v serijska vrata Arduino in prikazani na serijskem monitorju Arduino IDE.

5. Izhod

V izhodu lahko vidite, da je isti niz, ki smo ga definirali znotraj kode Arduino IDE, prikazan na vašem serijskem monitorju Arduino IDE.

6. Izvajanje različnih funkcij na kartici MicroSD z uporabo ESP32

Izvajamo lahko različne operacije, kot so ustvarjanje, odstranjevanje ali dodajanje imenikov na karticah MicroSD neposredno prek kode Arduino IDE.

6.1. Ustvarjanje imenikov na kartici MicroSD

Spodnja koda bo ustvarila nov imenik znotraj kartice MicroSD. Definira funkcijo, imenovano createDir ki sprejme objekt datotečnega sistema (fs::FS) in pot kot vhod. Ta funkcija poskuša ustvariti imenik z določeno potjo in natisne sporočila o uspehu ali neuspehu.

#include 'FS.h'

#vključi 'SD.h'

#include 'SPI.h'

praznina createDir ( fs :: FS & fs , konst char * pot ) {

Serijski. printf ( 'Ustvarjanje direktorija: %s \n ' , pot ) ;

če ( fs. mkdir ( pot ) ) {

Serijski. println ( 'Dir ustvarjen' ) ;

} drugače {

Serijski. println ( 'mkdir ni uspel' ) ;

}

}

praznina nastaviti ( ) {



Serijski. začeti ( 115200 ) ;

// Inicializacija kartice SD

če ( ! SD. začeti ( ) ) {

Serijski. println ( 'Vpenjanje kartice ni uspelo' ) ;

vrnitev ;

}

// Ustvarite imenik z imenom 'mydir'

createDir ( SD , '/mydir' ) ;

}

praznina zanka ( ) {



}

V izhodu lahko vidite, da je ustvarjen nov imenik z /mydir ime.

6.2. Seznam imenikov na kartici MicroSD

V spodnji kodi bomo našteli vse imenike na kartici MicroSD. The listDir funkcija rekurzivno prikaže vsebino imenika na kartici SD. Natisne informacije o imenikih (s predpono »DIR«) in datotekah (s predpono »FILE«), vključno z njihovimi imeni in velikostmi.

#include 'FS.h'
#vključi 'SD.h'
#include 'SPI.h'

praznina listDir ( fs :: FS & fs , konst char * dirname , uint8_t stopnje ) {
Serijski. printf ( 'Imenik seznama: %s \n ' , dirname ) ;
Koren datoteke = fs. odprto ( dirname ) ;
če ( ! korenina ) {
Serijski. println ( 'Imenika ni bilo mogoče odpreti' ) ;
vrnitev ;
}
če ( ! korenina. isDirectory ( ) ) {
Serijski. println ( 'Ni imenik' ) ;
vrnitev ;
}
Datoteka datoteke = korenina. openNextFile ( ) ;
medtem ( mapa ) {
če ( mapa. isDirectory ( ) ) {
Serijski. tiskanje ( 'TI:' ) ;
Serijski. println ( mapa. ime ( ) ) ;
če ( stopnje ) {
listDir ( fs , mapa. ime ( ) , stopnje - 1 ) ;
}
} drugače {
Serijski. tiskanje ( ' MAPA: ' ) ;
Serijski. tiskanje ( mapa. ime ( ) ) ;
Serijski. tiskanje ( ' VELIKOST: ' ) ;
Serijski. println ( mapa. velikost ( ) ) ;
}
mapa = korenina. openNextFile ( ) ;
}
}

praznina nastaviti ( ) {
Serijski. začeti ( 115200 ) ;
če ( ! SD. začeti ( ) ) {
Serijski. println ( 'Vpenjanje kartice ni uspelo' ) ;
vrnitev ;
}
listDir ( SD , '/' , 0 ) ;
}

praznina zanka ( ) {

}

V izhodu lahko vidite dve različni datoteki. Ena je besedilna datoteka, druga pa je imenik, ki smo ga ustvarili znotraj prejšnje kode.

6.3. Odstranjevanje imenikov

Zdaj bomo odstranili predhodno ustvarjene imenike in besedilne datoteke. Za to bomo uporabili odstraniDir bo poskušal odstraniti imenik, določen s potjo. Če uspe, se natisne Dir odstranjen ; sicer pa natisne rmdir ni uspel .

#include 'FS.h'
#vključi 'SD.h'
#include 'SPI.h'

praznina odstraniDir ( fs :: FS & fs , konst char * pot ) {
Serijski. printf ( 'Odstranjevanje Dir.: %s \n ' , pot ) ;
če ( fs. je rm ( pot ) ) {
Serijski. println ( 'Dir odstranjen' ) ;
} drugače {
Serijski. println ( 'rmdir ni uspel' ) ;
}
}

praznina nastaviti ( ) {
Serijski. začeti ( 115200 ) ;

če ( ! SD. začeti ( ) ) {
Serijski. println ( 'Vpenjanje kartice ni uspelo' ) ;
vrnitev ;
}


}

praznina zanka ( ) {

}

6.4. Pridobite vrsto kartice MicroSD

MicroSD kartica oz S ecure D Kartico igital je prvotno oblikovalo združenje kartic SD in je bila zasnovana za uporabo v prenosnih napravah, kot so pametni telefoni in fotoaparati. Kartice SD večinoma vsebujejo štiri vrste družin:

  • SDSC (standardna zmogljivost SD): Te kartice ponujajo skromen obseg pomnilniške zmogljivosti 2 GB in uporabljajo datotečna sistema FAT-12 in FAT-16.
  • SDHC (SD visoke zmogljivosti): Te kartice obsegajo od 2 GB do 32 GB in uporabljajo datotečni sistem FAT-32.
  • SDXC (SD s podaljšano zmogljivostjo): Te kartice uporabljajo datotečni sistem exFAT in imajo od 32 GB do 2 TB.
  • SDIO: Kartice SDIO služijo dvojnemu namenu, saj združujejo shranjevanje podatkov s funkcijami INPUT/OUTPUT.

Če želite preveriti vrsto kartice, zaženite spodnjo kodo:

#include 'FS.h'
#vključi 'SD.h'
#include 'SPI.h'

praznina nastaviti ( ) {
Serijski. začeti ( 115200 ) ;

če ( ! SD. začeti ( ) ) {
Serijski. println ( 'Vpenjanje kartice ni uspelo' ) ;
vrnitev ;
}

uint8_t cardType = SD. cardType ( ) ;
če ( cardType == CARD_NONE ) {
Serijski. println ( 'Ni priložene kartice SD' ) ;
vrnitev ;
}

Serijski. tiskanje ( 'Vrsta kartice SD: ' ) ;
če ( cardType == CARD_MMC ) {
Serijski. println ( 'MMC' ) ;
} drugače če ( cardType == CARD_SD ) {
Serijski. println ( 'SDSC' ) ;
} drugače če ( cardType == KARTICA_SDHC ) {
Serijski. println ( 'SDHC' ) ;
} drugače {
Serijski. println ( 'NEZNANO' ) ;
}

uint64_t cardSize = SD. cardSize ( ) / ( 1024 * 1024 ) ;
Serijski. printf ( 'Velikost kartice SD: %lluMB \n ' , cardSize ) ;
}

praznina zanka ( ) {
}

Ker imam kartico 32 GB, lahko vidite, da je v območju SDHC karte.

6.5. Pridobite velikost kartice MicroSD

Velikost kartice SD lahko dobite tudi tako, da na svojo ploščo ESP32 naložite spodnjo kodo.

#include 'FS.h'
#vključi 'SD.h'
#include 'SPI.h'

praznina nastaviti ( ) {
Serijski. začeti ( 115200 ) ;

če ( ! SD. začeti ( ) ) {
Serijski. println ( 'Vpenjanje kartice ni uspelo' ) ;
vrnitev ;
}

uint8_t cardType = SD. cardType ( ) ;
če ( cardType == CARD_NONE ) {
Serijski. println ( 'Ni priložene kartice SD' ) ;
vrnitev ;
}

uint64_t cardSize = SD. cardSize ( ) / ( 1024 * 1024 ) ;
Serijski. printf ( 'Velikost kartice SD: %lluMB \n ' , cardSize ) ;

// Tu lahko pokličete druge funkcije (listDir, createDir, removeDir itd.).
}

praznina zanka ( ) {

}

Iz izpisa lahko vidite, da imam kartico SD približno 30 GB.

Zaključek

Modul kartice MicroSD se uporablja za branje in zapisovanje podatkov s kartice SD z uporabo plošče ESP32. Modul kartice MicroSD komunicira z mikrokontrolerjem preko vmesnika SPI. Torej lahko uporabite knjižnico SPI ali pa znotraj kode določite lastne zatiče SPI. Ko ste povezani, lahko berete, pišete besedilno datoteko ali ustvarjate nove imenike na kartici SD.