Raspberry PiとセンサーとWebAPI使って自動で植木鉢に水やりたいらしい <準備編>

## 書いてね

> IoTで遊んでるから、**Qiitaに書いてもいいよ**

と、会社で謎の**PPT（注：パワーポイント。「まーくだうん」ではない。）**を渡された。

> ありがとう。でも、自分で書けば？

と返したが、

> 作るのは楽しいけどblog書くのは面倒なんだよね。

いやいや。。。。**そこみんな一緒じゃない！？**

と、まったく釈然としないまま書くことに。。。なんで！？

というわけで、謎のゴーストライター（？）登場です。

# モチベーション→自動で植木鉢に水やりたい

ということのようです。

> あ、そう。

と反応しましたが、PPTには下記のように書いてあります。

- 水やりを自動で行いたい。（世には朝顔やひまわりを育てて観察するという教育があり、いつしか子よりも親が熱心に観察するという奇妙な出来事があり（略））
- 植木鉢を車に積んでの帰省は・・（略）

こんなん、いちいち**PPT**で書くなよほんとに。

## 機能

というわけで、読み進めると、下記のような感じにしたいらしいです。

### 自動水やり

基本的に、定期的に水をあげる。
でも不要なときまで水をあげるのはエコではないので、下記のときは水をあげない。

- 雨または雪なう。または、これから雨か雪になるとき（天気APIを使って監視。降水確率80%以上でなければ、半分の量をあげる）
- 土がまだ乾いてないとき（土壌センサーで監視。乾いたらユーザーに通知）
- タンクが空のとき（どっちにしろあげらんないけど、モーター動かさないという意味ね）

### リモート水やり

離れた場所のスマホとかからリモートで水をあげられるようにしたいらしいです。

> そんな気まぐれであげないで！！

とは思いました。

## システム構成

こんな感じね。

![構成図](http://img.dfm.lrv.jp/water1/img1.png)

ここだけPPT便利ですねw

## つかうもの

### 材料（ハード）

- RaspberryPI B+ ×1
- リレー（5V1A）×1
- ジャンパー線×10
- ブレッドボード（小さくてもよい）×1
- 電動ポンプ（自動停止機能がないもの）×1
- 乾電池（単1×2）
- ポリタンク×1（またはバケツなど）
- [湿度センサ](http://www.dfrobot.com/wiki/index.php?title=Moisture_Sensor_%28SKU:SEN0114%29)×2（一つは土壌に、もうひとつはタンクに）
- ADCｘ1（2ch以上）（上記センサからの信号変換用）

> 最近湿度センサーよく見るなぁ。。[『Web技術でハードウエア制御』 by 岩永さん](http://www.slideshare.net/YoshihiroIwanaga/web-technology-html5-conference-2015)
> あれ？Raspberry PiってADCついてないの?

### WebAPI（天気情報を取得するため）

天気によって、という機能をぶち上げた手前、WebAPIで天気情報を取得するということをやりたいようです。
[MSN天気のAPI](http://weather.service.msn.com/find.aspx)を利用するようです。

例えば、横浜の天気、下記URLで取れるらしい。

> http://weather.service.msn.com/data.aspx?weadegreetype=C&culture=ja-JP&wealocations=wc:JAXX0099

結果

```.txt
<weatherdata xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<weather weatherlocationcode="wc:JAXX0099" weatherlocationname="神奈川県 横浜" zipcode="" weathercityname="横浜" url="http://www.msn.com/ja-jp/weather/today/横浜,神奈川県,日本/we-city-35.467,139.622" imagerelativeurl="http://wst.s-msn.com/i/ja/" degreetype="C" provider="Foreca" attribution="提供 Foreca" attribution2="© Foreca" lat="35.4666901" long="139.6218414" timezone="9" alert="" entityid="37255" encodedlocationname="%e7%a5%9e%e5%a5%88%e5%b7%9d%e7%9c%8c+%e6%a8%aa%e6%b5%9c">
<current temperature="18" skycode="28" skytext="曇時々晴" date="2015-02-23" observationtime="16:00:00" observationpoint="Tokyo International Airport" feelslike="18" humidity="68" winddisplay="風向: 南 / 風速: 6 m/s" day="月曜日" shortday="月" windspeed="6"/>
<forecast low="" high="22" skycodeday="29" jpskycode="72" skytextday="晴時々曇" date="2015-02-23" day="月曜日" shortday="月" precip="20"/>
<forecast low="7" high="14" skycodeday="26" jpskycode="26" skytextday="曇り" date="2015-02-24" day="火曜日" shortday="火" precip="10"/>
<forecast low="5" high="13" skycodeday="30" jpskycode="60" skytextday="晴のち曇" date="2015-02-25" day="水曜日" shortday="水" precip="10"/>
<forecast low="6" high="9" skycodeday="39" jpskycode="52" skytextday="曇時々雨" date="2015-02-26" day="木曜日" shortday="木" precip="90"/>
<forecast low="5" high="13" skycodeday="28" jpskycode="63" skytextday="曇のち晴" date="2015-02-27" day="金曜日" shortday="金" precip="30"/>
<toolbar timewindow="60" minversion="1.0.1965.0"/>
</weather>
</weatherdata>

```

確かに使えそう。

> jsonじゃねーのかよ。。。

### リモートでRaspberry Piを制御するためのフレームワーク

リモートでの水やりのために、下記フレームワークを使ってRaspberry Piを遠隔制御するようです。

[webiopi](https://code.google.com/p/webiopi/wiki/INTRODUCTION)

そして、PPTには、おもむろに下記サイトのリンクが。

[『WebブラウザからRaspberry Pi を操作する（WebIOPi 利用）』by hiramine.comさん](http://www.hiramine.com/physicalcomputing/raspberrypi/webiopi_callmacro.html)

> てか、まんま出来るじゃん！

## 続くようです。

今回、PPTには、ここまでしか書かれていませんでしたが、
続きがあるようです。。。。えー

> 部品買ってきたら渡すよ

と言われましたが、さすがにそこは丁重にお断りしました。
だって、自分がやるなら違う構成にするし。。w

というわけで、開発に着手してしまったみたいなので、私もちょっとつきあってみまることにします。
進捗あったら更新します。（またPPTで渡されるのでしょう。。。）

> ちゃんと作れよ！