自宅の電子工作ラボへの入室者を記録し、
監視結果をWebで閲覧できるようにした。
Raspberry Pi カメラモジュール:秋月電子通商 3,400 円
Parallax PIRセンサー RevA:秋月電子通商 800 円
sudo raspi-config
で ”5.Enable Camera”を選択し、カメラのサポートを”Eanable”にする。
sudo apt-get install python-picamera
Parallax PIRセンサー RevA を使用。
赤外線人体検知センサー回路図 。
何も検知していないとき→0V 検知したとき→3.3V出力。
Python を使って、センサーで検知したら写真を撮影するプログラムを作る。
プログラム名:camera01.py
#! /usr/bin/env /usr/bin/python
# -*- coding: utf-8 -*-
import picamera
import time
import RPi.GPIO as GPIO
PICTURE_WIDTH = 640
PICTURE_HEIGHT = 480
SAVEDIR = "/usr/share/nginx/www/camera/pictures/"
INTAVAL = 600
SLEEPTIME = 5
SENSOR_PIN = 9
GPIO.cleanup()
GPIO.setmode( GPIO.BCM )
GPIO.setup( SENSOR_PIN, GPIO.IN )
cam = picamera.PiCamera()
cam.resolution = ( PICTURE_WIDTH, PICTURE_HEIGHT )
st = time.time() - INTAVAL
while True:
if ( GPIO.input(SENSOR_PIN) == GPIO.HIGH ) and (st + INTAVAL < time.time() ):
st = time.time()
filename = time.strftime( "%Y%m%d%H%M%S" ) + ".jpg"
save_file = SAVEDIR + filename
cam.capture( save_file )
time.sleep( SLEEPTIME )
PICTURE_WIDTH = 800 → 撮影する写真の解像度
PICTURE_HEIGHT = 600 → 撮影する写真の解像度
SAVEDIR = "/usr/share/nginx/www/camera/pictures/"
→ 撮影した写真の保存先
→ nginx の www 公開フォルダーの中とした
INTERVAL = 600 → 次に写真を撮影するまでの時間間隔(秒)= 10分
SLEEPTIME = 5 → センサーをチェックする間隔(秒)
SENSOR_PIN = 9 → PIRセンサーを接続するGPIO番号
撮影した写真の保存先フォルダー作成。
sudo mkdir -p /usr/share/nginx/www/camera/pictures
→ -p:親ディレクトリとサブディレクトリを同時に作成。
あらかじめWebサーバーの設定が必要。(2-1. nginxでのWebサーバーを参照。)
閲覧用のWebページをPHPを使って作る。作成したプログラムを index.php という名前で
/usr/share/nginx/www/camera にコピーする。
PHPプログラム
<?php
$IMAGE_DIR = "pictures/";
$PAGE_TITLE = "監視結果一覧表";
$LIST_TEMP = "<li><a href="<!--URL-->"><!--NAME--></li>";
$HTML_BASE =<<<EOT
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title><!--PAGE_TITLE--></title>
<head>
<body>
<h1><!--PAGE_TITLE--></h1>
<ul>
<!--LINK_LIST-->
</ul>
</body>
</html>
EOT;
$dirhl = opendir($IMAGE_DIR);
while ( false !== ( $file_list[] = readdir($dirhl) ) );
closedir($dirhl);
rsort($file_list);
$list_buf = "";
foreach ( $file_list as $target) {
if ( preg_match("/jpg$/", $target ) ) {
$date = preg_replace("/([0-9][0-9][0-9][0-9])([0-9][0-9])([0-9][0-9])([0-9][0-9])([0-9][0-9])([0-9][0-9]).jpg/","$1年$2月$3日 $4時$5分$6秒",$target);
$buf = str_replace("<!--NAME-->",$date,$LIST_TEMP);
$buf = str_replace("<!--URL-->",$IMAGE_DIR . $target ,$buf);
$list_buf .= $buf;
}
}
$output_html = str_replace( "<!--PAGE_TITLE-->", $PAGE_TITLE, $HTML_BASE);
$output_html = str_replace( "<!--LINK_LIST-->", $list_buf, $output_html );
print $output_html;
camera01.py プログラムの実行
sudo python camera01.py
保存された写真のファイル名の調べ方
ls /usr/share/nginx/www/camera/pictures/
保存された画像ファイルの閲覧要領
gpicview /usr/share/nginx/www/camera/pictures/xxxxxxxx.jpg
保存された画像をWebで見る
http://192.168.xx.yyy/camera/index.php
赤外線で人体検知をして撮影した画像が、Webで見れる。
Raspberry Pi で、『監視システム』が簡単に構築できる。
以上。
(2014.12.31)