PICK UP

RaspberryPiとYahoo!気象情報APIを使った雨量確認ガジェットを作ってみた

LAB

山崎 康平

明けましておめでとうございます!
2015年一発目の記事を担当することになりました山崎です。

降雨強度を確認できるガジェットを作ってみた

弊社にお越し頂いたことがある方はご存知かと思いますが、弊社オフィスは地下にあります
一応ドライエリアがあるため外の天気がわからなくは無いのですが、それでも雨が降っている事に気付かず、外に出てから傘を取りに戻る事が何度かありました。

dry_2

そこで今回はRaspberryPiを使って、オフィスに居ながらにして雨の降り具合を確認できるガジェットを作ってみました!

構成

IMG_7259

オフィス付近に雨が降っているか検知する手段ですが、今回はYahoo!が提供している気象情報APIを利用してみました。
降水強度を通知する方法は降水量の表示でよく見る”色”をフルカラーLEDを使って再現しています。

Yahoo! 気象情報APIを使ってみる

Yahoo! 気象情報APIは下記の事ができます。

指定した緯度経度の雨の強さを取得できるAPIです。
現在時刻の降水強度実測値から、60分後までの降水強度予測値を取得できます。

アプリケーションIDの取得

まずはじめにYahoo!のAPIを利用するのに必要なアプリケーションIDを取得する必要があります。
Yahoo!ディベロッパーネットワークのアプリケーションの管理よりアプリケーションを作成します。
※Yahoo! JAPAN IDでのログインが必要になります。

Yahooアプリケーションを開発

Yahooアプリケーションを開発2

確認画面の「登録」ボタンをクリック

Yahooアプリケーション登録完了

アプリケーションIDがメモできれば完了です。

緯度経度の取得

緯度経度はGoogleMap等で取得しましょう

GoogleMap緯度経度

緯度経度がメモできれば完了です。

API使ってみよう

APIリファレンスを参考にURLを作成してみます。

http://weather.olp.yahooapis.jp/v1/place?appid=[メモしたアプリケーションID]&coordinates=[メモした経度・緯度をカンマ区切りで]&output=json

※各パラメータはURLエンコードの必要な場合があります。
※緯度経度の順序がGoogleMapと逆なのでご注意下さい。

それでは、生成したURLにブラウザでアクセスしてみます。

weather.olp.yahooapis.jp v1 place appid dj0zaiZpPTRnSzh5V2N4c2FTTCZzPWNvbnN1bWVyc2VjcmV0Jng9ZTY  coordinates 139.690547 35.670931 output json

Feature配列: Property: WeatherList: Weather配列のRainfallが降水強度になります。
(実行時は残念ながら雨が降ってませんでしたので値が0です。)
レスポンスの内容については、APIリファレンスに詳細な記載がありますのでそちらをご覧くださいませ。

RaspberryPi側の実装

今回はRaspbian上にNode.jsで実装しましたのでその実装内容をご紹介いたします。

必要なもの

今回使用するLEDはアノードコモン(共通端子が+、各色の端子が-)で赤色2.0v、青色・緑色が3.2vのものになります。
使用する抵抗ですが、例えば電源はRaspberryPiの3.3vを利用し、LEDに20mA流す場合の抵抗値は下記計算式で算出することができます。

計算式: (電源電圧 – LED電圧) / LEDに流す電流 = LEDと直列につなぐ抵抗値 赤色: (3.3v – 2.0v) / 0.02A = 65Ω 青色・緑色: (3.3v – 3.2v) / 0.02A = 5Ω

今回は少し輝度を落とし、赤色には100Ω(13mA)を、青色・緑色には10Ω(10mA)を使用します。

回路図

回路図

IMG_7304

Node.jsのインストール

Raspbianのインストール直後はNode.jsがインストールされていませんので、RaspberryPi用に配布されている最新のバージョンをdpkgコマンドでインストールします。

http://node-arm.herokuapp.com/

$ wget http://node-arm.herokuapp.com/node_latest_armhf.deb
$ sudo dpkg -i node_latest_armhf.deb
$ node -v

Node.jsのバージョンが表示されれば完了です。

Node.js実装

まずは作業ディレクトリ内にNode.jsからRaspberryPiのIOを制御するためのnpmライブラリをインストールします。(今回はwiring-piというライブラリを利用しました。)

$ cd workspace
$ npm install wiring-pi

※コンパイルに3分程かかります。

インストールが完了したら、下記ソース内のappidとcoordinatesを設定すれば準備完了です。

※LEDに接続しているピンは7~9行目で設定していますので、必要に応じて変更してみてください。
※LEDの種類がカソードコモンの場合は47行目と48行目のコメントを入れ替えて下さい。


気象情報APIは1日50000リクエストまで利用可能です。今回は1分に一度(1日1440回)APIを叩くようにしていますので、API制限内でご利用頂けます。
Rainfallの値は気象庁の雨の強さと降り方を参考にしましたが、20mm/h以上降ればどしゃ降りだそうなので、20mm/h以上を赤色として全体の色を設定しています。

色は下記のように設定しています。
消灯 < 水色 < 青 < 緑 < 黄色 < 赤

実行する際、wiring-piは管理者権限で動作させる必要がありますのでsudoをつけて実行します。

$ sudo node weaterPi.js

雨が降っていなければLEDが消灯し、降っていれば振り具合に応じた色で光ったのではないでしょうか。

IMG_7269

起動スクリプトの設定

一連の動作確認ができたと思いますが、これを運用しようと思うと再起動のたびにRaspberryPi上でnodeコマンドを実行する必要があります。
そこで、RaspberryPiの電源が入ったら自動でアプリケーションが実行されるように設定してしまいましょう。

今回は起動スクリプトの設定からプロセスの監視まで全て対応してくれるpm2というnpmパッケージを利用します。

$ sudo npm install -g pm2
$ sudo pm2 startup ubuntu
$ sudo pm2 start weaterPi.js

これで起動時に自動で立ち上がり、もしアプリケーションのプロセスが停止した場合は自動的に再起動してくれます。

最後に

長々となりましたが、最後まで閲覧いただきありがとうございます!
今は現在の降水強度を色で表現しているだけですが、今後は音を鳴らしてみたり、降水強度の予測を元に雨が降りそうになったら通知するような仕組み等、まだまだ改良できる余地があると考えています。

以上、雨量確認ガジェットのご紹介でした。

もし弊社にご興味持っていただき遊びに来てみたいという方は、Wantedlyで承っておりますので下記からご応募頂ければと思います!

web_w_logotype_mono