ESP32 MicroPython SD 카드

이 가이드는 MicroPython을 사용하여 ESP32로 마이크로 SD 카드를 인터페이스하는 방법을 단계별로 설명합니다. 배우는 내용:

ESP32 마이크로파이썬과 마이크로 sd 카드

필요한 하드웨어

1×38-pin ESP32 ESP-WROOM-32 Dev Module - Narrow 쿠팡 | 아마존
1×(또는) 38-pin ESP32 ESP-WROOM-32 Dev Module - Wide 쿠팡 | 아마존
1×(또는) 30-pin ESP32 ESP-WROOM-32 Dev Module - Wide 아마존
1×(또는) ESP32 Uno-form board 아마존
1×(또는) ESP32 S3 Uno-form board 아마존
1×USB 케이블 타입-A to 타입-C (USB-A PC용) 쿠팡 | 아마존
1×USB 케이블 타입-C to 타입-C (USB-C PC용) 아마존
1×마이크로 SD 카드 아마존
1×마이크로 SD 카드 모듈 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
1×브레드보드 쿠팡 | 아마존
1×(옵션) MicroSD to SD 메모리 카드 어댑터 아마존
1×(추천) ESP32용 스크루 터미널 확장 보드 쿠팡 | 아마존
1×(추천) Breakout Expansion Board for ESP32 쿠팡 | 아마존
1×(추천) ESP32용 전원 분배기 쿠팡 | 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

마이크로 SD 카드 모듈에 대하여

마이크로 SD 카드 모듈은 ESP32가 SPI 프로토콜을 통해 마이크로 SD 카드와 통신할 수 있게 해주는 어댑터 역할을 합니다. 마이크로컨트롤러와 저장 카드 사이의 커넥터 역할을 합니다.

핀아웃

마이크로 sd 카드 모듈 핀아웃

마이크로 SD 카드 모듈에는 6개의 핀이 있습니다:

  • VCC 핀: 모듈에 전원을 공급합니다. ESP32의 5V 출력에 연결합니다.
  • GND 핀: 접지 기준입니다. ESP32의 GND에 연결합니다.
  • MISO 핀: (Master In Slave Out) SD 카드에서 ESP32로의 데이터 라인입니다.
  • MOSI 핀: (Master Out Slave In) ESP32에서 SD 카드로의 데이터 라인입니다.
  • SCK 핀: SPI 클럭 신호입니다. ESP32의 SCK에 연결합니다.
  • SS 핀: (Slave Select) 칩 선택 핀입니다. MicroPython 코드에서 할당합니다.

준비

  • 마이크로 SD 카드를 USB 3.0 SD 카드 리더기에 꽂아 PC에 연결합니다.
  • 마이크로 SD 카드가 FAT16 또는 FAT32 형식인지 확인합니다(필요한 경우 온라인에서 방법을 검색하세요).

배선도

ESP32 마이크로파이썬 마이크로 sd 카드 모듈 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

아래 배선표는 마이크로 SD 카드 모듈을 ESP32에 연결하는 방법을 보여줍니다:

Micro SD Card Module ESP32
VCC 5V
GND GND
MISO GPIO19
MOSI GPIO23
SCK GPIO18
CS GPIO5

※ 주의:

이더넷 실드 등 쉴드에 마이크로 SD 카드 슬롯이 내장되어 있는 경우, 외부 모듈을 생략하고 카드를 슬롯에 직접 삽입할 수 있습니다.

ESP32 MicroPython - 마이크로 SD 카드에서 파일 열기 및 생성

ESP32 MicroPython 코드

