Search Code

Návod na ESP32 40/55 - Čítanie a zápis na Micro SD kartu | SunFounder's ESP32 IoT Learning kit

Návod na ESP32 40/55 - Čítanie a zápis na Micro SD kartu | SunFounder's ESP32 IoT Learning kit

V tomto návode sa naučíme, ako čítať a zapisovať na mikro SD kartu pomocou ESP32 a rozširujúcej dosky SunFounder ESP32. To nám umožní ukladať dáta a neskôr ich získavať, čo je nevyhnutné pre mnohé IoT aplikácie. Na konci tohto návodu budete mať funkčné zapojenie, ktoré dokáže vytvárať, zapisovať a čítať súbory z mikro SD karty.

Na začiatok sa uistite, že je vaša mikro SD karta správne naformátovaná na FAT32, pretože to je požadovaný súborový systém pre interakciu ESP32 s kartou. Použijeme knižnicu SD_MMC, ktorá zjednodušuje proces prístupu k súborom na mikro SD karte. Je dôležité poznamenať, že maximálna kapacita mikro SD karty by nemala presiahnuť 32 GB.

Vysvetlenie hardvéru

Hlavné komponenty v tomto projekte zahŕňajú mikrokontrolér ESP32 a modul mikro SD karty. ESP32 je všestranný mikrokontrolér so vstavanými funkciami Wi-Fi a Bluetooth, čo ho robí ideálnym pre IoT aplikácie. Modul mikro SD karty umožňuje ESP32 čítať a zapisovať na kartu, čo umožňuje ukladanie dát pre rôzne aplikácie.

Mikro SD karta funguje pomocou súborového systému na ukladanie dát štruktúrovaným spôsobom. Komunikuje s ESP32 cez rozhranie SD_MMC, ktoré umožňuje efektívne čítanie a zápis súborov. Toto zapojenie možno použiť na zaznamenávanie dát, ukladanie obrázkov alebo akúkoľvek inú aplikáciu, kde je potrebná perzistencia dát.

Pokyny na zapojenie

ESP32-40-micro-sd-card-1

Na zapojenie mikro SD karty k ESP32 postupujte podľa týchto krokov:

Najprv pripojte napájacie a uzemňovacie piny. Pripojte pin VCC modulu mikro SD karty na pin 3.3V na ESP32 a pripojte pin GND na jeden z GND pinov na ESP32. Ďalej pripojte dátové piny: pripojte pin CS (Chip Select) modulu mikro SD karty na pin 5 na ESP32, pin MOSI (Master Out Slave In) na pin 23, pin MISO (Master In Slave Out) na pin 19 a pin SCK (Serial Clock) na pin 18. Uistite sa, že sú tieto spojenia pevné, aby ste predišli problémom s komunikáciou.

Ak používate inú rozširujúcu dosku, čísla pinov sa môžu líšiť, preto si pozrite dokumentáciu špecifickú pre vašu dosku. Zapojenie je kľúčové pre úspešné čítanie a zápis súborov na mikro SD kartu.

Príklady kódu a vysvetlenie

Teraz sa pozrime na hlavné časti kódu, ktoré pracujú s mikro SD kartou. Nastavenie začína inicializáciou sériovej komunikácie a kontrolou, či je mikro SD karta úspešne pripojená.

Serial.begin(115200); // Inicializácia sériovej komunikácie
if (!SD_MMC.begin()) { // Kontrola, či je SD karta úspešne pripojená
  Serial.println("Nepodarilo sa pripojiť SD kartu"); // Výpis chybovej správy, ak sa SD kartu nepodarilo pripojiť
  return;
}

V tomto úryvku kódu je sériová komunikácia nastavená na prenosovú rýchlosť 115200, čo je dôležité pre monitorovanie výstupu. Funkcia SD_MMC.begin() sa pokúsi pripojiť SD kartu; ak zlyhá, na sériový monitor sa vypíše chybová správa.

Ďalšia časť kódu vytvorí nový súbor na mikro SD karte a zapíše doň riadok textu.

