1赞

3回答

1收藏

[大赛作品提交] 移动抓拍与邮件提醒功能的树莓派家庭网络监控

Raspberry Pi Raspberry Pi 10707 人阅读 | 3 人回复 | 2017-12-02

本帖最后由 ky123 于 2018-2-5 11:10 编辑

首先在此感谢爱板网、感谢e络盟、感谢上海贝锐信息科技,感谢e络盟提供的树莓派3B、感谢贝锐信息科技提供的蒲公英路由器X3、感谢爱板网提供的一个很好电子交流平台让更多人可以学习、交流、提高电子技术。
今天要介绍的是使用e络盟提供的树莓派3B、摄像头打造一个支持移动抓拍和邮件提醒功能的树莓派家庭网络监控,同时使用贝锐信息科技提供的蒲公英路由器X3突破内网,在外网下查看摄像头实时视频和抓拍的文件
一、项目名称
移动抓拍与邮件提醒功能的树莓派家庭网络监控
1.原理介绍
目前树莓派网络监控使用得比较多的是MJPG-Streamer和Motion,笔者下面项目使用motion,硬件上使用树莓派、USB摄像头(树莓派摄像头模块)、贝锐蒲公英路由器,然后软件方面使用motion、msmtp(ssmtp)、mutt,移动抓拍功能主要依靠motion来识别和拍摄下入侵者,邮件提醒功能主要依靠msmtp和mutt,使用网易邮箱开通SMTP功能,通过SMTP协议给QQ邮箱发送带抓拍附件的报警提醒邮件,另外使用贝锐蒲公英路由器实现外网查看实时视频和抓拍的文件,外网查看树莓派上抓拍到的文件需要把树莓派连接蒲公英路由器并在树莓派上安装配置samba,然后将树莓派上的抓拍目录使用samba协议共享局域网,这样即可通过外网远程访问蒲公英路由器来实现外网查看抓拍文件
2.系统版本
RASPBIAN STRETCH LITE
最新版本下载地址
https://downloads.raspberrypi.org/raspbian_lite_latest
使用内核版本如下

3.应用源代码
首先安装所需组件
  1. sudo apt-get update
  2. sudo apt-get install msmtp mutt motion
复制代码
对于使用树莓派摄像头模块的用户还需要打开摄像头,运行下面命令
  1. sudo raspi-config
复制代码

按下图设置




设置完成后输入下面命令拍照测试
  1. raspistill -v -o test.img
复制代码
出现下图字样表示配置成功

UVC USB摄像头直接插到USB口即可,然后输入下面命令查看摄像头支持的像素格式和分辨率
  1. v4l2-ctl -d /dev/video0 --all
复制代码
下图显示USB摄像头支持像素格式为YUYV,最大分辨率为640*480 30FPS

接着设置motion配置文件
  1. sudo vi /etc/motion/motion.conf
复制代码
如果想motion自动启动设置daemon on,如果想手动启动设置daemon off,
v4l2_palette根据摄像头支持像素格式设置,例如上面支持格式为YUYV应该设置数值15,如下图

使用USB摄像头需要将input设置-1,树莓派摄像头模块设置为0
width设置摄像头支持分辨率的宽,height设置摄像头支持的分辨率的高,framerate设置摄像头支持的FPS帧率
threshold设置移动检测的灵敏度,数值越小越灵敏,默认为1500,设置为3000-5500即可
event_gap是事件间隔事件,设置为0为不间断拍摄,默认为60秒
target_dir是拍摄照片或视频存储目录,这里设置为挂载U盘的/mnt/usb/motion目录
stream_localhost是只允许本机查看视频流,默认on,如果需要局域网或者外网查看设置为off
stream_authentication是视频流加密,设置用户名:密码后需要输入用户名和密码到登陆框才能查看视频流
webcontrol_localhost是只允许本机网页管理,默认是on,如果需要局域网或者外网登陆网页管理界面需要设置为off
webcontrol_authentication是网页管理加密,设置用户名:密码后需要输入账号密码才能登陆网页管理界面
on_event_end是事件结束后运行指定脚本,这里设置个发送邮件脚本/home/pi/motion/send_alert.sh
on_picture_save是照片拍摄后运行特定脚本,这里设置发送邮件脚本/home/pi/motion/send_alert.sh
主要设置上面选项,笔者设置的配置文件如下
motion.txt (28.4 KB, 下载次数: 24)

由于笔者准备使用网易163邮箱发报警邮件到QQ邮箱,笔者首先登陆163邮箱,按下面网易教程开通SMTP服务(需要认证手机号),设置授权码,接着msmtp配置文件
  1. sudo vi /etc/msmtprc