/* * 이 ESP32 마이크로파이썬 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 마이크로파이썬 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-micropython/esp32-micropython-micro-sd-card */ import machine import os import sdcard # Define SPI pins for the Micro SD Card module SPI_SCK_PIN = 18 # The ESP32 pin GPIO18 connected to SCK SPI_MOSI_PIN = 23 # The ESP32 pin GPIO23 connected to MOSI SPI_MISO_PIN = 19 # The ESP32 pin GPIO19 connected to MISO SPI_CS_PIN = 5 # The ESP32 pin GPIO5 connected to SS (CS) # Initialize SD card using SoftSPI and sdcard driver spi = machine.SoftSPI(baudrate=1000000, polarity=0, phase=0, sck=machine.Pin(SPI_SCK_PIN), mosi=machine.Pin(SPI_MOSI_PIN), miso=machine.Pin(SPI_MISO_PIN)) cs = machine.Pin(SPI_CS_PIN, machine.Pin.OUT) try: sd = sdcard.SDCard(spi, cs) os.mount(sd, "/sd") print("SD CARD INITIALIZED.") except Exception as e: print("SD CARD FAILED, OR NOT PRESENT!", e) raise SystemExit # Check if the file exists file_path = "/sd/esp32.txt" if file_path.replace("/sd/", "") not in os.listdir("/sd"): print("esp32.txt doesn't exist. Creating esp32.txt file...") # Create a new file by opening it and immediately closing it f = open(file_path, "w") f.close() # Recheck if file is created or not if file_path.replace("/sd/", "") in os.listdir("/sd"): print("esp32.txt exists on SD Card.") else: print("esp32.txt doesn't exist on SD Card.") os.umount("/sd")

빠른 시작

Thonny IDE를 사용하여 ESP32에서 MicroPython 코드를 설정하고 실행하는 방법:

  • Thonny IDE가 컴퓨터에 설치되어 있는지 확인합니다.
  • ESP32 보드에 MicroPython 펌웨어가 로드되어 있는지 확인합니다.
  • ESP32에서 MicroPython을 처음 사용하는 경우, ESP32 마이크로파이썬 - 시작하기 가이드를 참조하세요.
  • 마이크로 SD 카드 모듈에 마이크로 SD 카드를 삽입합니다.
  • 위 배선도에 따라 마이크로 SD 카드 모듈과 ESP32를 연결합니다.
  • USB 케이블로 ESP32 보드를 컴퓨터에 연결합니다.
  • 컴퓨터에서 Thonny IDE를 엽니다.
  • Thonny IDE에서 Tools Options로 이동합니다.
  • Interpreter 탭에서 드롭다운 메뉴의 MicroPython (ESP32)를 선택합니다.
  • 올바른 포트가 선택되어 있는지 확인합니다. Thonny IDE가 자동으로 감지하지만, 수동으로 선택해야 할 수도 있습니다(Windows에서는 COM3, Linux에서는 /dev/ttyACM0).
  • Thonny IDE의 Tools Manage packages로 이동합니다.
  • "sdcard"를 검색하여 micropython-lib에서 제공하는 sdcard 라이브러리를 찾습니다.
  • sdcard를 클릭한 후 Install 버튼을 클릭하여 SD 카드 라이브러리를 설치합니다.
ESP32 마이크로파이썬 sd 카드 라이브러리
  • 제공된 MicroPython 코드를 복사하여 Thonny 편집기에 붙여넣습니다.
  • 다음 방법으로 코드를 ESP32에 저장합니다:
    • Save 버튼을 클릭하거나 Ctrl+S를 누릅니다.
    • 저장 대화상자에서 MicroPython device를 선택합니다.
    • 파일 이름을 main.py로 지정합니다.
  • 녹색 Run 버튼을 클릭하거나 F5를 눌러 스크립트를 실행합니다.
  • Thonny 하단의 Shell 메시지를 확인합니다.
  • 첫 번째 실행 시 Shell 결과
Shell x
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot SD CARD INITIALIZED. esp32.txt doesn't exist. Creating esp32.txt file... esp32.txt exists on SD Card.
MicroPython (ESP32) • CP2102 USB To UART Bridge Controller @ COM12 ≡
  • 이후 실행 시 Shell 결과
Shell x
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot SD CARD INITIALIZED. esp32.txt exists on SD Card.
MicroPython (ESP32) • CP2102 USB To UART Bridge Controller @ COM12 ≡
  • 모듈에서 마이크로 SD 카드를 분리합니다.
  • 마이크로 SD 카드를 USB SD 카드 리더기에 삽입합니다.
  • USB SD 카드 리더기를 PC에 연결합니다.
  • 파일이 존재하는지 확인합니다.

