라즈베리 파이 피코 타임스탬프와 함께 SD 카드에 데이터 기록
이 가이드에서는 Raspberry Pi Pico를 사용하여 Micro SD 카드에 타임스탬프가 포함된 기록을 작성하는 방법을 배웁니다. 다음과 같은 내용을 다룰 것입니다:
라즈베리 파이 피코 - 마이크로 SD 카드 파일에 시간과 함께 데이터 저장하는 방법
라즈베리 파이 피코 - 하루마다 하나의 파일에, 마이크로 SD 카드에 시간과 함께 데이터를 저장하는 방법
시간 정보는 RTC 모듈에서 수집되어 데이터와 함께 마이크로 SD 카드에 저장됩니다.
마이크로 SD 카드에 저장된 데이터는 다양한 것일 수 있습니다. 예를 들면:
센서에서 수집된 데이터
도어락 사용 빈도 기록
이 가이드는 두 개의 아날로그 핀에서 정보를 읽어오는 방법을 설명합니다. 코드를 변경하여 모든 종류의 데이터를 사용할 수 있습니다.
| 1 | × | 라즈베리 파이 피코 W | 쿠팡 | 아마존 | |
| 1 | × | 라즈베리 파이 피코 (또는) | 쿠팡 | 아마존 | |
| 1 | × | 마이크로 USB 케이블 | 아마존 | |
| 1 | × | 마이크로 SD 카드 | 아마존 | |
| 1 | × | 마이크로 SD 카드 모듈 | 쿠팡 | 아마존 | |
| 1 | × | (옵션) MicroSD to SD 메모리 카드 어댑터 | 아마존 | |
| 1 | × | DS3231 실시간 클록(RTC) 모듈 | 아마존 | |
| 1 | × | CR2032 배터리 | 아마존 | |
| 1 | × | 점퍼케이블 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 라즈베리 파이 피코용 스크루 터미널 확장 보드 | 아마존 | |
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
Micro SD 카드 모듈과 RTC 모듈을 사용하는 방법을 알아보세요. 이 가이드에서 해당 모듈들의 핀 연결, 기능 및 프로그래밍 방법을 확인할 수 있습니다:

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
※ 주의:
이더넷 쉴드나 마이크로 SD 카드 홀더가 있는 다른 쉴드를 사용하는 경우, 별도의 마이크로 SD 카드 모듈은 필요하지 않습니다. 단지 마이크로 SD 카드를 쉴드의 카드 슬롯에 넣기만 하면 됩니다.
/*
* 이 라즈베리 파이 피코 코드는 newbiely.kr 에서 개발되었습니다
* 이 라즈베리 파이 피코 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다.
* 상세한 지침 및 연결도에 대해서는 다음을 방문하세요:
* https://newbiely.kr/tutorials/raspberry-pico/raspberry-pi-pico-log-data-with-timestamp-to-sd-card
*/
import machine
import os
import time
import sdcard
SPI_SCK_PIN = 2
SPI_MOSI_PIN = 3
SPI_MISO_PIN = 4
SPI_CS_PIN = 5
I2C_SDA_PIN = 0
I2C_SCL_PIN = 1
FILE_NAME = "/sd/log.txt"
i2c = machine.I2C(0, sda=machine.Pin(I2C_SDA_PIN), scl=machine.Pin(I2C_SCL_PIN))
DS3231_ADDR = 0x68
def 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]) + 2000
return (year, month, day, hour, minute, second)
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
print("--------------------")
analog_pin_1 = machine.ADC(machine.Pin(26))
analog_pin_2 = machine.ADC(machine.Pin(27))
while True:
try:
f = open(FILE_NAME, "a")
print("Writing log to SD Card")
year, month, day, hour, minute, second = get_datetime()
timestamp = "{}-{}-{} {}:{}:{}".format(year, month, day, hour, minute, second)
analog_1 = analog_pin_1.read_u16()
analog_2 = analog_pin_2.read_u16()
f.write("{} analog_1 = {}, analog_2 = {}\n".format(timestamp, analog_1, analog_2))
f.close()
except Exception as e:
print("SD Card: Issue encountered while attempting to open the file", FILE_NAME, e)
time.sleep(2)
아래 지침을 단계별로 따르십시오:
컴퓨터에 Thonny IDE가 설치되어 있는지 확인하십시오.
Raspberry Pi Pico에 MicroPython 펌웨어가 설치되어 있는지 확인하십시오.
제공된 다이어그램에 따라 부품들을 연결하십시오.
Raspberry Pi Pico를 USB 케이블로 컴퓨터에 연결하십시오.
컴퓨터에서 Thonny IDE를 실행하십시오.
Thonny IDE에서 Tools Options로 이동하여 MicroPython (Raspberry Pi Pico) 인터프리터를 선택하십시오.
Interpreter 탭에서 드롭다운 메뉴에서 MicroPython (Raspberry Pi Pico)를 선택하십시오.
올바른 포트가 선택되어 있는지 확인하십시오. Thonny IDE가 포트를 자동으로 감지하지만, 때로는 수동으로 선택해야 할 수 있습니다 (예: Windows에서는 COM3, Linux에서는 /dev/ttyACM0).
위의 코드를 복사하여 Thonny IDE의 에디터에 붙여넣으십시오.
스크립트를 Raspberry Pi Pico에 저장하려면:
* 저장 버튼을 클릭하거나 Ctrl+S 단축키를 사용합니다.
* 저장 대화상자에서 두 섹션(컴퓨터와 Raspberry Pi Pico)이 표시됩니다. Raspberry Pi Pico를 선택합니다.
* 파일 이름을 main.py로 저장합니다.
녹색 Run 버튼을 클릭하거나 (또는 F5 키를 눌러) 스크립트를 실행합니다. 스크립트가 실행될 것입니다.
Thonny 하단의 Shell에서 메시지를 확인하십시오.
스크립트의 이름을 main.py로 지정하고 이를 Raspberry Pi Pico의 루트 디렉토리에 저장하면, Pico의 전원이 켜지거나 리셋될 때마다 자동으로 실행됩니다. 이는 전원이 공급되자마자 즉시 실행되어야 하는 독립 실행형 애플리케이션에 유용합니다. 만약 스크립트의 이름을 main.py가 아닌 다른 이름으로 지정하면, Thonnys's Shell에서 수동으로 실행해야 합니다.
Micro SD 카드를 FAT16 또는 FAT32로 포맷합니다. 온라인에서 설명서를 검색하세요.
코드를 복사하여 Thonny IDE에서 엽니다.
Thonny IDE에서 Upload 버튼을 클릭하여 코드를 Raspberry Pi Pico로 전송합니다.
Serial Monitor에서 결과를 확인합니다.
>>> %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 (Raspberry Pi Pico) • Board CDC @ COM29 ≡
USB SD카드 리더기가 없는 경우, 이 코드를 사용하여 Raspberry Pi Pico에서 로그 파일을 확인할 수 있습니다.
/*
* 이 라즈베리 파이 피코 코드는 newbiely.kr 에서 개발되었습니다
* 이 라즈베리 파이 피코 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다.
* 상세한 지침 및 연결도에 대해서는 다음을 방문하세요:
* https://newbiely.kr/tutorials/raspberry-pico/raspberry-pi-pico-log-data-with-timestamp-to-sd-card
*/
import machine
import os
import sdcard
SPI_SCK_PIN = 2
SPI_MOSI_PIN = 3
SPI_MISO_PIN = 4
SPI_CS_PIN = 5
FILE_NAME = "/sd/log.txt"
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
try:
f = open(FILE_NAME, "r")
while True:
ch = f.read(1)
if not ch:
break
print(ch, end="")
f.close()
except Exception as e:
print("SD Card: Issue encountered while attempting to open the file", FILE_NAME, e)
os.umount("/sd")
아래 코드는 하나의 파일 대신 여러 개의 파일에 로그를 저장합니다. 이는 읽기 어려운 매우 큰 파일이 생성되는 것을 방지하는 데 도움이 됩니다.
/*
* 이 라즈베리 파이 피코 코드는 newbiely.kr 에서 개발되었습니다
* 이 라즈베리 파이 피코 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다.
* 상세한 지침 및 연결도에 대해서는 다음을 방문하세요:
* https://newbiely.kr/tutorials/raspberry-pico/raspberry-pi-pico-log-data-with-timestamp-to-sd-card
*/
import machine
import os
import time
import sdcard
SPI_SCK_PIN = 2
SPI_MOSI_PIN = 3
SPI_MISO_PIN = 4
SPI_CS_PIN = 5
I2C_SDA_PIN = 0
I2C_SCL_PIN = 1
i2c = machine.I2C(0, sda=machine.Pin(I2C_SDA_PIN), scl=machine.Pin(I2C_SCL_PIN))
DS3231_ADDR = 0x68
def 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]) + 2000
return (year, month, day, hour, minute, second)
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
print("--------------------")
analog_pin_1 = machine.ADC(machine.Pin(26))
analog_pin_2 = machine.ADC(machine.Pin(27))
while True:
year, month, day, hour, minute, second = get_datetime()
filename = "/sd/{:04d}{:02d}{:02d}.txt".format(year, month, day)
try:
f = open(filename, "a")
print("Writing log to SD Card")
timestamp = "{}-{}-{} {}:{}:{}".format(year, month, day, hour, minute, second)
analog_1 = analog_pin_1.read_u16()
analog_2 = analog_pin_2.read_u16()
f.write("{} analog_1 = {}, analog_2 = {}\n".format(timestamp, analog_1, analog_2))
f.close()
except Exception as e:
print("SD Card: Issue encountered while attempting to open the file", filename, e)
time.sleep(2)
만약 당신이 장거리를 달리고 난 후에:
슬롯에서 Micro SD 카드를 꺼내세요.
Micro SD 카드를 USB SD 카드 리더기에 넣으세요.
USB SD 카드 리더기를 컴퓨터에 연결하세요.
이제 카드에 있는 파일을 확인할 수 있습니다.
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.