复制代码
加入下面内容,其中myemail填写网易邮箱用户名,pass填写上面设置是授权码
  1. defaults
  2. account 163
  3. port 465
  4. tls on
  5. tls_certcheck off
  6. tls_starttls off
  7. auth on
  8. host smtp.163.com
  9. user myemail
  10. from myemail@163.com
  11. password pass
  12. logfile ~/.msmtp.log
复制代码
接着设置Muttrc
  1. sudo vi /etc/Muttrc
复制代码
在最下面一行加入下面代码,其中myemail为网易邮箱用户名
  1. set sendmail="/usr/bin/msmtp"
  2. set use_from=yes
  3. set realname="myemail"
  4. set from="myemail@163.com"
  5. set editor="nano"
  6. set envelope_from=yes
  7. set crypt_use_gpgme=no
复制代码
保存后下面测试一下邮件发送情况和树莓派摄像头拍摄情况,先raspstill命令拍摄一张照片test.jpg
  1. raspistill -v -o test.jpg
复制代码
接着输入下面命令发送带附件照片的邮件到QQ邮箱
  1. mutt reciever@qq.com -s "树莓派相机测试和邮件发送" -a test.jpg
复制代码

出现下图


输入主题

按Y键发送邮件

打开接收邮箱收到邮件如下图表示msmtp和mutt设置成功

附件图片发送正常

图片像素很高文件达2.52mb


接着在home文件夹下面创建一个motion文件夹,在文件夹里面创建一个send_alert.sh脚本
  1. sudo mkdir /home/pi/motion
  2. sudo vi send_alert.sh
复制代码
输入下面附件中代码,将其中reciever@qq.com修改为需要接收报警图片的邮箱即可
如果脚本提示没有运行权限,请运行下面命令
  1. chmod +x send_alert.sh
复制代码
send_alert.txt (1.05 KB, 下载次数: 33)

考虑到移动报警会不停产生报警图片,为了保护树莓派的TF卡,笔者决定将报警图片存储到U盘,将一个FAT32或者exFAT文件格式U盘插到树莓派USB口,输入下面命令挂载U盘
  1. sudo mkdir /mnt/usb
  2. sudo mount -t vfat /dev/sda1 /mnt/usb
复制代码
或者
  1. sudo mkdir /mnt/usb
  2. sudo mount -t exfat /dev/sda1 /mnt/usb
复制代码
然后在U盘根目录创建motion文件夹用于存放抓拍的图片
  1. sudo mkdir /mnt/usb/motion
复制代码
最后运行motion
  1. sudo motion
复制代码
当有人或物在摄像头前移动时会有照片抓拍到前面设置的QQ邮箱,如下图





如需局域网查看实时视频可以在浏览器输入
  1. 树莓派局域网IP:8081
复制代码

如需局域网登陆网页管理界面可以在浏览器输入
  1. 树莓派局域网IP:8080
复制代码



单摄像头默认端口为8081,可以在/etc/motion/motion.conf里面修改stream_port一行设置为其他端口
如需外网远程查看实时视频,就需要内网映射,可以使用花生壳(收费服务)、ngrok(免费服务和收费服务,其中免费服务有时不大稳定)、蒲公英路由器(最简单和稳定方法),设置方法如下
首先给蒲公英路由器上电联网,具体参考笔者下面帖子
蒲公英X3路由器上电、联网、设置无线密码、升级
然后登陆管理界面选择绑定账号后注册一个花生壳账号,也可以直接使用蒲公英路由器SN号产生的花生壳账号



自己注册的账号需要绑定账号

内置账号也可以直接使用

树莓派连接上蒲公英路由器,然后查看路由器管理界面可以看到局域网IP

登陆路由器管理界面选择智能组网,将路由器添加到网络成员

然后在需要外网访问树莓派的设备(电脑、手机、平板等)上安装蒲公英路由器客户端
https://pgy.oray.com/download/
Windows电脑下载安装如图

打开

登陆之前申请的Oray花生壳账号,然后进入路由器管理界面可以看到客户端显示如下

将客户端加入网络成员以便外网访问,客户端添加需要设置密码

电脑断开蒲公英路由器后使用其他网络登陆客户端

搜索树莓派连接的蒲公英路由器的局域网IP

双击上面树莓派那项开始ping,或者WIN+R输入cmd后输入ping+上面树莓派ip测试响应

