使用树莓派实现定时拍照监控并发送邮件到邮箱

首先确保手上有下列东西:

1.树莓派(以下简称RPI)一个

2.一个USB免驱摄像头,支持YUY2或者JPEG均可(JPEG最佳)。RPICamera没试过

3.一个支持SMTP的邮箱

博主的配置:RPI3b 一个废弃的YUY2摄像头 QQ邮箱

那么,开工吧!


 

1.打开终端,切换成root,若无法切换,请先为root设置密码(passwd root)


2.插上摄像头,然后输入以下命令检查是否识别了摄像头   
```ls /dev/video*

如果不是提示没有文件,那么就表示我们的摄像头已经被识别了,接下来就可以安装拍摄软件了:

3.安装fswebcam
apt install fswebcam

4.试着抓拍一张图片
fswebcam --no-banner -r 320x240 test.jpg

效果如下:

[这里是一张截图,然而博主在将博客从WP人工迁移到Hexo时找不到了]

比起在Windows上的效果来说,成色略有问题,不过还算可以忍受

测试完成!摄像头可用!重点来了!

monitor.sh 基础代码说明

count=0
while [[ true ]];do
    #拍照;分辨率640x480;向照片底部写入日期;文件名为时间;保存到monitor文件夹
    fswebcam -d /dev/video0 -r 640x480 --bottom-banner --title "`date '+%Y-%m-%d %H:%M:%S'`" --no-timestamp ./monitor/`date '+%H-%M-%S'`.jpg
    #拍照间隔5min
    sleep 5m
    #计数器+1
    let count++
    #拍摄满20张照片 发送邮件
    if [ $count -gt 20 ];then
        #联系PHP发送邮件,如果你想自己写发邮件的代码,请删除这部分内容
        echo "Send Mail... Calling PHP"
        #这个PHP脚本还会自动清空monitor文件夹
        php monitor.php
        #发完了 清零计数器
        let count=0
    fi
done

在相同目录创建文件夹monitor
mkdir monitor

基础代码到此结束,如果你不想自己写发邮件的代码,那么请继续看;想自己写就可以不看了。

1.确保已装好PHP(要求5.4+)

之所以用PHP发送邮件,是因为LZ在写云签到的时候写过一个很强大的PHP SMTP类,可以很方便地发送带附件的邮件

如果装了php但终端输入php提示找不到文件,你还需要为php设置一个软链接

#/usr/local/php 为你的php安装目录,按需修改
ln -s /usr/local/php/bin/php /usr/bin/php

2.保存上述代码为 monitor.sh

3.修改monitor.sh,见上面的基础代码说明

4.新建monitor.php,代码和说明:

<?php
require 'class.smtp.php';
define('DIR', dirname(__FILE__) . '/monitor/'); //照片储存路径

if(file_exists(DIR)) {
    $f   = scandir(DIR);
    $att = [];
    foreach($f as $x) {
        if($x != '..' && $x != '.') {
            $att[$x] = file_get_contents(DIR . $x); //添加附件内容
            unlink(DIR . $x); //删除照片
        }
    }
    echo sendmail(
        'fuck@example.com', //接收者邮箱
        'Kenvix Monitor - '. date('Y-m-d H:m:s'), //邮件标题
        implode('<br/>', $f), //邮件内容
        $att);
} else {
    mkdir(DIR,0777);
}

/**
 * 快捷发送一封邮件
 * @param string $to 收件人
 * @param string $sub 邮件主题
 * @param string $msg 邮件内容(HTML)
 * @param array $att 附件,每个键为文件名称,值为附件内容(可以为二进制文件),例如array('a.txt' => 'abcd' , 'b.png' => file_get_contents('x.png'))
 * @return bool 成功:true 失败:错误消息
 */
function sendmail($to, $sub = '无主题', $msg = '无内容', $att = array()) {
    $From = 'kenvix@qq.com'; //发件人邮箱
    $Host = 'smtp.qq.com'; //SMTP主机
    $Port = 25; //SMTP端口
    $SMTPAuth = true; //SMTP 需要身份验证
    $Username = 'kenvix@qq.com'; //SMTP用户名
    $Password = 'password'; //SMTP密码
    $Nickname = 'Kenvix'; //发件人名字
    $SSL = false;
    $mail = new SMTP($Host , $Port , $SMTPAuth , $Username , $Password , $SSL);
    $mail->att = $att;
    if($mail->send($to , $From , $sub , $msg, $Nickname)) {
        return true;
    } else {
        return $mail->log;
    }
}

5.给权限:

chmod -R 777 monitor
chmod 777 monitor.sh
chmod 777 monitor.php
chmod 777 class.smtp.php

6.好,开始使用吧!

*建议将监控脚本(monitor.sh)设置为开机启动项并扔到后台运行

*发送邮件代码来自贴吧云签到


正在加载评论。你可能需要科学上网才能正常加载评论区