ESP32 MicroPython - 마이크로 SD 카드에서 데이터 쓰기 및 읽기

다음 MicroPython 코드는 두 가지 작업을 수행합니다:

  • SD 카드의 파일에 데이터를 저장합니다.
  • 파일 내용을 한 문자씩 읽어 Shell에 표시합니다.
/* * 이 ESP32 마이크로파이썬 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 마이크로파이썬 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-micropython/esp32-micropython-micro-sd-card */ import machine import os import sdcard # Define SPI pins for the Micro SD Card module SPI_SCK_PIN = 18 # The ESP32 pin GPIO18 connected to SCK SPI_MOSI_PIN = 23 # The ESP32 pin GPIO23 connected to MOSI SPI_MISO_PIN = 19 # The ESP32 pin GPIO19 connected to MISO SPI_CS_PIN = 5 # The ESP32 pin GPIO5 connected to SS (CS) # Initialize SD card using SoftSPI and sdcard driver spi = machine.SoftSPI(baudrate=1000000, polarity=0, phase=0, sck=machine.Pin(SPI_SCK_PIN), mosi=machine.Pin(SPI_MOSI_PIN), miso=machine.Pin(SPI_MISO_PIN)) cs = machine.Pin(SPI_CS_PIN, machine.Pin.OUT) try: sd = sdcard.SDCard(spi, cs) os.mount(sd, "/sd") print("SD CARD INITIALIZED.") except Exception as e: print("SD CARD FAILED, OR NOT PRESENT!", e) raise SystemExit file_path = "/sd/esp32.txt" # Open file for writing (append mode) try: f = open(file_path, "a") f.write("Created by newbiely.com\n") # write a line to esp32.txt f.write("Learn ESP32 and SD Card\n") # write another line to esp32.txt f.close() except Exception as e: print("SD Card: Issue encountered while attempting to open the file esp32.txt", e) # Open file for reading try: f = open(file_path, "r") while True: ch = f.read(1) # read characters one by one from Micro SD Card if not ch: break print(ch, end="") # print the character to the Shell f.close() except Exception as e: print("SD Card: Issue encountered while attempting to open the file esp32.txt", e) os.umount("/sd")
  • Shell에 파일 내용이 표시됩니다:
Shell x
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot Created by newbiely.com Learn ESP32 and SD Card
MicroPython (ESP32) • CP2102 USB To UART Bridge Controller @ COM12 ≡

※ 주의:

기본적으로 새 데이터는 파일 끝에 추가됩니다. 같은 코드로 ESP32를 재시작하면 텍스트가 다시 추가되므로 Shell 출력은 다음과 같이 됩니다:

Shell x
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot Created by newbiely.com Learn ESP32 and SD Card Created by newbiely.com Learn ESP32 and SD Card
MicroPython (ESP32) • CP2102 USB To UART Bridge Controller @ COM12 ≡

마이크로 SD 카드를 모듈에서 제거하고 PC에서 내용을 볼 수도 있습니다(USB SD 카드 리더기 필요).

ESP32 MicroPython - 마이크로 SD 카드에서 줄 단위로 파일 읽기

