• Skip to primary navigation
  • Skip to main content

IoTmaker

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

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

AI 프롬프트 실습 9-1: 센서 클래스를 위한 템플릿 프롬프트

마이크로파이썬 > AI 프롬프트

프롬프트

file: ai-9- 1-센서-클래스-템플릿.md

  프롬프트 영역으로 마우스를 옮기고 Copy 버튼을 누르면 클립보드에 프롬프트의 내용이 복사됩니다.
patterns:
    sensor_class:
        설명: 센서 클래스 템플릿
        방법: |
            나중에 전달 받을 다음 argument를 이용하여 마이크로파이썬 클래스를 만들어야 함.
            - {{센서_모델}}: DHT22,BH1750,DS18B20 등
            - {{클래스_이름}}: 지정하지 않으면 {{센서_모델}}+'Sensor'
            - {{pin_type}}: pin_gpio,i2c_bus,spi_bus 중에서 선택됨.
                        여기서 지정한 값을 {{pin_argument_name}}으로 사용함
            - {{센서_모델}}: DHT22,BH1750,DS18B20 등이 옴.
                        지정한 센서 모델에 따라 적합한 라이브러리를 찾아서 클래스를 만들어야 함.
            - {{key_1}}: 첫 번째 key
            - {{key_2}}: 두 번째 key
            - {{temp_unit}}: C,F,None
            - {{라이브러리}}: import 문장이 오면 그대로 프로그램에 사용함.

            Docstring은 :param pin_gpio: 형식으로 하고, 설명은 한글로 함.
        코드: |

            from machine import Pin ...
            import time
            여기서 필요한 라이브러리 import해야 함.

            # file: {{클래스_이름}}의_소문자+'.py'
            class {{클래스_이름}}:  

                __init__(self,*, {{pin_argument_name}},ser=None) -> None:

                    여기서 {{pin_argument_name}}은 pin_gpio 또는 i2c_bus 또는 spi_bus임.

                    만약 {{pin_argumnet_name}}이 pin_gpio이면:
                        self.pin_or_bus = Pin(pin_gpio, Pin.IN ...) 이런 방식으로 Pin 인스턴스 만들어야 함.
                    아니면:
                        self.pin_or_bus = 전달된 i2C_bus나 spi_bus       

                    self.sensor_instance = ...   self.pin_or_bus를 사용해서 센서의 인스턴스를 만듬.

                    self._model:str     = {{센서_모델}}    
                    self._model_ser:str = f"{self._model}_{ser}" if ser else self._model

                    센서를 읽어서 버스에 몇 개의 센서가 달렸는지 확인해야 함.
                    self._sensor_count:int  = 1 또는 센서 버스에서 발견된 수      

                    self._names:list[str] = []
                    self.name_first      = True

                    self._keys:list[str]   = [] # 예 'Temperature','Humidity' 등 센서모델에 따라 다름.
                    self._values:list[any] = [] # 센서에서 읽은 값,특별한 지시 없으면 소숫점 1자리
                    self._sensor_id       = [] # OneWire의 경우 센서 고유 ID
                    self._sensor_id_hex   = [] # OneWire의 경우 센서 고유 ID HEX값
                    self._dict            = {} # 돌려줄 센서 데이터 

                    try: 
                        여기서 센서에 접속해 봐야 함.
                        버스에 연결된 센서가 없으면 오류 메시지 출력하고, 센서 값을 None으로 처리함.
                    except OSError as e:
                        장치가 연결이 잘못되었다는 내용 출력,센서 값을 None으로 처리함.

                def make_data(self):
                    여기서 센서를 읽고 데이터를 처리함.
                    exception 오류 처리해 줘.
                    try:
                    except OSError as e:
                        self.값을 None으로 처리함. 

                # 이 함수는 <절대코드>이므로 바꾸지 말 것.
                def make_dict(self):
                    if self._model == 'DS18B20':
                        for i in range(self._sensor_count):
                            sensor_data = {
                                "Id": self.hex_id(self._sensor_id[i]),
                                self._keys[0] = self._values[i]  # i번째 센서의 값을 처리함.
                            }
                            this_name_ser = self.model_ser+'_'+str(i+1) if self._sensor_count > 1 else self.model_ser
                            self._dict[this_name_ser] = sensor_data
                    else:
                        sensor_data = {}
                        for i in range(len(self._keys)):
                            sensor_data[self._keys[i]] = self._values[i]  # i번째 센서의 값을 처리함.

                        self._dict[self.name_ser] = sensor_data                    

                def read(self):
                    self._values = []
                    self.make_data()  # 센서 데이터를 먼저 읽음.
                    self.make_dict()
                    만약 {{temp_unit}}가 지정되었으면 다음을 추가함. {{temp_unit}}가 None이면 추가하지 않음.
                    self._dict['TempUnit'] = "{{temp_unit}}" 

                    return self._dict        

                def hex_id(self,id):        
                    return  binascii.hexlify(id).decode('utf-8') 

앞의 patterns:에서 정의된 내용을 참조하여 아래에 지정된 components:를 마이크로파이썬 코드로 만들어 줘.
마이크로파이썬 코드 생성 후, 함수는 앞쪽으로 옮겨서 오류가 발생하지 않게 해 줘.

Copyright © 2025 ·로그인