Raspberry Piで始める電波ガーデニング

f:id:karaage:20150615064223j:plain:w640

電波ガーデニング2016

 2016年にもう少しパワーアップした形で電波ガーデニングを実施しています。よろしければ下記記事も御覧ください。


電波ガーデニングとは

 勝手に命名しました。最近家庭菜園を始めたのですが、やっぱり電波な感じにしたいよね、ICTとか流行りのIoTとか活用したいよね、むしろIoP(Internet of Plants)だよね。ということで家庭菜園を電波な感じにしてみることにします。
 海外では、ArduinoをベースとしたGarduinoって電波な栽培セットがあったりします。また、Garduino製作者は、最近KickstarterでGrowerbotというGarduinoを更に進化させたプロジェクトも始めています。

 これを使ってみるのも面白そうですが、ちょっとお高いし輸入すると時間も手間もかかるので、自作してみようかと思います。使用するマイコンは、Arduinoでも良かったのですが、ネットやカメラの接続考えてRaspberry Pi使うことにしました。同じことしても面白くないですしね。目指すところは家庭栽培の完全自動化とエンタメ性向上です。

 とりあえず今回はスマホ(iPhone等)で自宅の栽培の様子を以下のように観察することと、1時間おきの自動撮影にチャレンジしてみます。

f:id:karaage:20150617233805j:plain:w640

電波ガーデニングセットアップ

 まずは家庭菜園の様子を、動画でストリーミング再生してどこからでも見られるようにするのと、定点観測して毎時間写真を保存するようにしましょう。

必要なもの

Raspberry Pi 2 Model B

Raspberry Pi 2 Model B

Raspberry Pi 2。別に2じゃなくてもOKですが新しいのが好きなので


カメラモジュール


microSDカード


BUFFALO 11n対応 11g/b 無線LAN子機 親機-子機デュアルモード対応モデル WLI-UC-GNM2

BUFFALO 11n対応 11g/b 無線LAN子機 親機-子機デュアルモード対応モデル WLI-UC-GNM2

WiFiモジュール。LANケーブルが届けば不要


【純正品】Apple iPadmini/iPad/iPhone/iPod用 10W USB電源アダプタ 販売店保証書付 バルク品
電源アダプタ。


USBケーブル。タイプAオス- マイクロタイプBオスのもの


Raspberry Pi B+ (Plus) 専用ケース RS製 (Black)

Raspberry Pi B+ (Plus) 専用ケース RS製 (Black)

ケース。写真だと判りにくいですが、カメラもちゃんと装着できるのでオススメです。


 続きは徐々にマニアックになってくるので興味ある人だけ続きを読むをクリックください。

Raspberry Pi 2 セットアップ

 最初にRaspberry Pi 2をセットアップしましょう。以下らへんの記事を参照ください。


動画ストリーミング

 カメラ映像を外に飛ばすために、動画ストリーミングを行いましょう。以下の記事の「動画ストリーミング」の項目を設定すればOKです。あとは「インターネット経由でロボット操作」を参照にルータのポート 9000を解放すれば、外部からでもカメラ動画をリアルタイムで見られるようになります。

 ルータのグローバルIPを調べた後、以下のようにブラウザに打ち込みましょう。例えば グローバルIPが 111.111.111.111だったときは以下のようにしましょう。

http://111.111.111.111:9000/

定点観測スクリプト

 1時間毎にカメラを撮影します。

カメラ撮影スクリプト

 昔デジカメを作った時作成したソフトを改造しました。

以下でファイル編集

$ vi shutter.py

 中身は以下をコピペしましょう。

# -*- coding: utf-8 -*-
import subprocess
import picamera
import os
from time import sleep

shutter_numb = 0
home_dir = '/home/pi/photo'

cmd ="sudo /etc/init.d/stream stop"
subprocess.call(cmd, shell=True)

def cameraLoad():
    global shutter_numb
    filename = os.path.join(home_dir, 'camera.set')
    fp = open(filename)
    tmp_shutter_numb = fp.readlines() 
    tmp2_shutter_numb = tmp_shutter_numb[0].rstrip()
    shutter_numb = int(tmp2_shutter_numb)
    fp.close()
 
def cameraSave():
    filename = os.path.join(home_dir, 'camera.set')
    fp = open(filename, 'w')
    fp.write(str(shutter_numb))
    fp.close()

cameraLoad()

shutter_numb +=1
cameraSave()

filename = os.path.join(home_dir, str(shutter_numb) + '.jpg')
photofile = open(filename, 'wb')
print(photofile)

with picamera.PiCamera() as camera:
    camera.resolution = (1024,768)
    camera.start_preview()
    sleep(1.000)
    camera.capture(photofile)

photofile.close()

#cmd ="tw 写真撮れたよ〜 --file=sample.jpg --yes"
#subprocess.call(cmd, shell=True)
cmd ="sudo /etc/init.d/stream start"
subprocess.call(cmd, shell=True)


動画ストリーミングしていない場合は、9,10行目と最後の2行にある以下の行に関してはコメントアウトしてください(そのままでも多分動くけど)。

cmd ="sudo /etc/init.d/stream stop"
subprocess.call(cmd, shell=True)

cmd ="sudo /etc/init.d/stream start"
subprocess.call(cmd, shell=True)

 スクリプト使用する前に、事前準備として以下を実行ください。

$ mkdir /home/pi/photo
$ echo 0 > /home/pi/photo/camera.set

 後は、以下を実行すると撮影できます。 /home/pi/photo 以下に数字付きのjpgファイルが増えていきます。

$ python shutter.py
cronで定期的な撮影実行

 これで撮影できるようになったので、後はこれを定期的に自動実行するようにしましょう。定期的なコマンドの実行はLinuxの場合、cron(クーロン)を使うのが定石です

 最初にcronを編集するエディタを変更しましょう。おまじないみたいなものです。下記コマンドの後[3]を選択するとvimで編集できるようになります。

$ sudo update-alternatives --config editor


 下記コマンドでcronの設定を変更できます

$ crontab -e

 エディタが開くので、毎時10分に撮影実行するために一番下の行に下記内容を追記してやります。

10 * * * * python /home/pi/script/shutter.py


 ちなみに10分毎に撮影したい場合は以下です

*/10 * * * * python /home/pi/script/shutter.py


 設定したら以下のコマンドで再起動。

$ sudo shutdown -r now

 うまくいけば指定した時間毎に写真が撮影されて /home/pi/photo以下に数字付きで保存されていきます

設置例

 私の場合は、以下のように窓にテープで固定してやりました。各自やりやすいように固定するのがよいと思います。

f:id:karaage:20150615064223j:plain:w640

今後の予定

 実装したい機能は以下。予定は未定。

  • 水やり自動化・もしくは遠隔地からの水やり
  • 植物の生育データログ取得
  • 育成日記自動生成

 水やりはまさに以下のようなイメージ。ぜひ公開して欲しいな。

参考サイト

 上記2つのサイトはRaspberry Piでのcron設定の参考にしました。

関連記事