前回の記事で、ラズパイのカメラのセットアップをやりました。
ラズパイでカメラ撮影といっても、ネットで調べると色々な方法があるようです。
色んな用語が出てきて、なんのことやら。
となるのが、ラズパイ初心者。
今回は多少のプログラミングで定刻撮影が出来たので
その方法を書いておく。
[前提]シェルスクリプトを使用する。
当初、全て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が出来たので
編集していく。
- ラズパイ直接触って編集しても良し。
- VNC経由でノートPCからラズパイ上で編集しても良し。
- 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
個人的解釈で
- このファイルはシェルスクリプトですよ。の宣言
- ファイル名を”date+日付”とする。
- 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スクリプトの一行目に記述する
シェバンは関係なかったようです。
コメント