/* * 이 ESP32 마이크로파이썬 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 마이크로파이썬 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-micropython/esp32-micropython-micro-sd-card */ import machine import os import sdcard # Define SPI pins for the Micro SD Card module SPI_SCK_PIN = 18 # The ESP32 pin GPIO18 connected to SCK SPI_MOSI_PIN = 23 # The ESP32 pin GPIO23 connected to MOSI SPI_MISO_PIN = 19 # The ESP32 pin GPIO19 connected to MISO SPI_CS_PIN = 5 # The ESP32 pin GPIO5 connected to SS (CS) # Initialize SD card using SoftSPI and sdcard driver spi = machine.SoftSPI(baudrate=1000000, polarity=0, phase=0, sck=machine.Pin(SPI_SCK_PIN), mosi=machine.Pin(SPI_MOSI_PIN), miso=machine.Pin(SPI_MISO_PIN)) cs = machine.Pin(SPI_CS_PIN, machine.Pin.OUT) try: sd = sdcard.SDCard(spi, cs) os.mount(sd, "/sd") print("SD CARD INITIALIZED.") except Exception as e: print("SD CARD FAILED, OR NOT PRESENT!", e) raise SystemExit file_path = "/sd/esp32.txt" # Open file for writing (append mode) try: f = open(file_path, "a") f.write("Created by newbiely.com\n") # write a line to esp32.txt f.write("Learn ESP32 and SD Card\n") # write another line to esp32.txt f.close() except Exception as e: print("SD Card: Issue encountered while attempting to open the file esp32.txt", e) # Open file for reading line-by-line try: f = open(file_path, "r") line_count = 0 while True: line = f.readline() # read line-by-line from Micro SD Card if not line: break line_count += 1 print("Line {}: {}".format(line_count, line.strip())) # print the line to the Shell f.close() except Exception as e: print("SD Card: Issue encountered while attempting to open the file esp32.txt", e) os.umount("/sd")
  • Shell 결과
Shell x
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot SD CARD INITIALIZED. Line 1: Created by newbiely.com Line 2: Learn ESP32 and SD Card
MicroPython (ESP32) • CP2102 USB To UART Bridge Controller @ COM12 ≡

※ 주의:

이전 실행에서 파일에 데이터가 이미 있는 경우 Shell에 추가 줄이 표시될 수 있습니다.

ESP32 MicroPython - 마이크로 SD 카드의 파일 덮어쓰기

데이터가 기본적으로 추가되므로, 파일을 덮어쓰는 가장 쉬운 방법은 기존 파일을 삭제하고 같은 이름으로 새 파일을 만드는 것입니다.

/* * 이 ESP32 마이크로파이썬 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 마이크로파이썬 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-micropython/esp32-micropython-micro-sd-card */ import machine import os import sdcard # Define SPI pins for the Micro SD Card module SPI_SCK_PIN = 18 # The ESP32 pin GPIO18 connected to SCK SPI_MOSI_PIN = 23 # The ESP32 pin GPIO23 connected to MOSI SPI_MISO_PIN = 19 # The ESP32 pin GPIO19 connected to MISO SPI_CS_PIN = 5 # The ESP32 pin GPIO5 connected to SS (CS) # Initialize SD card using SoftSPI and sdcard driver spi = machine.SoftSPI(baudrate=1000000, polarity=0, phase=0, sck=machine.Pin(SPI_SCK_PIN), mosi=machine.Pin(SPI_MOSI_PIN), miso=machine.Pin(SPI_MISO_PIN)) cs = machine.Pin(SPI_CS_PIN, machine.Pin.OUT) try: sd = sdcard.SDCard(spi, cs) os.mount(sd, "/sd") print("SD CARD INITIALIZED.") except Exception as e: print("SD CARD FAILED, OR NOT PRESENT!", e) raise SystemExit file_path = "/sd/esp32.txt" # Delete the file if it exists (to overwrite) try: os.remove(file_path) except OSError: pass # Create new file by opening file for writing try: f = open(file_path, "w") f.write("Created by newbiely.com\n") # write a line to esp32.txt f.write("Learn ESP32 and SD Card\n") # write another line to esp32.txt f.close() except Exception as e: print("SD Card: Issue encountered while attempting to open the file esp32.txt", e) # Open file for reading try: f = open(file_path, "r") while True: ch = f.read(1) # read characters one by one from Micro SD Card if not ch: break print(ch, end="") # print the character to the Shell f.close() except Exception as e: print("SD Card: Issue encountered while attempting to open the file esp32.txt", e) os.umount("/sd")
  • Shell 결과
Shell x
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot SD CARD INITIALIZED. Created by newbiely.com Learn ESP32 and SD Card
MicroPython (ESP32) • CP2102 USB To UART Bridge Controller @ COM12 ≡
  • ESP32를 재시작합니다.
  • Shell의 파일 내용이 교체되었는지 추가되었는지 확인합니다.

마이크로 SD 카드를 모듈에서 제거하고 PC에서 파일을 검사할 수도 있습니다(USB SD 카드 리더기 필요).

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

댓글