作ってみた!ラズパイガジェット達はこちら

公式カメラモジュールで省電力「あんまり監視しないカメラ」を作ってみた!

スポンサーリンク
zeroと公式カメラモジュールv1.3 作ってみた

Raspberry Piと公式カメラモジュールで静止画の撮影は「raspistill」、そして動画撮影は「raspivid」、ストリーミングは「MJPG-streamer」というのが定番です。

そんな折り、友人から簡易の監視カメラを作れないか? と相談を受けました。

2018-10-07追記:一部/varを/etcと間違えて表記していたので修正しました。

省電力の監視カメラの相談

商売しているのですけど、普段は無人のカウンターに来客があるとピンポンとセンサーで音がなります。しかし、中で作業しているとスグに出られない場合などがあり、慌てて出てみると郵便だったり・・・、要件によってはもう一度何かを取りに戻ったり・・・。これが誰か分かれば慌てないから、というものでした。

 

だから、あまりたいそうなシステムなんて要らないし、そもそも防犯用でもない。

あっ、これならRaspberry Piで簡単に作れるなーと思ったわけです。
しかし、問題はずっとカメラで撮影するのは意味がありません。余計な電力を使ってしまうのも勿体ない。そもそも記録取るわけでも無いし、1日のうちに何回観るのかも高が知れています。

それ以上にADSL回線のためネットが遅いため、カメラごときにアクセスを奪われるのも避けたい。

 

ならば、省電力のRaspberry Piを活かそうとネットで調べたら、どうやら静止画をある程度のタイミングで撮影して表示させるのが消費電力も小さいことが分かりました。

それも確認するにはブラウザがあればOKなので、スマホでもイケます!

題してコマ送りの「あんまり監視しないカメラ」プロジェクトです。

今回の環境

必要なモノと仕組み、運用方法は以下です。

主な材料(ときどき監視するカメラ)

  • Raspberry Pi Zero W/WH
  • OSは2018-06-27-raspbian-stretch-lite
  • 公式カメラモジュールv1.3
  • Apache WEBサーバー
  • PHP

参考にさせていただいたサイト:ラズベリーパイで作る省電力ライブカメラ(前編)~ ラズベリーパイ研究室 ありがとうございます。

運用方法

カウンター上部へRaspberry Pi Zero W/WHにカメラモジュールを組み込んだケースを設定し、電源のケーブルだけを這わせ、通信はWi-Fiで接続します。

静止画をある一定の連続撮影とし、リアルタイムは要らない。参考のサイトを参考にして記録せずにメモリーにバッファで表示することで省電力化する。

閲覧はスマホまたは据え置きのパソコンのブラウザで確認させる。

必要なインストールとセットアップ

Raspberry Pi Zero WにRaspbian Stretch Liteをインストール後、基本設定を済ませます。(この辺りは当ブログの過去記事を並べますので参考にしてください)

RaspbianをインストールするときSSHを有効化する方法
はじめに Raspberry Pi はデフォルト(標準)でSSHは無効になっています。セキュリティ対策のためです。SSHを使用する場合は、raspi-configで有効化する必要があります。また、パ...(続きを読む)
Raspberry Pi の初期設定(RASPBIAN JESSIE WITH DESKTOP)
RASPBIAN JESSIE WITH DESKTOPの初期設定をご紹介します。 OSをSDカードに入れて初めて電源を入れ起動した状態から順番に記載します。手順が前後しても大きな支障はありません。...(続きを読む)
Raspbian Stretchで固定IPにする方法
当ブログの記事ではWi-Fiの設定がとても人気があります。結構、皆さん苦戦しているようですね。これはRaspbianでもLibreELECでも、Retropieにしろ、需要があるのかと思います。 ...(続きを読む)

ホスト名を「stillmovie」として進めます。

カメラモジュールのテスト

カメラモジュールの有効化

sudo raspi-config

インターフェイスオプションでカメラを有効にしてください。

raspi-config

 

カメラモジュールのバージョン確認

