아두이노프로세싱 프로그래밍

라즈베리 파이3 Adafruit DHT11 온습도 센서 측정 파이선3 코딩

coding art 2017. 5. 26. 16:14
728x90



























_______Up to here, advertizaton area____


라즈베리 파이3에서 Adafruit 사의 온습도 센서 DHT11을 사용하여 온습도를 측정해 보자.
다음은 PCB에 설치되어 있는 DHT11 온습도계를 사용하는 배선도이다.


DHT11 온습도계를 직접 배선하기 위해서는 별도의 전류제한 저항이 필요하므로 인해서 배선 수가 늘어날 우려가 있다. 5V 전원과 GND 는 하나 이상 있으므로 변경해도 무방하다.

Adafruit 사의 DHT11 센서는 온습도를 동시에 측정하는 기상용 센서로서 온도 범위 0∼50°C 상대습도 범위 20∼80% 범위에 걸쳐 측정이 가능하다. 아울러 DHT11 센서의 특징의 하나는 디지털 신호 형태로 측정 결과 치를 제공한다는 점이다. 라즈베리 파이 컴퓨터는 무려 40개에 달하는 인터페이스 핀들이 있으나 아날로그 전압 신호를 직접 받을 수 있는 핀이 전무하다.

라즈베리 파이3에서 파이선으로 온습도 측정을 위한 코딩 작업을 하려면 우선 아래의 호면에서처럼 GITHUB에서 필요한 Adafruit 사의 라이브러리 파일을 다운받아

설치 작업을 해야 한다. 이 작업은 라즈베리 파이3에 기본으로 설치되어 있는 LXTerminal을 사용하도록 한다.

인터프리터 작업 수행에 따라 다소의 시간이 걸릴 수 있으며 대소문자를 포함 철자를 정확하게 입력하도록 하자. 라즈베리 파이에서 이러한 류의 작업은 결국 윈도우즈 사용에 있어서 on OFF 시에 수반되는 지정 소프트웨어들에 대한 업데이트 과정으로 보면 될 것이다. 





※ 참고로 만약 아래의 DHT11 파이선 코드 실행 시에 No modeule named "Adafruit+DHT"   에러가 뜬다면 이는검은색 터미날 창에서의 모듈 설치 과정이 불완전하게 처리된 경우입니다.많은 분들이 이 에러로 댓글 질문을 해 오시고 있습니다. 다시 설치 작업을 하면서 혹 과정 중간에 에러 메세지가 섞여 있지는 않는지 주의 깊게 확인해 보시기 바랍니다. 그래도 Adafruit.DHT 모듈 설치 문제가 해결되지 않는다면 예비로 새로 깐 라즈베리 파이 SD 카드가 있다면 설치 작업을 다시 새로이 하고 코드를 실행해 봐야 할 듯합니다. 

.


스크린 상부나 하부에 설치된 탭에 설치되어 있는 폴더 아이콘을 사용하여 라즈베리 내 폴더에서 설치되어 있는 Adafruit_python_DHT 폴더를 찾아서 클릭하여 들어가 보자. example  폴더를 볼 수 있을 것이며 클릭하여 들어가도록 한다.
3개의 예제가 들어 있으며 이 중에서 simpletest.py를 클릭하여 사용하기로 한다. 화면 한 페이지를 좀 넘는 분량이긴 하나 # 처리된 설명을 지워버리고 줄여 버리면 다음과 같이 9줄의 코드만 남게 된다.


두 번째 줄에서 DHT22를 DHT11로 수정한다.
세 번째 줄은 지우고 네 번째에서 #를 지운 후 현재 배선도대로 pin 번호를 GPIO 4번으로 수정한다.
다섯 번째 줄에서도 #만 지우도록 한다.
일곱 번째와 아홉 번째 줄의 print 출력문에서 괄호를 사용하고 있는데 파이선3을 사용 중이면 그대로 두고 파이선2 이면 괄호를 지우도록 한다. 파이선 버전의 문제인 듯하다.

최종 프로그램을 살펴보자. 그다지 길지는 않으므로 이러한 작업이 번거로우면 IDLE편집기에서 입력해도 무방하다. 저장 후 RUN 시키도록 한다.






다음과 같이 빨간 박스 친 한 줄의 결과가 출력 된다. 상대 습도 17%로 워낙 건조한 날이라 측정 범위를 살짝 벗어난 듯하다.








코드가 워난 단순하므로 약간의 부띠끄 작업을 하도록 한다. 일정 간격을 시간 지연을 줄 수 이ㅛ도록 time  라이브러리를 불러들인다. 센서는 DHT11 로 지정하고 GPIO 핀 번호는 4번으로 유지한다.
while True 문을 설정하여 아두이노 loop()처럼 온습도 측정을 무한 반복하도록 세팅한다.






시간 지연은 2초로 설정하여 실행시키면 그림과 같은 출력 결과를 확인할 수 있다.













Simpletest_02.py


import Adafruit_DHT

import time


sensor = Adafruit_DHT.DHT11

pin = 4


while True:

    humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)


    if humidity is not None and temperature is not None:

        print('Temp={0:0.1f}*C  Humidity={1:0.1f}%'.format(temperature, humidity))

        time.sleep(2)

    else:

        print('Failed to get reading. Try again!')