라즈베리파이를 이용한 집 온도 모니터링 하는 방법

2017. 1. 9. 13:13공부

요즘들어 iot관련한 제품들이 대기업 중심으로해서 많이 나오고 있습니다.
오늘은 상대적으로 적은 비용으로 현재 우리집의 온도와 습도를 측정할 수 있는 방법을 알려드리려 합니다.

우선 이 사이트에 접속을 합니다.


https://thingspeak.com

여기에 접속을 하셔서 회원가입 후 로그인 해주세요.

회원가입이나 로그인을 하고 나면 채널 생성하는 메뉴가 있습니다. 채널을 생성한 후

필요한 정보들을 입력하고 저장을 해준다.

그리고 옵션중에 make public이있는데 이 설정을 체크해주면 로그인을 안하고 수치를 확인 할 수있다.




내 채널을 가면 Data Import가 있는데 api request항목의 주소를 긁어서

아래 코드처럼 작성해주면

실행할때 마다 해당 온도 값과 습도 값이 페이지에 올라가고 그걸 그래프로 뿌려주는 걸 볼 수 있다.

18번째 줄에 보면 if문으로 15번째에 걸러주고 있는데 그 이유는 해당 사이트에서 15번의 요청이 왔을때 1번 데이터를 받는 다는 룰이 있기 때문입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# -*- coding:utf-8 -*-
import Adafruit_DHT as dht
import time
import RPi.GPIO as GPIO
import urllib2 
 
pin = 13
 
GPIO.setmode(GPIO.BCM)
while True :
    h, temp = dht.read_retry(dht.DHT11, pin)
    print "temp={0:0.1f}c humidity = {1:0.1f}%".format(temp,h)
    time.sleep(1)
    
    
    html = urllib2.urlopen("https://api.thingspeak.com/update?api_key=내apiKey&field1="+str(temp)+"&field2="+str(h))
  
    i=i+1
    if  i%15==0:
        time.sleep(3)
   
cs


이제 이 소스를 라즈베리파이에서 돌리면 됩니다.

하지만 한번씩 계속 실행해줘야 하는 불편함이 있는데요. 이럴때는 라즈베리파이 쉘 스크립트를 이용해서 무한 반복을 시켜준다. 코드는 아래와 같다.

저는 파일명을 auto.sh로 만들었습니다. 저 코드의 뜻은 while을 이용해서 무한반복 시킬거다.

do다음의 내용은 어떤 명령어를 사용할 것인가를 명시해주면 됩니다.

그리고 sleep의 경우는 120초마다 한번씩 돌아간다는 뜻입니다.


스크립트 실행방법은 스크립트가 있는 경로에서 ./auto.sh를 해주면 실행이 된다.

하지만 그냥 하면 실행이 안되는데 그럴경우에는 chmod 777 auto.sh를 해서 모든 권한을 다 주면 정상적으로 실행이 가능하다.