Ez a cikk elmagyarázza a MicroSD-kártya és az ESP32 kártya Arduino IDE használatával történő összekapcsolásának lépéseit.
Tartalomjegyzék:
2. Az ESP32 csatlakoztatása a MicroSD kártyamodulhoz
6. Különböző funkciók végrehajtása a MicroSD kártyán az ESP32 használatával
- 6.1. Könyvtárak létrehozása MicroSD kártyán
- 6.2. Könyvtárak listázása a MicroSD kártyán
- 6.3. Könyvtárak eltávolítása
- 6.4. Szerezze be a MicroSD kártya típusát
- 6.5. Szerezze be az SD-kártya méretét
1. MicroSD kártya modul
A MicroSD kártya modul egy ESP32 érzékelő, amely csatlakoztathatja az SD kártyát a mikrokontroller kártyájához. SPI kommunikációs protokollon keresztül működik. Lehetővé teszi, hogy az ESP32 vagy bármely más mikrovezérlő kártya, például az Arduino hozzáférjen az SD-kártyán tárolt adatokhoz az SPI protokollon keresztül.
Az SD kártya modul üzemi feszültsége 3,3 V, így nem lehet közvetlenül csatlakoztatni az ESP32-höz vagy bármely más mikrovezérlő kártyához. Ehhez az SD kártya modult vagy érzékelőt kell használnunk, amely 5 V felett működik.
1.1. Kitűz
A MicroSD kártya összesen hat érintkezőt tartalmaz. Közülük kettő tápcsatlakozó: VCC és GND. Míg az olvasás négy érintkezőt használnak az SPI kommunikációs protokollhoz. Az alábbiakban mind a hat tűre vonatkozó részletek találhatók:
Tápcsapok:
- VCC: Csatlakoztatható az ESP32 5V-os érintkezőhöz.
- GND: Az ESP32 földelő (GND) érintkezőhöz csatlakozik.
SPI pinek:
- MISO: (Master In Slave Out) Az ESP32 MOSI (Master Out Slave In) érintkezőhöz csatlakozik.
- FÜST: Az ESP32 MISO (Master In Slave Out) érintkezőhöz csatlakozik.
- SCK: Az ESP32 SCK (Serial Clock) érintkezőhöz csatlakozik.
- SS: (Slave Select) Az Arduino kódban SS (Slave Select) érintkezőként megadott érintkezőhöz csatlakozik.
2. Az ESP32 csatlakoztatása a MicroSD kártyamodulhoz
Az ESP32 és a MicroSD kártyamodul összekapcsolásához be kell állítania az SD-kártya érzékelőjének tápcsatlakozóit. Ezután állítsa be az SPI érintkezőket. Itt két lehetőség közül választhat: beállíthatja az alapértelmezett SPI-tűket, vagy meghatározhatja saját egyéni SPI-csapjait.
Az alapértelmezett SPI tűk használatakor hozzáadjuk a SD h és SD_MMC.h könyvtárak. Alapértelmezés szerint ezek a könyvtárak a VSPI SPI érintkezőit (23, 19, 18, 5) veszik az SPI kommunikációhoz. Az SPI-kommunikációhoz azonban más érintkezőket is beállíthat.
Az ESP32 két SPI-interfészt tartalmaz, HSPI-t és VSPI-t, a tűk részleteivel az alábbiak szerint:
SPI | FÜST | MISO | CLK | CS |
VSPI | D23 | D19 | D18 | D5 |
HSPI | D13 | D12 | D14 | D15 |
Összefüggő: ESP32 Pinout Reference – A teljes útmutató
2.2. Készítse elő az SD-kártyát
Ezután, mielőtt folytathatná az adatok olvasását és írását a MicroSD-kártyára, először be kell állítania a kártyát az összes korábbi adat formázásával.
Nyissa ki az SD-kártyát bármelyik kártyaolvasóval és formátum azt.
Válassza ki a FAT32-t a kártya fájlrendszeréhez, és kattintson a gombra Rajt .
A kártya formázása után válassza a lehetőséget rendben .
Az SD-kártya most készen áll az ESP32-vel való interfészre az SD-kártyamodul segítségével.
2.3. Sematikus ábrája
A MicroSD kártya érzékelőjének ESP32-vel való csatlakoztatásához kövesse az alábbi konfigurációt:
Az alábbi táblázat a csatlakozó vezeték tűs konfigurációját mutatja:
MicroSD kártya | ESP32 |
GND | GND |
VCC | JÖN |
CS | D5 |
FÜST | D23 |
SCK | D18 |
MISO | D19 |
3. Hardver
Hardverhez csak néhány áthidaló vezetékre van szüksége egy kenyérsütő táblára, valamint az ESP32-re és az SD-kártya modulra.
4. Kód
Most írunk egy kódot, amely egy szöveges fájlt hoz létre a MicroSD kártyán belül, és ezt követően ír egy szöveges karakterláncot. Ha kész, elolvassuk a szöveges fájl tartalmát az Arduino IDE soros monitoron.
Indítsa el az Arduino IDE-t, és fordítsa le a megadott kódot. Ezután írja be az ESP32 kártyára:
#include#include
Fájl a myFile ;
const int CS = 5 ;
// Írja a megadott üzenetet egy fájlba a megadott elérési úton
üres WriteFile ( const char * pálya , const char * üzenet ) {
// Nyissa meg a fájlt. Egyszerre egy fájl megnyitását támogatja
// új fájl megnyitása előtt zárja be a másik fájlt
myFile = SD. nyisd ki ( pálya , FILE_WRITE ) ;
ha ( myFile ) {
Sorozatszám. printf ( 'Írás ide: %s' , pálya ) ;
myFile. println ( üzenet ) ;
myFile. Bezárás ( ) ; // Zárja be a fájlt
Sorozatszám. println ( „befejezve”. ) ;
} más {
Sorozatszám. println ( 'hiba a fájl megnyitásakor' ) ;
Sorozatszám. println ( pálya ) ;
}
}
// Fájltartalom nyomtatása a megadott elérési úton
üres Fájl olvasása ( const char * pálya ) {
// Fájl megnyitása
myFile = SD. nyisd ki ( pálya ) ;
ha ( myFile ) {
Sorozatszám. printf ( 'Fájl olvasása innen: %s \n ' , pálya ) ;
// Olvassa el a teljes fájlt az utolsóig
míg ( myFile. elérhető ( ) ) {
Sorozatszám. ír ( myFile. olvas ( ) ) ;
}
myFile. Bezárás ( ) ; // Zárja be a fájlt
} más {
// Ha nem sikerült megnyitni a fájlt, nyomtasson ki egy hibát:
Sorozatszám. println ( 'hiba a teszt.txt megnyitásakor' ) ;
}
}
üres beállít ( ) {
Sorozatszám. kezdődik ( 9600 ) ;
késleltetés ( 500 ) ;
míg ( ! Sorozatszám ) { ; }
Sorozatszám. println ( 'SD-kártya inicializálása...' ) ;
ha ( ! SD. kezdődik ( CS ) ) {
Sorozatszám. println ( 'Az inicializálás nem sikerült!' ) ;
Visszatérés ;
}
Sorozatszám. println ( 'Inicializálás megtörtént.' ) ;
WriteFile ( '/teszt.txt' , 'Linuxhint.com' ) ;
Fájl olvasása ( '/teszt.txt' ) ;
}
üres hurok ( ) {
}
4.1. Kód magyarázata
A jobb megértés érdekében ezt a kódot alrészekre bontjuk.
Inicializálás és beállítás: Először is, a kód azzal kezdődött, hogy tartalmazott néhány fontos könyvtárat az SD-kártya modullal kapcsolatban. Az SPI.h könyvtár hozzáadódik az SD-kártyával való kommunikációhoz, az SD.h pedig az SD-kártya műveleteinek kezeléséhez. Ezután egy globális változót határoz meg myFile típusú fájl a fájlműveletek kezelésére. A CS-állandó az 5-ös lábra van állítva, amely az SD-kártya Chip Select (CS) érintkezőjeként lesz használva.
Setup() függvény: A setup funkción belül elindul a soros kommunikáció. Ezt követően az SD.begin(CS) funkció segítségével inicializáltuk az SD kártya modult. Ezenkívül két különböző funkciót is meghatároztunk a szöveg szövegfájlba történő olvasásához és írásához.
Írás az SD kártyára: A WriteFile() függvény megnyitja a test.txt fájlt az SD.open(path, FILE_WRITE) használatával történő íráshoz. Ezt követően a Linuxhint.com karakterláncot a myFile.println(message) segítségével írja a fájlba.
Olvasás az SD kártyáról: A fájl tartalmának olvasásához a ReadFile() függvényt használtuk. Sikeres olvasás esetén az adatok az Arduino soros portjára kerülnek, és megjelennek az Arduino IDE soros monitoron.
5. Kimenet
A kimenetben ugyanaz a karakterlánc látható, amelyet az Arduino IDE kódban definiáltunk, amely megjelenik az Arduino IDE soros monitorán.
6. Különböző funkciók végrehajtása a MicroSD kártyán az ESP32 használatával
Különféle műveleteket hajthatunk végre, például könyvtárakat hozhatunk létre, eltávolíthatunk vagy hozzáadhatunk a MicroSD-kártyákhoz közvetlenül az Arduino IDE kódon keresztül.
6.1. Könyvtárak létrehozása MicroSD kártyán
Az alábbi kód egy új könyvtárat hoz létre a MicroSD kártyán belül. nevű függvényt határoz meg CreateDir amely egy fájlrendszer objektumot (fs::FS) és egy elérési utat vesz be bemenetként. Ez a funkció megpróbál létrehozni egy könyvtárat a megadott elérési úttal, és üzeneteket nyomtat, amelyek jelzik a sikert vagy a sikertelenséget.
#include 'FS.h'#include 'SD.h'
#include 'SPI.h'
üres CreateDir ( fs :: FS & fs , const char * pálya ) {
Sorozatszám. printf ( 'Létrehozása: %s \n ' , pálya ) ;
ha ( fs. mkdir ( pálya ) ) {
Sorozatszám. println ( 'A rendező létrehozta' ) ;
} más {
Sorozatszám. println ( 'mkdir nem sikerült' ) ;
}
}
üres beállít ( ) {
Sorozatszám. kezdődik ( 115200 ) ;
// SD-kártya inicializálása
ha ( ! SD. kezdődik ( ) ) {
Sorozatszám. println ( 'A kártya rögzítése nem sikerült' ) ;
Visszatérés ;
}
// Hozzon létre egy 'mydir' nevű könyvtárat
CreateDir ( SD , '/mydir' ) ;
}
üres hurok ( ) {
}
A kimenetben láthatja, hogy egy új könyvtár jön létre /mydir név.
6.2. Könyvtárak listázása a MicroSD kártyán
Az alábbi kódban felsoroljuk a MicroSD-kártyán belül található összes könyvtárat. A listDir A funkció rekurzív módon listázza az SD-kártyán lévő könyvtár tartalmát. Információkat nyomtat mind a könyvtárakról (előtag „DIR”), mind a fájlokról (előtag „FILE”), beleértve a nevüket és méretüket.
#include 'FS.h'#include 'SD.h'
#include 'SPI.h'
üres listDir ( fs :: FS & fs , const char * dirname , uint8_t szinteket ) {
Sorozatszám. printf ( 'Lista könyvtár: %s \n ' , dirname ) ;
Fájlgyökér = fs. nyisd ki ( dirname ) ;
ha ( ! gyökér ) {
Sorozatszám. println ( 'Nem sikerült megnyitni a könyvtárat' ) ;
Visszatérés ;
}
ha ( ! gyökér. isDirectory ( ) ) {
Sorozatszám. println ( 'Nem könyvtár' ) ;
Visszatérés ;
}
Fájl fájl = gyökér. openNextFile ( ) ;
míg ( fájlt ) {
ha ( fájlt. isDirectory ( ) ) {
Sorozatszám. nyomtatás ( ' TE : ' ) ;
Sorozatszám. println ( fájlt. név ( ) ) ;
ha ( szinteket ) {
listDir ( fs , fájlt. név ( ) , szinteket - 1 ) ;
}
} más {
Sorozatszám. nyomtatás ( ' FÁJL: ' ) ;
Sorozatszám. nyomtatás ( fájlt. név ( ) ) ;
Sorozatszám. nyomtatás ( 'MÉRET:' ) ;
Sorozatszám. println ( fájlt. méret ( ) ) ;
}
fájlt = gyökér. openNextFile ( ) ;
}
}
üres beállít ( ) {
Sorozatszám. kezdődik ( 115200 ) ;
ha ( ! SD. kezdődik ( ) ) {
Sorozatszám. println ( 'A kártya rögzítése nem sikerült' ) ;
Visszatérés ;
}
listDir ( SD , '/' , 0 ) ;
}
üres hurok ( ) {
}
A kimenetben két különböző fájlt láthat. Az egyik egy szöveges fájl, a másik pedig egy könyvtár, amelyet az előző kódban hoztunk létre.
6.3. Könyvtárak eltávolítása
Most eltávolítjuk a korábban létrehozott könyvtárakat és szöveges fájlokat. Ehhez fogjuk használni a RemoveDir függvény, Megkísérli eltávolítani az elérési út által megadott könyvtárat. Ha sikerült, kinyomtatja Dir eltávolítva ; egyébként kinyomtatja rmdir nem sikerült .
#include 'FS.h'#include 'SD.h'
#include 'SPI.h'
üres RemoveDir ( fs :: FS & fs , const char * pálya ) {
Sorozatszám. printf ( 'Dir. eltávolítása: %s \n ' , pálya ) ;
ha ( fs. az rm ( pálya ) ) {
Sorozatszám. println ( 'Dir eltávolítva' ) ;
} más {
Sorozatszám. println ( 'rmdir nem sikerült' ) ;
}
}
üres beállít ( ) {
Sorozatszám. kezdődik ( 115200 ) ;
ha ( ! SD. kezdődik ( ) ) {
Sorozatszám. println ( 'A kártya rögzítése nem sikerült' ) ;
Visszatérés ;
}
}
üres hurok ( ) {
}
6.4. Szerezze be a MicroSD kártya típusát
MicroSD kártya ill S ecure D Az igital kártyát eredetileg az SD-kártya-szövetség tervezte, és hordozható eszközökhöz, például okostelefonokhoz és kamerákhoz tervezték. Az SD-kártyák főként négyféle családot tartalmaznak:
- SDSC (standard kapacitású SD): Ezek a kártyák szerény, 2 GB-os tárkapacitást kínálnak, és FAT-12 és FAT-16 fájlrendszert használnak.
- SDHC (nagy kapacitású SD): Ezek a kártyák 2 GB-tól 32 GB-ig terjednek, és FAT-32 fájlrendszert használnak.
- SDXC (kibővített kapacitású SD): Ezek a kártyák az exFAT fájlrendszert használják, és 32 GB-tól egészen 2 TB-ig terjednek.
- SDIO: Az SDIO kártyák kettős célt szolgálnak az adattárolás és az INPUT/OUTPUT funkciók kombinálásával.
A kártyatípus ellenőrzéséhez futtassa az alábbi kódot:
#include 'FS.h'#include 'SD.h'
#include 'SPI.h'
üres beállít ( ) {
Sorozatszám. kezdődik ( 115200 ) ;
ha ( ! SD. kezdődik ( ) ) {
Sorozatszám. println ( 'A kártya rögzítése nem sikerült' ) ;
Visszatérés ;
}
uint8_t kártyatípus = SD. kártyatípus ( ) ;
ha ( kártyatípus == CARD_NONE ) {
Sorozatszám. println ( 'Nincs csatlakoztatva SD-kártya' ) ;
Visszatérés ;
}
Sorozatszám. nyomtatás ( 'SD-kártya típusa:' ) ;
ha ( kártyatípus == CARD_MMC ) {
Sorozatszám. println ( 'MMC' ) ;
} más ha ( kártyatípus == CARD_SD ) {
Sorozatszám. println ( 'SDSC' ) ;
} más ha ( kártyatípus == CARD_SDHC ) {
Sorozatszám. println ( 'SDHC' ) ;
} más {
Sorozatszám. println ( 'ISMERETLEN' ) ;
}
uint64_t kártyaméret = SD. kártyaméret ( ) / ( 1024 * 1024 ) ;
Sorozatszám. printf ( 'SD-kártya mérete: %lluMB \n ' , kártyaméret ) ;
}
üres hurok ( ) {
}
Mivel van egy 32 GB-os kártyám, láthatod, hogy a tartományba esik SDHC kártyákat.
6.5. Szerezze be a MicroSD kártya méretét
Az SD-kártya méretét úgy is megkaphatja, ha feltölti az alábbi kódot az ESP32-es kártyájára.
#include 'FS.h'#include 'SD.h'
#include 'SPI.h'
üres beállít ( ) {
Sorozatszám. kezdődik ( 115200 ) ;
ha ( ! SD. kezdődik ( ) ) {
Sorozatszám. println ( 'A kártya rögzítése nem sikerült' ) ;
Visszatérés ;
}
uint8_t kártyatípus = SD. kártyatípus ( ) ;
ha ( kártyatípus == CARD_NONE ) {
Sorozatszám. println ( 'Nincs csatlakoztatva SD-kártya' ) ;
Visszatérés ;
}
uint64_t kártyaméret = SD. kártyaméret ( ) / ( 1024 * 1024 ) ;
Sorozatszám. printf ( 'SD-kártya mérete: %lluMB \n ' , kártyaméret ) ;
// Más függvények (listDir, createDir, removeDir stb.) hívhatók meg itt
}
üres hurok ( ) {
}
A kimenetről láthatod, hogy van egy körülbelül 30 GB-os SD-kártyám.
Következtetés
A MicroSD kártyamodul az SD-kártya adatainak olvasására és írására szolgál az ESP32 kártya használatával. A MicroSD kártya modul SPI interfészen keresztül kommunikál a mikrokontrollerrel. Tehát használhatja az SPI-könyvtárat, vagy meghatározhatja saját SPI-tűit a kódon belül. Csatlakozás után olvashat szöveges fájlt, vagy új könyvtárakat hozhat létre az SD-kártyán.