• Skip to primary navigation
  • Skip to main content

IoTmaker

사물인터넷에 대한 모든 것 여기서 해결하셔요!

  • 홈
  • 책:마이크로파이썬을 활용한 사물인터넷
  • 책:따라 하면서 배우는 사물인터넷
  • 온라인 교육 코스
  • 새로운 소식
  • 의견보내기
  • 내 수강정보
  • 로그인
  • 회원가입

AI 프롬프트 실습 9-7: 온습도 정보를 시간과 함께 SD 카드에 기록하기

마이크로파이썬 > AI 프롬프트
RTC에 현재 시간을 설정하는 절차가 필요합니다. 한 번 설정된 시간은 배터리 수명이 다할 때까지 유지됩니다. 다만 RTC에는 오차가 있으므로 정확한 시간이 필요할 때마다 현재 시간을 다시 설정하는 것이 좋습니다.

NTP 서버를 읽어서 RTC 모듈 DS1307에 현재 시간 세팅하기

프롬프트

file: ai-9-7-UseSDCard-rtc-dht22.md

  프롬프트 영역으로 마우스를 옮기고 Copy 버튼을 누르면 클립보드에 프롬프트의 내용이 복사됩니다.
( 여기에 'ai-patterns.md'의 내용을 넣으세요. )

components:
- 센서읽기_앞부분

- DHT22:
    이름: dht
    pin_gpio: P.DHT

- i2c:
    scl_pin: P.SCL
    sda_pin: P.SDA

- spi:
    sck_pin: P.SCK
    mosi_pin: P.MOSI
    miso_pin : P.MISO

- sdcard_mount_make_next_file:
    cs_pin: P.CS
    file_prefix: temphum
    file_digits: 3
    file_ext: json

- rtc

- date_time_str_func

def read_sensor():

    data = dht.read()
    p = Parse(data)

    print(f"{p.name}> 온도: {p.value[1]}°{p.temp_unit}, 습도: {p.value[0]}%")

    data['Time'] = date_time_str_func()

    ok, msg = sd.append_json(data)
    if not ok:
        print(f"SD 카드 기록 실패: {msg}")
    else:
        print(f"데이터 기록 완료: {data}")

components:
- 타이머:
    이름: timer_sensor
    period: 5*1000
    callback: read_sensor

- 센서읽기_뒷부분

AI가 만든 코드

프로그램: 9_8_usesdcard_rtc_dht22.py

import json
from timerrun import TimerRun
from run import Run
from parse import Parse
import pinno as P
from machine import Pin, I2C, SPI
from dht22sensor import DHT22Sensor
from usesdcard import UseSDCard
from ds1307 import DS1307

# Run 객체 초기화
run = Run()

# DHT22 센서 초기화
dht = DHT22Sensor(pin_gpio=P.DHT)

# I2C 초기화
i2c = I2C(0, scl=Pin(P.SCL), sda=Pin(P.SDA))

# SPI 초기화
spi = SPI(1, sck=Pin(P.SCK), mosi=Pin(P.MOSI), miso=Pin(P.MISO))

# SD 카드 초기화 및 파일 생성
sd = UseSDCard(spi_bus=spi, cs_gpio=P.CS)
ok, msg = sd.mount_sdcard()
if not ok:
    print(f"SD 카드 마운트 실패: {msg}")
else:
    ok, msg = sd.make_next_file(prefix='temphum', digits=3, ext='json')
    if not ok:
        print(f"SD 카드 파일 생성 실패: {msg}")
    else:
        print(f"SD 카드 파일 생성 완료: {sd.get_file()}")

# RTC 초기화
rtc = DS1307(i2c=i2c) # 책에서 rtc = DS1307(i2c)는 오류임. 

# 날짜와 시간 문자열 생성 함수
def date_time_str_func():
    """
    RTC에서 현재 날짜와 시간 정보를 가져와 문자열로 반환
    """
    year, month, day, hour, minute, second, week_day, sub_second = rtc.datetime
    date_time_str = f'{year:04d}-{month:02d}-{day:02d} {hour:02d}:{minute:02d}:{second:02d}'
    return date_time_str

# 센서 데이터 읽기 및 기록 함수
def read_sensor():
    """
    DHT22 데이터를 읽고 SD 카드에 기록
    """
    try:
        # DHT22 데이터 읽기
        data = dht.read()
        p = Parse(data)

        # 출력 정보
        print(f"{p.name}> 온도: {p.values[1]}°{p.temp_unit}, 습도: {p.values[0]}%")

        # 시간 정보 추가
        data['Time'] = date_time_str_func()

        # JSON 형식으로 SD 카드에 기록
        ok, msg = sd.append_json(data)
        if not ok:
            print(f"SD 카드 기록 실패: {msg}")
        else:
            print(f"데이터 기록 완료: {data}")
    except Exception as e:
        print(f"센서 읽기 실패: {e}")

# 타이머 설정
timer_sensor = TimerRun(period=5 * 1000, callback=read_sensor)
run.add(timer_sensor.run)

# 메인 실행
def main():
    while True:
        run.run()

if __name__ == '__main__':
    main()

Copyright © 2025 ·로그인