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

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

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

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

3.一个支持SMTP的邮箱

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

那么,开工吧!


 

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

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

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

3.安装fswebcam
```apt install fswebcam```

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

效果如下:

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

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

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

monitor.sh 基础代码说明
```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

monitor```
1
2
3
4
5
6
7
8
9
10
11

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

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

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

如果装了php但终端输入php提示找不到文件,你还需要为php设置一个软链接
```sh
#/usr/local/php 为你的php安装目录,按需修改
ln -s /usr/local/php/bin/php /usr/bin/php

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?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(
'[email protected]', //接收者邮箱
'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 = '[email protected]'; //发件人邮箱
$Host = 'smtp.qq.com'; //SMTP主机
$Port = 25; //SMTP端口
$SMTPAuth = true; //SMTP 需要身份验证
$Username = '[email protected]'; //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.给权限:

1
2
3
4
chmod -R 777 monitor
chmod 777 monitor.sh
chmod 777 monitor.php
chmod 777 class.smtp.php

6.好,开始使用吧!

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

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


转载请遵守 CC BY-NC-SA 4.0 协议并注明来自:使用树莓派实现定时拍照监控并发送邮件到邮箱

Loading...

电子邮件地址不会被公开。 必填项已用 * 标注

Powered by Kenvix Comment Server v1.0