올바른 포트가 선택되어 있는지 확인합니다. Thonny IDE가 자동으로 감지하지만, 수동으로 선택해야 할 수도 있습니다(Windows에서는 COM3, Linux에서는 /dev/ttyACM0).
Thonny IDE의 Tools Manage packages로 이동합니다.
"sdcard"를 검색하여 micropython-lib에서 제공하는 sdcard 라이브러리를 찾습니다.
sdcard를 클릭한 후 Install 버튼을 클릭하여 SD 카드 라이브러리를 설치합니다.
마이크로 SD 카드가 FAT16 또는 FAT32로 포맷되어 있는지 확인합니다(필요한 경우 온라인에서 방법을 검색하세요).
제공된 MicroPython 코드를 복사하여 Thonny 편집기에 붙여넣습니다.
다음 방법으로 코드를 ESP32에 저장합니다:
Save 버튼을 클릭하거나 Ctrl+S를 누릅니다.
저장 대화상자에서 MicroPython device를 선택합니다.
파일 이름을 main.py로 지정합니다.
녹색 Run 버튼을 클릭하거나 F5를 눌러 스크립트를 실행합니다.
Thonny 하단의 Shell 메시지를 확인합니다.
Shell x
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot
SD CARD INITIALIZED.
--------------------
Writing log to SD Card
Writing log to SD Card
Writing log to SD Card
Writing log to SD Card
Writing log to SD Card
Writing log to SD Card
Writing log to SD Card
MicroPython (ESP32) • CP2102 USB To UART Bridge Controller @ COM12 ≡
모듈에서 마이크로 SD 카드를 제거합니다.
USB SD 카드 리더기에 꽂아 PC에 연결합니다.
PC에서 log.txt 파일을 열면 다음과 같은 내용이 표시됩니다:
USB SD 카드 리더기가 없는 경우, 다음 MicroPython 코드를 ESP32에서 실행하여 로그 파일 내용을 확인할 수 있습니다.
/* * 이 ESP32 마이크로파이썬 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 마이크로파이썬 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-micropython/esp32-micropython-log-data-with-timestamp-to-sd-card */import machineimport osimport sdcard# Define SPI pins for the Micro SD Card moduleSPI_SCK_PIN = 18 # The ESP32 pin GPIO18 connected to SCKSPI_MOSI_PIN = 23 # The ESP32 pin GPIO23 connected to MOSISPI_MISO_PIN = 19 # The ESP32 pin GPIO19 connected to MISOSPI_CS_PIN = 5 # The ESP32 pin GPIO5 connected to SS (CS)FILE_NAME = "/sd/log.txt"# Initialize SD card using SoftSPI and sdcard driverspi = 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.")exceptExceptionas e:print("SD CARD FAILED, OR NOT PRESENT!", e)raiseSystemExit# Open file for readingtry: f = open(FILE_NAME, "r")whileTrue: ch = f.read(1) # read characters one by one from Micro SD Cardifnot ch:breakprint(ch, end="") # print the character to the Shell f.close()exceptExceptionas e:print("SD Card: Issue encountered while attempting to open the file", FILE_NAME, e)os.umount("/sd")
ESP32 MicroPython - 날별 별도 파일에 로그 기록
모든 로그를 하나의 파일에 저장하면 시간이 지남에 따라 파일이 커져 관리가 어려워집니다. 아래 코드는 로그를 여러 파일로 나눕니다:
매일 새 파일이 생성됩니다.
각 파일 이름은 YYYYMMDD.txt 형식을 따릅니다.
/* * 이 ESP32 마이크로파이썬 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 마이크로파이썬 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-micropython/esp32-micropython-log-data-with-timestamp-to-sd-card */import machineimport osimport timeimport sdcard# Define SPI pins for the Micro SD Card moduleSPI_SCK_PIN = 18 # The ESP32 pin GPIO18 connected to SCKSPI_MOSI_PIN = 23 # The ESP32 pin GPIO23 connected to MOSISPI_MISO_PIN = 19 # The ESP32 pin GPIO19 connected to MISOSPI_CS_PIN = 5 # The ESP32 pin GPIO5 connected to SS (CS)# Define I2C pins for the RTC moduleI2C_SDA_PIN = 21 # The ESP32 pin GPIO21 connected to SDAI2C_SCL_PIN = 22 # The ESP32 pin GPIO22 connected to SCL# Initialize I2C and RTC (DS3231)i2c = machine.I2C(0, sda=machine.Pin(I2C_SDA_PIN), scl=machine.Pin(I2C_SCL_PIN))# DS3231 I2C addressDS3231_ADDR = 0x68def bcd_to_dec(bcd):return (bcd >> 4) * 10 + (bcd & 0x0F)def get_datetime(): buf = i2c.readfrom_mem(DS3231_ADDR, 0x00, 7) second = bcd_to_dec(buf[0]) minute = bcd_to_dec(buf[1]) hour = bcd_to_dec(buf[2]) day = bcd_to_dec(buf[4]) month = bcd_to_dec(buf[5] & 0x1F) year = bcd_to_dec(buf[6]) + 2000return (year, month, day, hour, minute, second)# Initialize SD card using SoftSPI and sdcard driverspi = 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.")exceptExceptionas e:print("SD CARD FAILED, OR NOT PRESENT!", e)raiseSystemExitprint("--------------------")# Define analog pinsanalog_pin_1 = machine.ADC(machine.Pin(36)) # A0analog_pin_2 = machine.ADC(machine.Pin(39)) # A1analog_pin_1.atten(machine.ADC.ATTN_11DB) # set attenuation to 11 dB (up to ~3.3V input)analog_pin_2.atten(machine.ADC.ATTN_11DB)whileTrue: year, month, day, hour, minute, second = get_datetime()# Generate filename: /sd/YYYYMMDD.txt filename = "/sd/{:04d}{:02d}{:02d}.txt".format(year, month, day)try: f = open(filename, "a")print("Writing log to SD Card")# Write timestamp timestamp = "{}-{}-{} {}:{}:{}".format(year, month, day, hour, minute, second)# Read data analog_1 = analog_pin_1.read() analog_2 = analog_pin_2.read()# Write timestamp and data f.write("{} analog_1 = {}, analog_2 = {}\n".format(timestamp, analog_1, analog_2)) f.close()exceptExceptionas e:print("SD Card: Issue encountered while attempting to open the file", filename, e) time.sleep(2) # delay 2 seconds
오랜 시간 실행 후:
모듈에서 마이크로 SD 카드를 제거합니다.
USB SD 카드 리더기에 꽂아 PC에 연결합니다.
아래와 같이 여러 로그 파일이 생성되어 있습니다:
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.