File file = SD_MMC.open("/test.txt", FILE_WRITE); 
if (!file) {
  Serial.println("Nepodarilo sa otvoriť súbor na zápis"); // Výpis chybovej správy, ak sa súbor nepodarilo otvoriť
  return;
}
if (file.println("Test zápisu súboru")) { // Zápis riadku textu do súboru
  Serial.println("Zápis súboru úspešný"); // Výpis správy o úspechu, ak je operácia zápisu úspešná
} else {
  Serial.println("Zápis súboru zlyhal"); // Výpis chybovej správy, ak operácia zápisu zlyhala
}
file.close(); // Zatvorenie súboru

Tu sa súbor s názvom test.txt otvorí v režime zápisu. Ak sa súbor úspešne otvorí, zapíše riadok textu a vypíše správu o úspechu. Ak operácia zápisu zlyhá, namiesto toho sa vypíše chybová správa. Nakoniec sa súbor zatvorí, aby sa zabezpečilo uloženie zmien.

Kód tiež číta súbory z koreňového adresára mikro SD karty a vypisuje ich názvy a veľkosti.

File root = SD_MMC.open("/"); // Otvorenie koreňového adresára SD karty
while (File file = root.openNextFile()) { // Prechádzanie všetkých súborov v koreňovom adresári
  Serial.print(file.name()); // Výpis názvu súboru
  Serial.print("\t");
  Serial.println(file.size()); // Výpis veľkosti súboru
  file.close(); // Zatvorenie súboru
}

Tento úryvok otvorí koreňový adresár a iteruje cez všetky súbory, pričom vypisuje ich názvy a veľkosti na sériový monitor. To je užitočné na overenie, že dáta boli úspešne zapísané, a na zobrazenie obsahu SD karty.

Pre ďalšie podrobnosti si pozrite úplný kód načítaný nižšie v článku.

Demonštrácia / Čo očakávať

Po nahraní kódu a resetovaní ESP32 by ste mali na sériovom monitore vidieť správy označujúce, či bola SD karta úspešne pripojená a či boli operácie so súbormi úspešné. Tiež uvidíte zoznam súborov nájdených v koreňovom adresári, čo potvrdzuje, že dáta boli správne zapísané (vo videu o 13:45).

Medzi časté problémy patrí zabezpečenie správneho naformátovania a pripojenia mikro SD karty, ako aj overenie, že je sériový monitor nastavený na správnu prenosovú rýchlosť. Ak sa vyskytnú akékoľvek problémy, skontrolujte svoje zapojenie a spojenia.

Časové značky videa

  • 00:00 Začiatok
  • 1:45 Úvod k mikro SD karte na ESP32
  • 3:46 Stránka dokumentácie
  • 4:43 Arduino kód
  • 8:09 Výber dosky ESP32 a COM portu v Arduino IDE
  • 9:51 Demonštrácia zápisu na mikro SD kartu
  • 11:12 Zobrazenie zapísaných súborov na PC

Images

ESP32-40-micro-sd-card-1
ESP32-40-micro-sd-card-1
ESP32-40-micro-sd-card-2
ESP32-40-micro-sd-card-2
841-ESP32 Tutorial 40/55- Arduino code for micro SD card
Language: C++
#include "SD_MMC.h"

void setup() {
  Serial.begin(115200); // Initialize serial communication
  if (!SD_MMC.begin()) { // Check if SD card is mounted successfully
    Serial.println("Failed to mount SD card"); // Print error message if SD card failed to mount
    return;
  }

  // Create a file in the root directory of SD card and open it in write mode.
  File file = SD_MMC.open("/test.txt", FILE_WRITE); 
  if (!file) {
    Serial.println("Failed to open file for writing"); // Print error message if file failed to open
    return;
  }
  if (file.println("Test file write")) { // Write a line of text to the file
    Serial.println("File write successful"); // Print success message if write operation is successful
  } else {
    Serial.println("File write failed"); // Print error message if write operation failed
  }
  file.close(); // Close the file

  File root = SD_MMC.open("/"); // Open the root directory of SD card
  if (!root) {
    Serial.println("Failed to open directory"); // Print error message if directory failed to open
    return;
  }
  Serial.println("Files found in root directory:"); // Print the list of files found in the root directory
  while (File file = root.openNextFile()) { // Loop through all the files in the root directory
    Serial.print("  ");
    Serial.print(file.name()); // Print the filename
    Serial.print("\t");
    Serial.println(file.size()); // Print the filesize
    file.close(); // Close the file
  }
}
void loop() {} // Empty loop function, does nothing

Things you might need

Files📁

No files available.