vcgencmd version
Jun 7 2018 15:37:30
Copyright (c) 2012 Broadcom
version 4800f08a139d6ca1c5ecbee345ea6682e2160881 (clean) (release)

 

カメラが検出されるかどうか確認

vcgencmd get_camera
supported=1 detected=1

detectedは検出という意味なので、1ならOKです。

もしも検出されずにエラーが出るようであれば、フレキシブルケーブルをもう一度確認して取り付けてください。また、v1.3の場合、カメラレンズ部分が外れていることがあります。確認してください。

それでもダメなら・・・ケーブルの断線かも知れません。

WEBサーバーの準備

Apacheのインストール

今回はApache2で進めます。

sudo apt-get install apache2

 

インストールできたか確認します。

apache2 -v
Server version: Apache/2.4.25 (Raspbian)
Server built: 2018-06-02T08:01:13

こんな感じでバージョンが表示されればOKです。

 

どうやらnginxは軽量でよく勧められています。お好みで。
またはnginxのインストール
$ sudo apt-get install nginx
nginxの起動
$ sudo /etc/init.d/nginx start
今回はApache2で進めます。

 

セキュリティ関係の修正2つ

外に公開しなければ必要無いかも知れません。簡単なので載せておきます。

index.htmの削除

サンプルで表示されるページはindex.htmなのでそれを削除か移動しておきます。

sudo mv /var/www/html/index.htm /var/www/

 

シグネチャの削除

まぁ、サーバーのシグネチャが表示されるというのを表示されないようにするだけです。

sudo nano /etc/apache2/conf-available/security.conf

 

ファイルの 36行目と37行目を以下に変更します。Onをコメントアウトして、Offのコメントアウトを外します。以下のようにすればOKです。

ServerSignature Off
#ServerSignature On

Apacheの開始、停止、再起動コマンド

開始

sudo /etc/init.d/apache2 start

再起動

sudo /etc/init.d/apache2 restart

停止

sudo /etc/init.d/apache2 stop

 

現在はinit.dを使うのが一般的のようです。

Raspberry Pi でApache から sudo コマンドを実行できるよう、sudoers に Apache ユーザーを登録しておく

これはちょっと説明が難しいので端折ります・・・。以下のコマンドで実行しておきましょう。

sudo visudo
pi ALL=(ALL) NOPASSWD: ALL
www-data ALL=(ALL) NOPASSWD: ALL

 

しかし、私の環境では、pi ALL=(ALL) NOPASSWD: ALLが無かった・・・。rootしかない。
仕方ないので、上の2行を最終行に追加しました。

PHPのインストール(v7)

記事執筆時点でPHPはv7を入れました。その時の最新なり読み替えてください。

sudo apt-get install php7.0-fpm

 

この後、phpが動かないということになったため以下の手順で対応します。しかし、同じ環境なら問題ありませんけど、何が悪いのか分からないと困るので、一旦、作成したhtmlやphpで確認すると良いでしょう。

phpのテスト

先にphpのテストをした方がいいでしょう。以下を保存して、info.phpなどで保存します。

保存場所は、/var/www/html/です。

sudo nano /var/www/html/info.php
<html>
<head>
<title>PHP info</title>
</head>
<body>
<?php
phpinfo();
?>
</body>
</html>

これを表示してみます。表示されればOKです。

info.phpを表示

もしも動かない、エラーが出た、真っ白、などありましたらこの記事下部にある「.phpが動かない時の解決方法」もご覧ください。

ファイルの作成

実際に稼働させるスクリプトは2つです。表示部分のHTMLと写真を撮るPHPです。

写真撮影のPHP

sudo nano /var/www/html/pic.php
<?php
ob_start();
system("sudo raspistill -o - -t 10 -n -w 800 -h 600 -e jpg -drc med -ss 100000 -br 50 -rot 180");
$data = ob_get_contents();
ob_end_clean();
echo "data:image/jpeg;base64," . base64_encode($data);

raspistillのオプションはお好きなように変えてください。

表示部分のHTML

