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

codingart(66)
Published in
#kr
Words
498
Reading
3 min
Listen
Play
8y

DHT11 센서 Raspberry Pi 보드 배선

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

noname01.png

DHT11 온습도계를 직접 배선하기 위해서는 별도의 전류제한 저항이 필요하므로 인해서 PCB 와 납땜 작업이 수반되므로 아예 DHT11 센서 구매 시에 사진에서처럼 PCB 형으로 구입하도록 하자. 전원은 5V 또는 3.3V 어느 것을 사용해도 좋다. 아울러 전원과 GND 는 2개씩 있으므로 어느 것을 사용해도 무방하다.

Adafruit 사의 DHT11 센서는 온습도를 동시에 측정하는 기상용 관측용 센서로서 온도 범위 0∼50°C 상대습도 범위 20∼80% 범위에 걸쳐 측정이 가능하다. DHT11 온습도 센서가 아날로그 센싱을 하겠지만 Raspberry Pi의 디지털 핀과의 인터페이스를 통해서 측정된 결과 실수형 수치 값 데이터를 디지탈 펄스 형태로 넘겨준다.

Adafruit_DHT 라이브러리 모듈 Istallation

라즈베리 파이3에서 파이선으로 온습도 측정을 위한 코딩 작업을 하려면 우선 아래의 화면에서처럼 GITHUB에서 필요한 Adafruit 사의 라이브러리 파일을 다운받아 설치 작업을 해야 한다. 이 작업은 라즈베리 파이3에 기본으로 설치되어 있는 LXTerminal을 사용하도록 한다. 아울러 무슨 라이브러리 모듈을 설치하더라도 라즈베리 파이에서는 다음 두 작업을 무조건 미리 해 두자.
$ sudo apt-get update
$ sudo apt-get upgrade

대개 upgrade 작업 실행에 시간이 좀 걸린다. 이 작업이 끝났으면 복격적으로 Adafruit_DHT11 라이브러리 모듈 설치 작업에 들어가자.

명령 실행에 따라 다소의 시간이 걸릴 수 있으며 대소문자를 포함 철자를 정확하게 입력하도록 하자.

noname02.png

입력을 좀 더 편하게 하려면 아래의 url 주소에서 DHT11을 제조 판매하는 Adafruit 사 홈페이지를 검색해서 이용하도록 하자.

noname03.png

adafruit 홈페이지의 Download file 단계에서부터 복사 후 라즈베리의 LXTerminal 창에 붙이기하여 실행하면 된다. 그 내용은 앞서 설명한 내용과 동일하다.

noname04.png

설치 작업이 완료되었으면 home/pi 폴더 밑에 Adafruit_Python_DHT 폴더가 있는지 확인하고 반드시 한번 rebooting 작업을 하도록 하자.

예제 코드 simpletest.py 편집

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

noname05.png

두 번째 줄에서 DHT22를 DHT11로 수정한다.
세 번째 줄은 지우고 네 번째에서 #를 지운 후 현재 배선도대로 pin 번호를 GPIO 4번으로 수정한다.

일곱 번째와 아홉 번째 줄의 print 출력에서 괄호를 사용하고 있는데 파이선3을 사용 중이면 그대로 두고 파이선2 이면 괄호를 지우도록 한다. 파이선 버전의 문제인 듯하다.

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

noname06.png

코드를 실행시키면 다음과 같이 셸(shell)에 빨간 박스 친 한 줄의 결과가 출력 된다. 10월 26일 비가 예보되어서 그런지 습도가 54%로 다소 높은 편이다.

noname07.png

코드가 워난 단순하므로 지속적으로 온습도 측정을 하도록 약간의 부띠끄 작업을 하도록 한다. 일정 간격 시간 지연을 줄 수 있도록 time 라이브러리를 불러들이자. time 라이브러리는 라즈베리 파이 OS 설치 시 default 로 설치된다.
time 라이브러리를 사용하여 time.sleep(2) 명령을 실행하면 이는 아두이노의 시간 지연 delay(2000) 에 해당한다. 즉 2초간 시간 지연이 이루어진다.
아울러 아두이노의 void loop { }에 해당하는 while True 문을 설정하여 아두이노 loop()처럼 온습도 측정을 무한 반복하도록 세팅한다.
while True: 의 콜론(:) 콜론 다음 줄부터는 파이선 문법에 따라 indentation 이 적용된다.

noname08.png

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

noname09.png