코드 검색

ESP32 튜토리얼 40/55 - Micro SD 카드 읽기 및 쓰기 | SunFounder의 ESP32 IoT 학습 키트

ESP32 튜토리얼 40/55 - Micro SD 카드 읽기 및 쓰기 | SunFounder의 ESP32 IoT 학습 키트

이 튜토리얼에서는 ESP32와 SunFounder ESP32 확장 보드를 사용하여 마이크로 SD 카드에서 읽고 쓰는 방법을 배웁니다. 이를 통해 데이터를 저장하고 나중에 검색할 수 있으며, 이는 많은 IoT 애플리케이션에 필수적입니다. 이 튜토리얼이 끝나면 마이크로 SD 카드에서 파일을 생성하고, 쓰고, 읽을 수 있는 작동하는 설정을 갖게 됩니다.

시작하려면 마이크로 SD 카드가 FAT32로 올바르게 포맷되었는지 확인하세요. FAT32는 ESP32가 카드와 상호 작용하는 데 필요한 파일 시스템입니다. 우리는 SD_MMC 라이브러리를 사용할 것이며, 이 라이브러리는 마이크로 SD 카드의 파일에 접근하는 과정을 단순화합니다. 마이크로 SD 카드의 최대 용량은 32GB를 초과하지 않아야 한다는 점을 유의하는 것이 중요합니다.

하드웨어 설명

이 프로젝트의 주요 구성 요소는 ESP32 마이크로컨트롤러와 마이크로 SD 카드 모듈입니다. ESP32는 내장 Wi-Fi 및 Bluetooth 기능을 갖춘 다재다능한 마이크로컨트롤러로, IoT 애플리케이션에 이상적입니다. 마이크로 SD 카드 모듈은 ESP32가 카드에서 읽고 쓸 수 있게 하여 다양한 애플리케이션을 위한 데이터 저장을 가능하게 합니다.

마이크로 SD 카드는 파일 시스템을 사용하여 데이터를 구조화된 방식으로 저장합니다. SD_MMC 인터페이스를 통해 ESP32와 통신하며, 이를 통해 파일을 효율적으로 읽고 쓸 수 있습니다. 이 설정은 데이터 로깅, 이미지 저장 또는 데이터 지속성이 필요한 모든 애플리케이션에 사용할 수 있습니다.

배선 지침

ESP32-40-micro-sd-card-1

마이크로 SD 카드를 ESP32에 배선하려면 다음 단계를 따르세요:

먼저 전원 및 접지 핀을 연결합니다. 마이크로 SD 카드 모듈의 VCC 핀을 ESP32의 3.3V 핀에 연결하고, GND 핀을 ESP32의 GND 핀 중 하나에 연결합니다. 다음으로 데이터 핀을 연결합니다: 마이크로 SD 카드 모듈의 CS(칩 선택) 핀을 ESP32의 핀 5에, MOSI(마스터 출력 슬레이브 입력) 핀을 핀 23에, MISO(마스터 입력 슬레이브 출력) 핀을 핀 19에, SCK(직렬 클록) 핀을 핀 18에 연결합니다. 통신 문제를 피하기 위해 이러한 연결이 안전한지 확인하세요.

다른 확장 보드를 사용하는 경우 핀 번호가 다를 수 있으므로 해당 보드의 문서를 참조하세요. 배선은 마이크로 SD 카드에 파일을 읽고 쓰는 작업의 성공적인 작동에 중요합니다.

코드 예제 및 설명

이제 마이크로 SD 카드와 상호 작용하는 코드의 주요 부분을 살펴보겠습니다. 설정은 직렬 통신을 초기화하고 마이크로 SD 카드가 성공적으로 마운트되었는지 확인하는 것으로 시작됩니다.

Serial.begin(115200); // 직렬 통신 초기화
if (!SD_MMC.begin()) { // SD 카드가 성공적으로 마운트되었는지 확인
  Serial.println("Failed to mount SD card"); // SD 카드 마운트 실패 시 오류 메시지 출력
  return;
}

이 코드 조각에서 직렬 통신은 115200의 보드 레이트로 설정되며, 이는 출력을 모니터링하는 데 중요합니다. SD_MMC.begin() 함수는 SD 카드를 마운트하려고 시도하며, 실패하면 직렬 모니터에 오류 메시지가 출력됩니다.

코드의 다음 부분은 마이크로 SD 카드에 새 파일을 만들고 텍스트 줄을 씁니다.

File file = SD_MMC.open("/test.txt", FILE_WRITE); 
if (!file) {
  Serial.println("Failed to open file for writing"); // 파일 열기 실패 시 오류 메시지 출력
  return;
}
if (file.println("Test file write")) { // 파일에 텍스트 줄 쓰기
  Serial.println("File write successful"); // 쓰기 작업 성공 시 성공 메시지 출력
} else {
  Serial.println("File write failed"); // 쓰기 작업 실패 시 오류 메시지 출력
}
file.close(); // 파일 닫기

여기서 test.txt라는 파일이 쓰기 모드로 열립니다. 파일이 성공적으로 열리면 텍스트 줄을 쓰고 성공 메시지를 출력합니다. 쓰기 작업이 실패하면 대신 오류 메시지가 출력됩니다. 마지막으로 변경 사항이 저장되도록 파일을 닫습니다.

코드는 또한 마이크로 SD 카드의 루트 디렉토리에서 파일을 읽고 이름과 크기를 출력합니다.

File root = SD_MMC.open("/"); // SD 카드의 루트 디렉토리 열기
while (File file = root.openNextFile()) { // 루트 디렉토리의 모든 파일을 반복
  Serial.print(file.name()); // 파일 이름 출력
  Serial.print("\t");
  Serial.println(file.size()); // 파일 크기 출력
  file.close(); // 파일 닫기
}

이 조각은 루트 디렉토리를 열고 모든 파일을 반복하면서 이름과 크기를 직렬 모니터에 출력합니다. 이는 데이터가 성공적으로 기록되었는지 확인하고 SD 카드의 내용을 보는 데 유용합니다.

자세한 내용은 기사 아래에 로드된 전체 코드를 참조하세요.

데모 / 기대 효과

코드를 업로드하고 ESP32를 재설정한 후 직렬 모니터에서 SD 카드가 성공적으로 마운트되었는지와 파일 작업이 성공했는지 나타내는 메시지를 볼 수 있습니다. 또한 루트 디렉토리에서 찾은 파일 목록이 표시되어 데이터가 올바르게 기록되었음을 확인할 수 있습니다(비디오 13:45에서).

일반적인 문제로는 마이크로 SD 카드가 올바르게 포맷되고 연결되었는지 확인하고, 직렬 모니터가 올바른 보드 레이트로 설정되었는지 확인하는 것이 있습니다. 문제가 발생하면 배선과 연결을 다시 확인하세요.

비디오 타임스탬프

  • 00:00 시작
  • 1:45 ESP32에서 마이크로 SD 카드 소개
  • 3:46 문서 페이지
  • 4:43 Arduino 코드
  • 8:09 Arduino IDE에서 ESP32 보드 및 COM 포트 선택
  • 9:51 MicroSD 카드 쓰기 데모
  • 11:12 PC에서 작성된 파일 보기

이미지

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
언어: 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

필요할 수 있는 것들

파일📁

파일이 없습니다.