from picozero import DHTSensor
from time import sleep, localtime
start_time=localtime() #측정 시작시간 확인
print(start_time)
dht_sensor = DHTSensor(pin=0, model='DHT11')
f = open('temp002.csv', 'w')
f.write(f'Hour,Min,Second,Tmperature, Humidity\n')
while True:
temp=dht_sensor.temperature
print(temp)
sleep(0.5)
humi = dht_sensor.humidity
print(humi)
sleep(0.5)
cur_time=localtime()
f.write(f'{cur_time[3]},{cur_time[4]},{cur_time[5]},{temp},{humi}\n')
end_time=localtime() #측정 종료시간 확인
f.write(f'{end_time}\n')
f.close()
class DHTSensor(DigitalInputDevice): #온습도 센서
def __init__(self, pin, model='DHT11'):
super().__init__(pin)
self._model = model.upper()
if self._model == 'DHT11':
self._sensor = dht.DHT11(Pin(self._pin_num))
elif self._model == 'DHT22':
self._sensor = dht.DHT22(Pin(self._pin_num))
else:
raise ValueError("Unsupported DHT sensor model: {}".format(self._model))
def read(self):
self._sensor.measure()
self._temperature = self._sensor.temperature()
self._humidity = self._sensor.humidity()
@property
def temperature(self):
self.read()
return self._temperature
@property
def humidity(self):
self.read()
return self._humidity
def __str__(self):
self.read()
return "Temperature: {}C, Humidity: {}%".format(self._temperature, self._humidity)
온도와 습도를 측정해주는 센서
온도를 0~50도까지 측정 가능하고
습도는 20~80% 까지 측정이 가능함
DHT22 센서를 사용한다면 기온은 -40~80도 / 습도는 0~100%까지 측정가능함.
코드 작성 시 유의
pin 번호 확인
스펠링대소문자확인하기
온습도 센서와 라즈베리파이 pico의 +,-를 맞게 설치하였는지 확인하기
코드를 작성했다면, 실행을 바로 하지 말고, 라즈베리파이pico에 저장한 후 코드를 실행시키자.
위 코드를 작성하고 실행한다면 화면에 출력되는 첫번째 숫자는 현재 온도를 나타내고, 두번째 숫자는 습도를 나타낸다.
하지만, 온도와 습도를 한번 측정하고 프로그램은 종료된다. 그렇다면, 온도와 습도를 계속 측정하기 위해선 어떻게 해야할까?
바로, 반복문(while)을 사용하여 온도와 습도를 지속적으로 측정할 수 있다.
코드 작성 시 유의
while문을 사용할 때 콜론(:)을 사용했는 지 확인하기
while문 안에 코드를 실행하기 위해서 들여쓰기를 했는 지 확인하기
위 코드를 작성 후 실행시키면 온도와 습도를 계속해서 측정하는 것을 확인할 수 있다.
온도와 습도를 계속해서 측정하고 측정된 데이터 분석하기 위해서 엑셀파일의 형태인 csv파일의 형태로 바꾸기 위해선 어떻게 해야할까?
온습도 데이터를 엑셀파일의 형태인 csv파일의 형태로 바꾸기 위한 코드