【ラズパイ zero WH】シェルスクリプトを使ってカメラの定刻撮影をする。

趣味

前回の記事で、ラズパイのカメラのセットアップをやりました。

ラズパイでカメラ撮影といっても、ネットで調べると色々な方法があるようです。

色んな用語が出てきて、なんのことやら。
となるのが、ラズパイ初心者。

今回は多少のプログラミングで定刻撮影が出来たので
その方法を書いておく。

[前提]シェルスクリプトを使用する。

当初、全てPythonで作るものだと思っていた。
そうでもないことが判明。

事前調査にも勘違いが多くあったので
ラズパイ初心者が他の初心者に向けて、書いとく。

  • raspistillはラズパイが持っているカメラ用のコマンド。
  • crontabはUnix系OSでコマンド。

raspistillはラズパイOSがbusterでのコマンドで
現行のOSはbullseyeで使用できないので注意です。

crontabはUnix系OSの定時実行のスケジュール管理を行うために用いられるコマンドである。
だそうです。

私自身がこれで定刻撮影システムを作れたし
非常に簡単だった。

PythonのPの字すら出てこない。
残念なような、ラッキーなような。

色々と問題を解決して、目的は果たせたので
まずは及第点とする。

コマンドラインからshファイルを作る。

デスクトップにファイルを作成するのに

touchコマンドを使用するが

touch tescame.sh /home/pi/Desktopでは出来ず
一旦デスクトップに移動してからでないと出来なかった。

cd Desktop
touch tescame.sh

この2つの手順をする必要がある。

たまにGUIを使うため、test用のファイルはデスクトップに作っておきたい。

shファイルを編集する。

上の処理で、デスクトップ上にtescame.shが出来たので
編集していく。

  1. ラズパイ直接触って編集しても良し。
  2. VNC経由でノートPCからラズパイ上で編集しても良し。
  3. Teratermでviコマンドを使っても良し。

方法は若干違うがほぼ同じ意味。
2、3の方がコピペが使えたりするので便利。

私は3でやった。
なぜなら、開発している気分になれるから。
コピペは使うけどね。

前項の続きだと

pi@raspberrypi:~/Desktop $

の状態なので、『自分がDesktopに居る』という意味になる。

そこで

vi tescame.sh

でEnter。

ソースコードは下のを記入。

#!/bin/sh
fn=$(date +%Y%m%d%H%M%S)
raspistill -o /mnt/usb0/${fn}.jpg

個人的解釈で

  1. このファイルはシェルスクリプトですよ。の宣言
  2. ファイル名を”date+日付”とする。
  3. raspistillでマウントしたUSBのフォルダに保存する。

crontabを編集する。

次は定刻起動する設定をする。

crontab -e

でcrontabを編集するが、最初に編集方法?的な事を聞かれるので
nanoを選択した。

nanoもviと同じように編集できる。

一番下の行に先ほどのshファイルを定刻起動するように追加する。

*/10 * * * * /home/pi/Desktop/tescame.sh

これは、時間などの指定と、shファイルの場所の指定を意味します。

時間編集について補足

cronは「分 時 日 月 曜日 コマンド」の順に記述する。

  • 分 0~59
  • 時 0~23
  • 日 1~31
  • 月 1~12
  • 曜日 1~7(月:1、火:2~日:7)
  • 指定なし *

毎時5分なら「5 * * * *」
毎日10時なら「0 10 * * * 」

x分毎、x時毎なら*/xと表記するので、
上のソースだと10分毎にshファイルを実行する。
という意味になります。

nanoエディタの下に[^X]など書かれていますが
Ctrl+Xの意味になります。

Shiftではないので注意です。

cronの動作確認

動作確認は下記のコード

sudo /etc/init.d/cron status

緑字でactive(runnning)となれば、cronは動いています。

停止中はinactive(dead)

その時は

sudo /etc/init.d/cron start

逆に止める時は

sudo /etc/init.d/cron stop

cronのログ確認

ログ確認の準備

sudo vi /etc/rsyslog.conf

で表示される#cronの前の”#”を削除する。

:wqで保存終了してから

sudo /etc/rinit.d/rsyslog restart

ログ確認

tail -f /var/log/cron.log

10分毎の起動にしたので
23:00:01
23:10:01
と10分毎に/home/pi/Desktop/tescame.shと表記されています。

定刻起動はしているようですが、jpgが保存されていない場合は
実行権限の問題のようです。

sudo chmod 777 tescame.sh

としてあげる必要があります。

chmod 777とは読み書き実行のすべての権限を全てのユーザーに与えるコマンド。

最後は再起動して確認

sudo reboot

で再起動します。

写真の保存先をUSBにしていれば
USBのマウントもしておく。

これで電源の入っている限りcronが動いてて
crontabで設定した時間通り、写真撮影するシェルスクリプトを実行してくれます。

USBへの保存にしたのは
ラズパイの入ったSDへの直接の書き込みは無くせるので
延命になるはず!!

【追記】Pythonをcornで動かすには

Pythonスクリプトをcronで定期実行させる

この方の記事の、「最後に」のところが僕には正解でした。

Pythonスクリプトの一行目に記述する
シェバンは関係なかったようです。

コメント

タイトルとURLをコピーしました