sudo nano /var/www/html/index.html
<html>
<head>
<title>rpi-Camera</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
setInterval(function(){
$.ajax({
type: "get",
url: "pic.php"
})
.done(function(result){
$(".image").children("img").attr("src", result);
console.log("ファイルの取得に成功しました");
})
.fail(function(result) {
//取得失敗時に実行する処理
console.log("何らかの理由で失敗しました");
})
}, 1100);
</script>
</head>
<body>
<div class="image">
<img src="" alt="あんまり監視しないカメラ">
</div>
</body>
</html>

 

head終わりまでに記載してある1100は1100ミリ秒です。だから1.1秒になります。この間隔で繰り返し撮影しています。

数値は色々と試してみてください。

動作確認は、http://(ローカルのIPアドレス)/index.html

 

.phpが動かない時の解決方法

「phpがダウンロードされる」「phpのソースがそのまま表示される」そういった時は、どうやらモジュールが足りないようです。

解決方法は足りないモジュールをインストールするでした。

参考サイト:https://qiita.com/konankun/items/a670059e9baeff467056

 

以下コマンドでどう表示されるか。

a2query -m php7.0

以下のように出たら・・・

No module matches php7.0

 

どうやらlibapache2-mod-phpが足りないのでインストールします。

sudo apt install libapache2-mod-php

これで無事にphpも動きました!

 

拡張子phpのURLにアクセスする訳ではありませんが、htmlで作る中身に.phpを実行させて、その値を取得する際、実行しないでそのままテキストとして読み込んでしまうため、画像が無いという404エラーになってしまいます。

このphpの問題だけで5時間くらい迷いましたよ!! 参考サイトの記述があったのはそこだけでした。他のサイトではまた違います。環境によるからでしょう。よく分かりませんわ・・・。

自動起動の設定

Apacheを再起動後も自動起動させるには以下のコマンドでOK

sudo update-rc.d apache2 defaults

 

最後に

最後までお読みいただきましてありがとうございます。お疲れ様でした!

いかがでしたか? ちょっと駆け足で説明が足りない部分があるかも知れません。要点だけ押さえています。また読み直して、より分かりやすいように修正します。

 

ネットに散らばっている情報、は古いものや環境が異なるものばかりです。そのため、コピペでは上手く動かないこともあります。

このブログもそうですけど、一旦はコピペで実行させて、どこが違うか見付けないと解決できません。

今回の環境は、

  1. Raspbian Stretch Lite
  2. Apache2
  3. PHP7.0
  4. Raspberry Pi Zero W/WH

こういう環境なのでOSが違ったり、バージョンが違う場合は、読み替えてください。

一応、記事執筆時点での最新でまとめたつもりです。
間違いのご指摘や質問などありましたら、ご連絡ください。

2018-10-07追記:/var/www/html/以下がhtmlとphpの置き場です。

 

次はこの「あんまり監視しないカメラ」のケースを考えないとなりませんね・・・。

作ってみた!

あんまり監視しないカメラのケース
「あんまり監視しないカメラ」を収納するケースは色々と考えました。 あまり監視カメラぽくしたくなかったし、小さいと加工も大変なので、それなりの大きさと加工具合を考えて、いつもの100円ショップで探...(続きを読む)
作ってみた
スポンサーリンク
この記事をシェアしたり自分用に保存してみる。
[特集] Raspberry Pi はAmazonでの購入が最もおすすめ!

Raspberry Pi 関連商品は、Amazonのセールが絡むと途端に手に入りやすくなります。価格だけでは無い利点が多いので、もしもプライム会員なら必要な関連品も含めてチェックしてみてください。
利点をまとめてみました。

こちらの記事もオススメです♪
この記事を書いた人
ラズパイダ

学べる楽しむ便利になる。小さいくせにヤケにパワフル。そんなRaspberry Pi をまだ知らない人に伝えたい。様々な場所で利用されているRaspberry Pi を知って「あっ、これもラズパイだっ!」だからラズパイダ!

ラズパイダ——利用しているWEBサービス
ラズパイダ

コメント