Samouczek ESP32 40/55 - Odczyt i zapis na kartę Micro SD | Zestaw edukacyjny IoT ESP32 od SunFounder
W tym samouczku nauczymy się, jak czytać i zapisywać dane na karcie micro SD za pomocą ESP32 oraz płytki rozszerzającej SunFounder ESP32. Pozwoli nam to przechowywać dane i odczytywać je później, co jest niezbędne w wielu aplikacjach IoT. Po ukończeniu tego samouczka będziesz mieć działające rozwiązanie, które może tworzyć, zapisywać i odczytywać pliki z karty micro SD.
Na początek upewnij się, że karta micro SD jest poprawnie sformatowana w systemie FAT32, ponieważ jest to wymagany system plików do komunikacji ESP32 z kartą. Będziemy używać biblioteki SD_MMC, która upraszcza proces dostępu do plików na karcie micro SD. Należy pamiętać, że maksymalna pojemność karty micro SD nie powinna przekraczać 32 GB.
Objaśnienie sprzętu
Główne komponenty w tym projekcie to mikrokontroler ESP32 oraz moduł karty micro SD. ESP32 to wszechstronny mikrokontroler z wbudowaną obsługą Wi-Fi i Bluetooth, co czyni go idealnym do aplikacji IoT. Moduł karty micro SD umożliwia ESP32 odczyt i zapis na karcie, zapewniając przechowywanie danych dla różnych aplikacji.
Karta micro SD działa przy użyciu systemu plików do przechowywania danych w uporządkowany sposób. Komunikuje się z ESP32 przez interfejs SD_MMC, który umożliwia wydajne odczytywanie i zapisywanie plików. To rozwiązanie może być używane do rejestrowania danych, zapisywania obrazów lub w dowolnej innej aplikacji, gdzie wymagane jest trwałe przechowywanie danych.
Instrukcje podłączenia

Aby podłączyć kartę micro SD do ESP32, wykonaj następujące kroki:
Najpierw podłącz piny zasilania i masy. Podłącz pin VCC modułu karty micro SD do pinu 3.3V na ESP32, a pin GND do jednego z pinów GND na ESP32. Następnie podłącz piny danych: podłącz pin CS (Chip Select) modułu karty micro SD do pinu 5 na ESP32, pin MOSI (Master Out Slave In) do pinu 23, pin MISO (Master In Slave Out) do pinu 19 oraz pin SCK (Serial Clock) do pinu 18. Upewnij się, że połączenia są pewne, aby uniknąć problemów z komunikacją.
Jeśli używasz innej płytki rozszerzającej, numery pinów mogą się różnić, więc zapoznaj się z dokumentacją specyficzną dla Twojej płytki. Podłączenie jest kluczowe dla prawidłowego odczytu i zapisu plików na karcie micro SD.
Przykłady kodu i omówienie
Teraz przyjrzyjmy się głównym częściom kodu, które współpracują z kartą micro SD. Konfiguracja zaczyna się od inicjalizacji komunikacji szeregowej i sprawdzenia, czy karta micro SD została zamontowana pomyślnie.
Serial.begin(115200); // Inicjalizacja komunikacji szeregowej
if (!SD_MMC.begin()) { // Sprawdzenie, czy karta SD została zamontowana pomyślnie
Serial.println("Nie udało się zamontować karty SD"); // Wydruk komunikatu o błędzie, jeśli montowanie karty SD nie powiodło się
return;
}
W tym fragmencie kodu komunikacja szeregowa jest ustawiona na prędkość 115200, co jest ważne do monitorowania wyjścia. Funkcja SD_MMC.begin() próbuje zamontować kartę SD; jeśli to się nie powiedzie, na monitorze szeregowym drukowany jest komunikat o błędzie.
Następna część kodu tworzy nowy plik na karcie micro SD i zapisuje do niego linię tekstu.
File file = SD_MMC.open("/test.txt", FILE_WRITE);
if (!file) {
Serial.println("Nie udało się otworzyć pliku do zapisu"); // Wydruk komunikatu o błędzie, jeśli otwarcie pliku nie powiodło się
return;
}
if (file.println("Test zapisu pliku")) { // Zapisanie linii tekstu do pliku
Serial.println("Zapis pliku zakończony sukcesem"); // Wydruk komunikatu o sukcesie, jeśli operacja zapisu się powiodła
} else {
Serial.println("Zapis pliku nie powiódł się"); // Wydruk komunikatu o błędzie, jeśli operacja zapisu nie powiodła się
}
file.close(); // Zamknięcie pliku
Tutaj plik o nazwie test.txt jest otwierany w trybie zapisu. Jeśli plik zostanie pomyślnie otwarty, zapisuje linię tekstu i drukuje komunikat o sukcesie. Jeśli operacja zapisu się nie powiedzie, drukowany jest komunikat o błędzie. Na koniec plik jest zamykany, aby upewnić się, że zmiany zostały zapisane.
Kod odczytuje również pliki z katalogu głównego karty micro SD i drukuje ich nazwy oraz rozmiary.
File root = SD_MMC.open("/"); // Otwarcie katalogu głównego karty SD
while (File file = root.openNextFile()) { // Pętla przez wszystkie pliki w katalogu głównym
Serial.print(file.name()); // Wydruk nazwy pliku
Serial.print("\t");
Serial.println(file.size()); // Wydruk rozmiaru pliku
file.close(); // Zamknięcie pliku
}
Ten fragment otwiera katalog główny i iteruje przez wszystkie pliki, drukując ich nazwy i rozmiary na monitorze szeregowym. Jest to przydatne do weryfikacji, czy dane zostały zapisane poprawnie, oraz do przeglądania zawartości karty SD.
Więcej szczegółów znajdziesz w pełnym kodzie zamieszczonym poniżej artykułu.
Demonstracja / Czego się spodziewać
Po wgraniu kodu i zresetowaniu ESP32 na monitorze szeregowym powinieneś zobaczyć komunikaty informujące, czy karta SD została pomyślnie zamontowana i czy operacje na plikach zakończyły się sukcesem. Zobaczysz również listę plików znalezionych w katalogu głównym, co potwierdza, że dane zostały zapisane poprawnie (na wideo o 13:45).
Typowe problemy obejmują upewnienie się, że karta micro SD jest poprawnie sformatowana i podłączona, a także sprawdzenie, czy monitor szeregowy jest ustawiony na właściwą prędkość transmisji. Jeśli pojawią się jakiekolwiek problemy, sprawdź ponownie okablowanie i połączenia.
Znaczniki czasu wideo
- 00:00 Start
- 1:45 Wprowadzenie do karty Micro SD na ESP32
- 3:46 Strona dokumentacji
- 4:43 Kod Arduino
- 8:09 Wybór płytki ESP32 i portu COM w Arduino IDE
- 9:51 Demonstracja zapisu na kartę MicroSD
- 11:12 Przeglądanie zapisanych plików na komputerze
#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
Common Course Links
Common Course Files
Rzeczy, których możesz potrzebować
-
AliExpressPurchase a microSD card module from AliExpresss.click.aliexpress.com
-
BanggoodPurchase a microSD card module from Banggoodbanggood.com
Zasoby i odniesienia
-
DokumentacjaESP32 Tutorial 40/55- SunFounder doc page for MicroSD carddocs.sunfounder.com
-
ZewnętrznyPurchase a microSD card module from AliExpresss.click.aliexpress.com
-
Zewnętrzny
-
Zewnętrzny
-
ZewnętrznyPurchase a microSD card module from Banggoodbanggood.com
Pliki📁
Brak dostępnych plików.