Bu makale, Arduino IDE'yi kullanarak bir MicroSD kartı bir ESP32 kartıyla arayüzleme adımlarını açıklayacaktır.
İçindekiler:
2. ESP32'yi MicroSD Kart Modülüyle Arayüzleme
6. ESP32 Kullanarak MicroSD Kartta Farklı İşlevlerin Gerçekleştirilmesi
- 6.1. MicroSD Kartta Dizin Oluşturma
- 6.2. MicroSD Karttaki Dizinleri Listeleme
- 6.3. Dizinleri Kaldırma
- 6.4. MicroSD Kart Türünü Alın
- 6.5. SD Kart Boyutunu Alın
1. MicroSD Kart Modülü
MicroSD kart modülü, SD kartı mikrodenetleyici kartınıza bağlayabilen bir ESP32 sensörüdür. SPI iletişim protokolü üzerinden çalışır. ESP32'nin veya Arduino gibi herhangi bir mikrodenetleyici kartının SPI protokolü üzerinden SD kartta depolanan verilere erişmesine olanak tanır.
SD kart modülünün çalışma voltajı 3,3V olduğundan onu doğrudan ESP32'ye veya başka bir mikro denetleyici kartına bağlamak mümkün değildir. Bunun için 5V üzerinde çalışan SD kart modülünü veya sensörünü kullanmamız gerekiyor.
1.1. Pin yapısı
MicroSD kartta toplam altı pin bulunur. Bunlardan ikisi güç pinleridir: VCC ve GND. Okuma sırasında SPI iletişim protokolü için dört pin kullanılır. Bu altı pinin tümüne ilişkin ayrıntılar aşağıdadır:
Güç Pimleri:
- VCC: ESP32 5V pinine bağlanır.
- TOPRAK: ESP32 toprak (GND) pinine bağlanır.
SPI Pinleri:
- MİSO: (Master In Slave Out) ESP32 MOSI (Master Out Slave In) pinine bağlanır.
- SİGARA İÇMEK: ESP32 MISO (Master In Slave Out) pinine bağlanır.
- - SCK: ESP32 SCK (Seri Saat) pinine bağlanır.
- SS: (Slave Select) Arduino kodunda belirtilen pin'e SS (Slave Select) pini olarak bağlanır.
2. ESP32'yi MicroSD Kart Modülüyle Arayüzleme
ESP32'yi MicroSD kart modülüyle arayüzlemek için SD kart sensörünüzün güç pinlerini ayarlamanız gerekecektir. Daha sonra SPI pinlerini ayarlayın. Burada iki seçeneğiniz var; varsayılan SPI pinlerini ayarlayabilir veya kendi özel SPI pinlerinizi tanımlayabilirsiniz.
Varsayılan SPI pinlerini kullanırken şunları ekleyeceğiz: SD.h Ve SD_MMC.h kütüphaneler. Varsayılan olarak bu kütüphaneler, SPI iletişimi için VSPI SPI pinlerini (23, 19, 18, 5) alır. Ancak SPI iletişimi için başka pinler de ayarlayabilirsiniz.
ESP32, pin ayrıntıları aşağıdaki gibi olan iki SPI arayüzü HSPI ve VSPI içerir:
SPI | SİGARA İÇMEK | MİSO | CLK | CS |
VSPI | D23 | D19 | D18 | D5 |
HSPI | D13 | D12 | D14 | D15 |
İlgili: ESP32 Pin Çıkışı Referansı – Tam Bir Kılavuz
2.2. SD Kartı Hazırlayın
Daha sonra, bir MicroSD karta veri okuma ve yazma işlemine devam etmeden önce, ilk olarak, içindeki önceki verileri biçimlendirerek kartı ayarlamanız gerekir.
Herhangi bir kart okuyucuyu kullanarak SD kartınızı açın ve biçim BT.
Kart dosya sisteminiz için FAT32'yi seçin ve tıklayın. Başlangıç .
Kartı biçimlendirdikten sonra TAMAM .
Artık SD kartınız, SD kart modülünü kullanarak ESP32 ile arayüz oluşturmaya hazırdır.
2.3. Şematik diyagram
MicroSD kart sensörünü ESP32'ye bağlamak için aşağıdaki yapılandırmayı izleyin:
Bağlantı kablosunun pin konfigürasyonu tablosu aşağıdadır:
Mikro SD kart | ESP32 |
GND | GND |
VCC | GELMEK |
CS | D5 |
SİGARA İÇMEK | D23 |
SCK | D18 |
MİSO | D19 |
3. Donanım
Donanım için, ESP32 ve SD kart modülü ile birlikte bazı atlama tellerine, bir devre tahtasına ihtiyacınız var.
4. Kod
Şimdi MicroSD kartın içinde bir metin dosyası oluşturacak bir kod yazacağız ve bundan sonra ona bir miktar metin dizesi yazıyor. Bittiğinde, metin dosyasının içeriğini Arduino IDE seri monitöründe okuyacağız.
Arduino IDE'yi başlatın ve verilen kodu derleyin. Bundan sonra bunu ESP32 kartınıza yazın:
#include#include
DosyamDosyam ;
yapı int CS = 5 ;
// Verilen mesajı belirtilen yoldaki bir dosyaya yaz
geçersiz Dosya Yaz ( yapı karakter * yol , yapı karakter * İleti ) {
// Dosyayı aç. Bir seferde bir dosyanın açılmasını destekler
// yeni bir dosya açmadan önce diğer dosyayı kapatın
dosyam = SD. açık ( yol , FILE_WRITE ) ;
eğer ( dosyam ) {
Seri. baskı ( '%s'e yazılıyor' , yol ) ;
myFile. baskı ( İleti ) ;
myFile. kapalı ( ) ; // Dosyayı kapat
Seri. baskı ( 'tamamlanmış.' ) ;
} başka {
Seri. baskı ( 'dosya açılırken hata oluştu' ) ;
Seri. baskı ( yol ) ;
}
}
// Belirtilen yoldaki dosya içeriğini yazdır
geçersiz Dosyayı Oku ( yapı karakter * yol ) {
// Açık dosya
dosyam = SD. açık ( yol ) ;
eğer ( dosyam ) {
Seri. baskı ( '%s kaynağından dosya okunuyor \N ' , yol ) ;
// Son dosyaya ulaşana kadar tüm dosyayı oku
sırasında ( myFile. mevcut ( ) ) {
Seri. yazmak ( myFile. Okumak ( ) ) ;
}
myFile. kapalı ( ) ; // Dosyayı kapat
} başka {
// Dosya açılamadığında bir hata yazdır:
Seri. baskı ( 'test.txt açılırken hata oluştu' ) ;
}
}
geçersiz kurmak ( ) {
Seri. başlamak ( 9600 ) ;
gecikme ( 500 ) ;
sırasında ( ! Seri ) { ; }
Seri. baskı ( 'SD kart başlatılıyor...' ) ;
eğer ( ! SD. başlamak ( CS ) ) {
Seri. baskı ( 'Başlatma başarısız oldu!' ) ;
geri dönmek ;
}
Seri. baskı ( 'Başlatma tamamlandı.' ) ;
Dosya Yaz ( '/test.txt' , 'Linuxhint.com' ) ;
Dosyayı Oku ( '/test.txt' ) ;
}
geçersiz döngü ( ) {
}
4.1. Kod Açıklaması
Daha iyi anlaşılması için bu kodu alt bölümlere ayıracağız.
Başlatma ve Kurulum: Kod ilk olarak SD kart modülü ile ilgili bazı önemli kütüphaneleri dahil ederek başladı. SD kartla iletişim için SPI.h kütüphanesi ve SD kart işlemlerini gerçekleştirmek için SD.h kütüphanesi eklenir. Daha sonra global bir değişken tanımlar dosyam Dosya işlemlerini yönetmek için dosya türü. CS sabiti, SD kart için Chip Select (CS) pini olarak kullanılacak olan pin 5'e ayarlanmıştır.
Kurulum() İşlevi: Kurulum fonksiyonu içerisinde seri iletişim başlatılır. Daha sonra SD.begin(CS) fonksiyonunu kullanarak SD kart modülünü başlattık. Ayrıca, bir metin dosyasına metin okumak ve yazmak için iki farklı fonksiyon da tanımladık.
SD Karta Yazma: WriteFile() işlevi, SD.open(path, FILE_WRITE) kullanarak yazmak için test.txt dosyasını açar. Bundan sonra, myFile.println(message) kullanarak Linuxhint.com dizesini dosyaya yazar.
SD Karttan Okuma: Dosya içeriğini okumak için ReadFile() fonksiyonunu kullandık. Başarıyla okunduğu takdirde veriler Arduino seri portuna gönderilecek ve Arduino IDE seri monitöründe görüntülenecektir.
5. Çıkış
Çıktıda Arduino IDE kodu içerisinde tanımladığımız stringin aynısının Arduino IDE seri monitörünüzde görüntülendiğini görebilirsiniz.
6. ESP32 Kullanarak MicroSD Kartta Farklı İşlevlerin Gerçekleştirilmesi
MicroSD kartlarda dizin oluşturma, kaldırma, ekleme gibi çeşitli işlemleri doğrudan Arduino IDE kodu üzerinden gerçekleştirebiliyoruz.
6.1. MicroSD Kartta Dizin Oluşturma
Aşağıdaki kod MicroSD kartın içinde yeni bir dizin oluşturacaktır. Adı verilen bir işlevi tanımlar yaratDir girdi olarak bir dosya sistemi nesnesini (fs::FS) ve bir yolu alır. Bu işlev, belirtilen yolla bir dizin oluşturmaya çalışır ve başarıyı veya başarısızlığı belirten mesajları yazdırır.
#include 'FS.h'#include 'SD.h'
#include 'SPI.h'
geçersiz yaratDir ( fs :: FS & fs , yapı karakter * yol ) {
Seri. baskı ( 'Dizin Oluşturuluyor: %s \N ' , yol ) ;
eğer ( fs. mkdir ( yol ) ) {
Seri. baskı ( 'Dizin oluşturuldu' ) ;
} başka {
Seri. baskı ( 'mkdir başarısız oldu' ) ;
}
}
geçersiz kurmak ( ) {
Seri. başlamak ( 115200 ) ;
// SD kartı başlat
eğer ( ! SD. başlamak ( ) ) {
Seri. baskı ( 'Kart Takma Başarısız Oldu' ) ;
geri dönmek ;
}
// 'mydir' adında bir dizin oluşturuyoruz
yaratDir ( SD , '/midir' ) ;
}
geçersiz döngü ( ) {
}
Çıktıda yeni bir dizinin oluşturulduğunu görebilirsiniz. /mydir isim.
6.2. MicroSD Karttaki Dizinleri Listeleme
Aşağıdaki kodda MicroSD kartın içinde bulunan tüm dizinleri listeleyeceğiz. listeDir işlevi, bir SD karttaki bir dizinin içeriğini yinelemeli olarak listeler. Hem dizinler ('DIR' ön ekiyle) hem de dosyalar ('FILE' ön ekiyle) hakkındaki bilgileri, adları ve boyutları da dahil olmak üzere yazdırır.
#include 'FS.h'#include 'SD.h'
#include 'SPI.h'
geçersiz listeDir ( fs :: FS & fs , yapı karakter * dizin adı , uint8_t seviyeler ) {
Seri. baskı ( 'Liste dizini: %s \N ' , dizin adı ) ;
Dosya kökü = fs. açık ( dizin adı ) ;
eğer ( ! kök ) {
Seri. baskı ( 'Dizin açılamadı' ) ;
geri dönmek ;
}
eğer ( ! kök. isDizin ( ) ) {
Seri. baskı ( 'Bir dizin değil' ) ;
geri dönmek ;
}
Dosya dosyası = kök. SonrakiDosyayı aç ( ) ;
sırasında ( dosya ) {
eğer ( dosya. isDizin ( ) ) {
Seri. Yazdır ( ' SEN : ' ) ;
Seri. baskı ( dosya. isim ( ) ) ;
eğer ( seviyeler ) {
listeDir ( fs , dosya. isim ( ) , seviyeler - 1 ) ;
}
} başka {
Seri. Yazdır ( ' DOSYA: ' ) ;
Seri. Yazdır ( dosya. isim ( ) ) ;
Seri. Yazdır ( ' BOYUT: ' ) ;
Seri. baskı ( dosya. boyut ( ) ) ;
}
dosya = kök. SonrakiDosyayı aç ( ) ;
}
}
geçersiz kurmak ( ) {
Seri. başlamak ( 115200 ) ;
eğer ( ! SD. başlamak ( ) ) {
Seri. baskı ( 'Kart Takma Başarısız Oldu' ) ;
geri dönmek ;
}
listeDir ( SD , '/' , 0 ) ;
}
geçersiz döngü ( ) {
}
Çıktıda iki farklı dosya görebilirsiniz. Biri bir metin dosyası, diğeri ise önceki kodda oluşturduğumuz bir dizindir.
6.3. Dizinleri Kaldırma
Şimdi önceden oluşturulmuş dizinleri ve metin dosyalarını kaldıracağız. Bunun için kullanacağız kaldırDir işlev, yol tarafından belirtilen bir dizini kaldırmaya çalışacaktır. Başarılı olursa yazdırılır Dizin kaldırıldı ; aksi takdirde yazdırılır rmdir başarısız oldu .
#include 'FS.h'#include 'SD.h'
#include 'SPI.h'
geçersiz kaldırDir ( fs :: FS & fs , yapı karakter * yol ) {
Seri. baskı ( 'Dizin Kaldırılıyor: %s \N ' , yol ) ;
eğer ( fs. rm ( yol ) ) {
Seri. baskı ( 'Dizin kaldırıldı' ) ;
} başka {
Seri. baskı ( 'rmdir başarısız oldu' ) ;
}
}
geçersiz kurmak ( ) {
Seri. başlamak ( 115200 ) ;
eğer ( ! SD. başlamak ( ) ) {
Seri. baskı ( 'Kart Takma Başarısız Oldu' ) ;
geri dönmek ;
}
}
geçersiz döngü ( ) {
}
6.4. MicroSD Kart Türünü Alın
MicroSD kart veya S iyi D igital kart, orijinal olarak SD kart derneği tarafından tasarlandı ve akıllı telefonlar ve kameralar gibi taşınabilir cihazlarda kullanılmak üzere tasarlandı. SD kartlar temel olarak dört tür aile içerir:
- SDSC (Standart Kapasiteli SD): Bu kartlar 2GB'lık mütevazı bir depolama kapasitesi aralığı sunar ve FAT-12 ve FAT-16 dosya sistemlerini kullanır.
- SDHC (Yüksek Kapasiteli SD): Bu kartlar 2GB ila 32GB arasında değişir ve FAT-32 dosya sistemini kullanır.
- SDXC (Genişletilmiş Kapasiteli SD): Bu kartlar exFAT dosya sistemini kullanır ve 32 GB'tan başlayıp 2 TB'a kadar çıkabilir.
- SDIO: SDIO kartları, veri depolamayı GİRİŞ/ÇIKIŞ işlevleriyle birleştirerek ikili bir amaca hizmet eder.
Kart türünüzü kontrol etmek için aşağıdaki kodu çalıştırın:
#include 'FS.h'#include 'SD.h'
#include 'SPI.h'
geçersiz kurmak ( ) {
Seri. başlamak ( 115200 ) ;
eğer ( ! SD. başlamak ( ) ) {
Seri. baskı ( 'Kart Takma Başarısız Oldu' ) ;
geri dönmek ;
}
uint8_t kart tipi = SD. kart tipi ( ) ;
eğer ( kart tipi == CARD_NONE ) {
Seri. baskı ( 'SD kart takılı değil' ) ;
geri dönmek ;
}
Seri. Yazdır ( 'SD Kart Türü:' ) ;
eğer ( kart tipi == CARD_MMC ) {
Seri. baskı ( 'MMC' ) ;
} başka eğer ( kart tipi == CARD_SD ) {
Seri. baskı ( 'SDSC' ) ;
} başka eğer ( kart tipi == CARD_SDHC ) {
Seri. baskı ( 'SDHC' ) ;
} başka {
Seri. baskı ( 'BİLİNMEYEN' ) ;
}
uint64_t kart Boyutu = SD. kart Boyutu ( ) / ( 1024 * 1024 ) ;
Seri. baskı ( 'SD Kart Boyutu: %lluMB \N ' , kart Boyutu ) ;
}
geçersiz döngü ( ) {
}
32GB'lık bir kartım olduğundan, bunun aralıkta olduğunu görebilirsiniz. SDHC kartlar.
6.5. MicroSD Kart Boyutunu Alın
Ayrıca aşağıdaki kodu ESP32 kartınıza yükleyerek SD kartın boyutunu da alabilirsiniz.
#include 'FS.h'#include 'SD.h'
#include 'SPI.h'
geçersiz kurmak ( ) {
Seri. başlamak ( 115200 ) ;
eğer ( ! SD. başlamak ( ) ) {
Seri. baskı ( 'Kart Takma Başarısız Oldu' ) ;
geri dönmek ;
}
uint8_t kart tipi = SD. kart tipi ( ) ;
eğer ( kart tipi == CARD_NONE ) {
Seri. baskı ( 'SD kart takılı değil' ) ;
geri dönmek ;
}
uint64_t kart Boyutu = SD. kart Boyutu ( ) / ( 1024 * 1024 ) ;
Seri. baskı ( 'SD Kart Boyutu: %lluMB \N ' , kart Boyutu ) ;
// Diğer işlevler (listDir, createDir, RemoveDir, vb.) burada çağrılabilir
}
geçersiz döngü ( ) {
}
Çıktıdan yaklaşık 30GB'lık bir SD kartım olduğunu görebilirsiniz.
Çözüm
ESP32 kartını kullanarak SD karttan veri okumak ve yazmak için bir MicroSD kart modülü kullanılır. MicroSD kart modülü mikrodenetleyici ile SPI arayüzünü kullanarak iletişim kurar. Yani ister SPI kütüphanesini kullanabilir, isterseniz de kod içerisinde kendi SPI pinlerinizi tanımlayabilirsiniz. Bağlandıktan sonra, bir metin dosyasını okuyabilir, yazabilir veya SD kartınızda yeni dizinler oluşturabilirsiniz.