外网ping测试OK,接着外网访问摄像头测试,在浏览器输入树莓派在蒲公英路由器下局域网IP:8081,显示如下

上图红色标出的电脑局域网IP和蒲公英路由器不在一个网络中,浏览器中为蒲公英路由器中的树莓派局域网IP,可知外网访问树莓派查看摄像头成功
接着介绍在手机配置查看方法
笔者手机为安卓,首先下载安装蒲公英客户端安卓版本


打开客户端

登陆之前注册的Oray账号

打开MXPLAYER或者VLC视频播放器,选择打开网络串流,输入蒲公英路由器下的树莓派局域网IP后点确定

树莓派摄像头的实时视频播放如下,硬解码不能播放的话需要切换为软解码即可正常播放,这样就实现了外网查看蒲公英路由器下的树莓派摄像头

若出现上面摄像头画面显示时间不正确则需要调整时区,默认固件是UTC,中国是UTC+8,

设置方法如下,输入
  1. sudo raspi-config
复制代码
选择4

选择I2

选择Shanghai

再次查看发现时区和时间正确了


下面介绍外网远程查看抓拍目录的方法,首先登陆树莓派终端,输入下面命令安装samba
  1. sudo apt-get install samba
复制代码
如果需要密码查看,按下面设置查看密码,需要输入两次密码
  1. sudo smbpasswd -a pi
复制代码
接着修改配置文件
  1. sudo vi /etc/samba/smb.conf
复制代码
在最下面一行后面加入下面代码
  1. [USB]
  2. path = /mnt/usb
  3. comment = USB Flash Drive
  4. valid users = pi
  5. writeable = yes
  6. browseable = yes
  7. create mask = 0777
  8. public = yes
复制代码
保存后输入下面命令重启samba服务
  1. sudo /etc/init.d/samba restart
复制代码
接着在外网手机上登陆蒲公英客户端并打开ES文件浏览器,点击网络-局域网
在服务器里面输入
  1. 蒲公英路由器下树莓派局域网IP/usb
复制代码
在用户名里面输入pi
在密码里面输入上面设置的samba密码,然后点确定后显示如下

点击进去

由于抓拍照片在motion文件夹内,点击进去即可查看

可以随意查看,相当方便,这样就实现了外网直接查看树莓派抓拍文件
由于是VPN网络查看,所以必须登陆蒲公英客户端、必须登陆蒲公英客户端、必须登陆蒲公英客户端才能成功,重要的事情说三次

这样就完成了这次的树莓派家庭网络监控的项目,实现了移动抓拍存储文件到U盘和发送指定邮箱功能、实现了远程实时视频查看、远程直接查看抓拍文件等功能,最后感谢爱板网、感谢E络盟、感谢上海贝锐信息科技提供的产品!
4.硬件连接图
树莓派摄像头模块连接图

与USB摄像头连接图


关注下面的标签,发现更多相似文章

评分

参与人数 1与非币 +20 收起 理由
ky123 + 20 铜板周年庆有用奥~

查看全部评分

分享到:
回复

使用道具 举报

回答|共 3 个

倒序浏览

沙发

zeefeng

发表于 2017-12-17 01:06:53 | 只看该作者

非常感谢楼主的分享,帮了我大忙,但有一个小问题,希望楼主可以完善下,脚本编写好后没有执行的权限,得自己赋予,建议楼主在帖子中写明。
板凳

可乐丸子

发表于 2017-12-17 08:54:48 来自手机 | 只看该作者

本帖最后由 可乐丸子 于 2017-12-17 09:32 编辑
zeefeng 发表于 2017-12-17 01:06
非常感谢楼主的分享,帮了我大忙,但有一个小问题,希望楼主可以完善下,脚本编写好后没有执行的权限,得自 ...

运行sudo motion就可以了 如果想要自启将motion.conf里面的daemon设置为on即可
脚本设置可运行
chmod +x send_alert.sh
帖子里面已经加上 谢谢反馈
地板

blinkhan

发表于 2018-9-9 14:32:20 | 只看该作者

楼主你好,send_alert的脚本里有个问题请教一下。
LISTFILES=`find $MOTIONDIR -maxdepth 1 -type f | grep jpg$`
这一行命令得到的LISTFILES似乎不是一个数组,LISTFILES[0]包含了所有的图片路径。
如果文件夹里每次只增加一张图片的话,那么这个命令是可以正常工作的,因为循环不到LISTFILES[1]
如果一次性多了好多图片的话,就会报文件路径错误。
请问如何将各个图片的路径以数组的方式保存在LISTFILES里呢?
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条