pusuke0418’s diary

異常にマルチタスクな社内SEのブログ

Raspberry Piで雨降ってたらLED点滅させる

マンションの、家の中から雨の状況が確認しづらく、廊下からもわからなく、下までエレベータで降りたら雨が降ってたということが多かったです。

そんな中、RaspberryPiとYahoo!気象情報APIを使った雨量確認ガジェットを作ってみた | 株式会社バニーホップという情報がありました。

Raspberry PiとYahooのAPIを利用して近傍の雨量情報を取得し、雨量に応じてLEDを光らせるというもののようです。Yahooの利用方法からステップバイステップで紹介されていて、とてもわかりやすい。

そこではnode.jsとフルカラーLEDが利用されていましたが、倣って私は、pythonで単色LEDで作ってみました。まずは動いたので下記しました。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
import urllib
import json
import time
import RPi.GPIO as GPIO
import math
import datetime
import os

#ピンをセット。16番を利用。明るさ調整にPWMを利用
#pi(16番ピン)----抵抗-----LED-----pi(GND)の接続
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(16, GPIO.OUT)
p = GPIO.PWM(16, 120)
p.start(0)

while True:
   url = "http://weather.olp.yahooapis.jp/v1/place?"
   appid = "myappid"
   params = urllib.urlencode({"appid" : appid, "coordinates" : "経度,緯度", "output" : "json",})
   
  #データを取得、雨量の部分のみをrainfallに格納
   response = urllib.urlopen(url + params)
   f = response.read()
   jsondata = json.loads(f)
   rainfall = jsondata["Feature"][0]["Property"]["WeatherList"]["Weather"][0]["Rainfall"]

   #取得した値をファイルに書き込み(log取得的な)
   d = datetime.datetime.today()
   today = d.strftime("%Y%m%d")
   f = open("/home/pi/log/"+today+"_rain.txt", "ab")   
   f.write(str(datetime.datetime.now()) + "," + str(rainfall) + "\n")
   f.close()

   #雨が降っていればLED点滅
   if rainfall <= 0:
       time.sleep(180)
   else:
       for i in range(1,90):
          for dc in range(0, 30, 3):
             p.ChangeDutyCycle(dc)
             time.sleep(0.1)
          for dc in range(30, 0, -3):
             p.ChangeDutyCycle(dc)
             time.sleep(0.1)

だいたい3分おきくらいで取れるだろうというアバウトなものです。

で、狙いとしては雨が降っていればLED点滅の部分で、取得雨量に応じて明るさと変化の間隔を分岐で変えれば雨量もなんとなくわかるかも、というものがあります。それに応じてループ回数とPWMの動作を変えればよいかなと思ってますが、雨降ってるのがわかれば良いのでこのままになりそうです

テスト動作させてうまくいってそうであったので、supervisorに登録してデーモン化しておきました。ここは参考ページだと、pm2にあたる部分かな?