出门在外,难免担心有贼入窃。恰好手头上有闲置的树莓派一件,加上摄像头配合motion可以搭一套带运动检测的监控系统,设置好后若检测到异常可以自动将短片,图像发送到指定邮箱。手机收到邮件提醒可以远程连上摄像头查看情况。即便监控被破坏,由于图像和短片已发送至邮件服务器,仍可用于取证。

硬件准备

  1. 树莓派Raspberry Pi 3
  2. RPi IR-CUT Camera

软件安装

启用摄像头

1
sudo nano /etc/modules

添加这一行

1
bcm2835-v4l2

重启后测试摄像头

1
raspistill -o image.jpg -t 10000     #test camera

安装motionEye

核心软件是Motion,我以前就是用它配合Mutt来实现前言的功能的,但配置稍麻烦,且自带的远程管理界面略简单。后来发现motionEye,是用python写的Motion前端,十分好用。

安装依赖

1
2
3
4
5
6
wget https://github.com/ccrisan/motioneye/wiki/precompiled/ffmpeg_3.1.1-1_armhf.deb
sudo dpkg -i ffmpeg_3.1.1-1_armhf.deb
#apt-get remove libavcodec-extra-56 libavformat56 libavresample2 libavutil54
sudo apt-get install python-pip python-dev curl libssl-dev libcurl4-openssl-dev libjpeg-dev libx264-142 libavcodec56 libavformat56 libmysqlclient18 libswscale3 libpq5 v4l-utils
wget https://github.com/Motion-Project/motion/releases/download/release-4.0.1/pi_jessie_motion_4.0.1-1_armhf.deb
sudo dpkg -i pi_jessie_motion_4.0.1-1_armhf.deb

更改pip源为国内aliyun镜像

1
2
mkdir ~/.pip
nano ~/.pip/pip.conf

添加如下内容

1
2
3
[global]
trusted-host = mirrors.aliyun.com
index-url = http://mirrors.aliyun.com/pypi/simple

安装motionEye

1
2
3
4
5
6
7
8
sudo pip install motioneye
sudo mkdir -p /etc/motioneye
sudo cp /usr/local/share/motioneye/extra/motioneye.conf.sample /etc/motioneye/motioneye.conf

sudo cp /usr/local/share/motioneye/extra/motioneye.systemd-unit-local /etc/systemd/system/motioneye.service
sudo systemctl daemon-reload
sudo systemctl enable motioneye #设为开机启动,可选
sudo systemctl start motioneye

更新(可选)

1
2
sudo pip install motioneye --upgrade
sudo systemctl restart motioneye

配置motionEye

1
sudo nano /etc/motioneye/motioneye.conf

更改端口(可选)

1
2
port 8765
motion_control_port 7999

相关配置文件位置

1
2
sudo nano /etc/motion/motion.conf
sudo nano /etc/motioneye/thread-1.conf

通过前端配置邮件提醒

浏览器打开
localhost:8765
默认login: admin 密码为空
Advanced Settings ON
163邮件参数
163mail 25 non-TLS

控制夜视开关

我选用的摄像头为微雪的RPi IR-CUT Camera,没有led,而是将原来控制led的端口作为夜视开关,官方给出的控制方案为额外接一根线到摄像头模块
RPi IR-CUT Camera
但这种方案不仅占用了一个外置GPIO端口,还降低了可靠性,特别是摄像头距主控较远的情况。其实6by9已经指出可以通过GPIO 32 (A+之后,3之前的板子) 或GPIO 5 (树莓派1)来控制camera led。

RPi2设置

1
sudo nano /boot/config.txt

添加以下内容

1
disable_camera_led=1

编译cnv

1
2
3
git clone https://github.com/mjysci/rpi-cam-night-vision-control
cd rpi-cam-night-vision-control
gcc -Wall -o cnv cnv.c -lwiringPi

运行

1
cnv

RPi3设置

最新的rpi3内置GPIO有变动,disable_camera_led失效,由于是扩展GPIO,并不能直接控制。

1
2
3
4
git clone https://github.com/6by9/rpi3-gpiovirtbuf.git
cd rpi3-gpiovirtbuf
make
cp rpi3-gpiovirtbuf ~/bin/rpi3-gpiovirtbuf

运行

1
2
rpi3-gpiovirtbuf s 134 1 #夜视模式关闭
rpi3-gpiovirtbuf s 134 0 #夜视模式开启

清空记录可以直接在前端操作,亦可通过rm实现

1
sudo rm /var/lib/motioneye/Camera1/*.*

debug

之前在rpi2按以上步骤没问题,但重新部署到rpi3时碰到refused to connect错误
查看服务状态

1
sudo systemctl status motioneye.service -l

不知何故安装时并未创建数据文件夹,手动建之

1
sudo mkdir /var/lib/motioneye

参考资料

motionEye wiki
Turning off camera LED
Raw sensor access / CSI-2 receiver peripheral