프롬프트
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:를 마이크로파이썬 코드로 만들어 줘. 마이크로파이썬 코드 생성 후, 함수는 앞쪽으로 옮겨서 오류가 발생하지 않게 해 줘.