LoginSignup
2
0

Raspberry Piでトマトの定期監視

Last updated at Posted at 2023-07-16

やること

娘が幼稚園から持ち帰ってきたトマトの成長を自動的に記録します。
具体的には、Raspberry Piで10分ごとにトマトを撮影し、LINE BOTとして撮影した画像を投稿します。

これでいつでもどこでもLINEからトマトの成長を観察でき、振り返ることができます。

image.png

画像はイメージです。

セットアップ

用意するもの

  • Raspberry Pi 4B
  • カメラモジュールV2
  • SDカード
  • USBケーブル タイプC
  • 百均で買ったアクリルケース(任意)
  • 百均で買ったタブレット立て(任意)

アクリルケースはラズパイを持ち運びやすくするのと、カメラモジュールをセロハンテープで貼り付けるために使いました。
タブレット立ては上下の角度を調整するために使いました。

C91B9A8A-8A4A-419C-A76C-6BCD0276B6E0.jpg

OS

無難にRasbianOSをRasberry Pi Imagerでインストールしました。

カメラ

  1. sudo raspi-configでカメラを有効化
  2. /boot/config.txtにモジュールを追記
/boot/config.txt
dtoverlay=im219
  1. reboot
  2. libcamera-helloで確認

参考: ラズパイ新OS「Bullseye」でのカメラモジュールの使い方|libcameraの使い方も詳しく解説

大事なことは libcameraを使うこと。raspi-steelではない。
よく参考書とかWebに載っているのはraspi-steel。しかし、今はlibcameraに置き換わったようです。2021年頃から?

-bash: raspistill: command not found [closed]

プログラムの内容

写真を撮影する

take-picture.sh
#!/bin/sh
# 撮影してファイルパスを出力
# libcameraの出力は/dev/nullへ捨てる
DATE=$(date '+%Y%m%d_%H%M%S')
FILENAME=/home/u1and0/Pictures/${DATE}.jpg
# FILENAME="/home/u1and0/Pictures/test.jpg"

# タイムラプスを撮影
# 30秒間に渡って3秒ごとに撮影
# libcamera-still --width 1280 --height 960 -t 30000 --timelapse 3000 -o /home/u1and0/Pictures/${DATE}%02d.jpg

libcamera-still --vflip --width 1280 --height 960 -o ${FILENAME} 2> /dev/null &&\
    echo ${FILENAME}
  • --vflipで上下反転させます。(カメラモジュールの都合でアクリルケースに逆さまにしか貼り付けられなかったので。)
  • --width, --heightで解像度を調整します。デフォルトだと1MB超えの写真で、無駄にでかいので。
  • 2> /dev/nulllibcamera-stillの出力を捨てます。
  • 撮影に成功したらファイルパスを出力します。

LINEへ画像を投稿する

事前にLINEアクセストークンを取得します。
Messaging APIの概要

post-picture-line.sh
#!/bin/sh
# Usage
# ./post-picture-line.sh filepath

ACCESS_TOKEN="*******"
MSG="現在のトマトの様子をお届けします。"
PATH="$1"
URL="https://notify-api.line.me/api/notify"

# 何故かcurlでは`not found`が出てしまうので、curlのフルパス指定した
/usr/bin/curl -fsSL -X POST\
    -H "Authorization: Bearer ${ACCESS_TOKEN}"\
    -F "message=${MSG}"\
    -F "imageFile=@${PATH}"\
    ${URL}

ファイルパスの前の"@"は必須です。

参考: Messaging APIリファレンス

組み合わせる

撮影して、LINEへ投稿するようにパイプで接続します。

$ take-picture.sh | xargs post-picture-line.sh

take-picture.shで撮影したファイルのフルパスを出力します。
xargsで受け取り、post-picture-line.shで画像ファイルをLINEへポストします。(xargsで一旦受け取ることが大事です。)

cronへ登録する

crontab -eでエディタを開いて下記追記します。

crontab
*/10 4-19 * * *   /home/u1and0/Program/sh/take-picture.sh | xargs /home/u1and0/Program/sh/post-picture-line.sh

適宜プログラムを保存したパスに書き換えてください。
これで4時から19時50分までの間に10分ごとに撮影し、撮影のたびにLINEに画像を送信します。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0