介绍
开发 Zero 一体相机的初衷是基于兴趣,还有就是树莓派 Zero相较于其它版本够便宜,且体积小巧,可以满足制作常规应用,比如:简易拍照相机,延时拍照相机,视频监控,遥控小车,等。唯一遗憾的就是上高级点的应用性能就不够用了,但如果性能上去了,功耗也就跟着上去了,就不适合用电池供电,所以也就没必要一味追求性能,够用就好。先说说树莓派 Zero W 和 Zero 这两个版本,带 W 的是带 WIFI 功能,不带 W,就是没有WIFI 功能,如果是用来做常规拍照相机或延时相机应用,树莓派 Zero 不带 WIFI的版本,会更加省电,使用电池待机时间就更长,如果需要联网,可以使用下面的方案,外接 USB网卡,需要插上,不需要拔下就好。Zero W 版本略过。
后续会开发和 Zero 一体相机 配套的小车底盘,安装上去就是一台 高清视频小车,更新中。。。。。。。
装配后正面效果图
装配后反面未安装电池效果图
- 连接摄像头座
- USB 电源接口.也是电池充电接口.给电池充电时.最好给树莓派关机
- 树莓派 USB 接口
- 树莓派 HDMI 接口
- 电池供电开关.往左拨动为关.往右拨动为开
- 电池充放电芯片
- 4 颗电池电量指示灯
- 连接在 GPIO23(BCM 编码)上的 LED 灯.可用作功能状态指示灯.比如按键按下拍照.指示灯亮起
- DS1307 RTC 时钟芯片
- 连接在 GPIO18(BCM 编码)上的按键.可用作摄像头拍照按键或树莓派关机按键.可自定义
- 电池接入座子
- 500 万高清 66 度视角摄像头
- GPIO 扩展连接器.通过此连接器把树莓派上的各接口引出.连接器的下方为序号 1.连接器的上方为序号 24.
装配安装有显示屏的正面效果图
安装电池和 500 万 120 度视角摄像头反面效果图
安装电池和 500 万 120 度视角摄像头反面效果图
树莓派 Pi Zero / W 一体相机安装小车底盘上的效果图
小车底盘功能介绍
带超声波测距模块,带 5 路循线传感器,带锂电池充放电电路,板载光耦隔离电路,预留 GPIO 扩展接口。可使用树莓派 Pi Zero/W一体相机的电源给小车供电,也可外接电池给小车供电。另外还可以用 1 台 Pi Zero / W 一体相机带显示屏,通过显示屏板上的按键,控制另一台 Pi Zero / W 一体相机小车,具体玩法,后续更新。。。。
关于系统,因树莓派 Pi Zero / W 的 CPU 性能不高,所以推荐刷树莓派的标准精简系统或者无桌面系统
设置网络方法
我们进入内存卡的 boot 分区内,新建一个名为 wpa_supplicant.conf 的文件,然后往里面写入如下内容后保存:进入系统后再设置网络也是输入以下内容 终端输入: sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="WiFi-A"
psk="12345678"
key_mgmt=WPA-PSK
priority=1
}
提示:树莓派 Pi Zero 不带 WIFI 版本联网需要外接 USB 无线网卡
然后把 SD卡插上树莓派,连接好显示器和鼠标键盘打开电源开关开机,如果电池没电也可直接通过外部给树莓派供电如果安装的是树莓派有桌面系统,直接可以通过桌面右上角连接WIFI 上网,开启 SSH 就可以局域网通过 putty 控制 如果安装的是无桌面系统,开机后输入登陆用户名和密码,默认用户名:pi 密码:raspberry
进入命令终端:输入 sudo raspi-config 进行系统默认设置修改,选择第 5 项 Interfacing Options 进入
开启 P1-P8 所有功能,如果安装的是无桌面系统,P3 就选择默认关闭状态即可。完成设置后,重启树莓派 Pi Zero / W
常规设置
Change Timezone 设置中国时区
Asia
Shanghai
Advanced Options
Expand Filesystem 扩展 SD 卡
完成后保存,重启树莓派
如果树莓派重启后,连接上网络,可以做一下下列操作,比如更新,安装常用程序,设置一下 RTC,等操作。
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install -y gpac //包含MP4Box视频转化工具
sudo apt-get isntall -y mencoder //图片转视屏工具
sudo ape-get install -y fswebcam //Usb摄像头拍照
sudo apt-get install -y i2c-tools //管理I2C总线设备
i2cdetect 1 //查看I2C信息
RTC闹钟
在/etc/modules
写入
i2c-dev
i2c-bcm2708
在/etc/rc.local
写入
sudo modprobe i2c-dev
sudo modprobe i2c-bcm2708
echo "ds1307 0x68" | sudo tee /sys/class/i2c-adapter/i2c-1/new_device
sudo hwclock -r #读入RTC时间
sudo hwclock -s #写入系统
sudo apt-get -y installl python #用python编程经常遇到代码缩近问题,安装这个工具会自动补全,避免一些格式错误
安装wiringPi
新版本已默认安装,可忽略。通过gpio -v
查看是否安装
若无请安装
sudo apt-get -y install git
git clone git://git.drogon.net/wiringPi
cd wiringPi
git pull
./build
gpio- v #C查看GPIO版本信息
gpio readall #读取GPIO状态
显示器设置
官方地址参考参考安装
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.60.tar.gz
tar -zxvf bcm2835-1.60.tar.gz
cd bcm2835-1.60
sudo ./configure
sudo make
sudo make install
#python安装
sudo apt-get update
sudo apt-get install -y ttf-wqy-zenhei
sudo apt-get install -y python-pip
sudo pip install RPi.GPIO
sudo pip install spidev
/etc/modules
添加一下内容
spi-bcm2835
flexfb
fbtft_device
新建/etc/modprobe.d/fbtft.cong
写入内容
options fbtft_device name=flexfb gpios=reset:27,dc:25,cs:8,led:24 speed=40000000 bgr=1 fps=60 custom=1 height=240
width=240
options flexfb setaddrwin=0 width=240 height=240 init=-1,0x11,-2,120,-1,0x36,0x70,-1,0x3A,0x05,-1,0xB2,0x0C,0x0C,0x00,0x33,0x33,-1,0xB7,0x35,-1,0xBB,0x37,-1,0xC0,0x2C,-1,0xC2,0x01,-1,0xC3,0x12,-1,0xC4,0x20,-1,0xC6,0x0F,-1,0xD0,0xA4,0xA1,-1,0xE0,0xD0,0x04,0x0D,0x11,0x13,0x2B,0x3F,0x54,0x4C,0x18,0x0D,0x0B,0x1F,0x23,-1,0xE1,0xD0,0x04,0x0C,0x11,0x13,0x2C,0x3F,0x44,0x51,0x2F,0x1F,0x1F,0x20,0x23,-1,0x21,-1,0x29,-3
设置屏幕常亮。修改/etc/lightdm/lightdm.conf
# 找到一下内容
# xserver-command=X
# 修改为
xserver-command=X -s 0 -dpms
模拟鼠标
需要系统自带桌面
sudo apt-get install -y python-xlib sudo pip install PyMouse wget http://www.waveshare.net/w/upload/d/d3/Mouse.7z sudo apt-get install -i p7zip-full
7z x Mouse.7z
修改mouse.py文件
btn_up = 5
btn_down = 22
btn_left = 23
btn_right = 17
btn_key1 = 4
btn_key2 = 6
sudo python mouse.py
运行测试
开机自启
注意不要加到/etc/rc.local 中,因为 rc.local 在系统还没有进入桌面之前会执行,而 PyMouse模块在命令行界面运行的话会报错没有鼠标这个事件,所以我们需要执行如下:
cd .config/
mkdir autostart
cd autostart/
cat>local.desktop<<EOF
[Desktop Entry]
Type=Application
Exec=python /home/pi/mouse.py
EOF
重启即可查看效果
拍照应用
编写d.py
文件
#!/usr/bin/env python
# coding=utf-8
# author:ksc
import RPi.GPIO as GPIO
import time
import os, sys
import serial
GPIO.setmode(GPIO.BCM)
#define GPIO pin
pin_btn = 18
pin_led = 23
pin_led2 = 22
GPIO.setup(pin_btn, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(pin_led, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(pin_led2, GPIO.OUT, initial=GPIO.LOW)
press_time = 0
count_down = 5
led_on = 1
def cleanup():
'''释放资源,不然下次运行是可能会收到警告
'''
print('clean up')
GPIO.cleanup()
def handleSIGTERM(signum, frame):
#cleanup()
sys.exit() #raise an exception of type SystemExit
def onPress(channel):
global press_time, count_down
print('pressed')
press_time += 1
if press_time > 2:
press_time = 1
if press_time == 1:
GPIO.output(pin_led, 1)
GPIO.output(pin_led2, 1)
print('system will restart in %s' % (count_down))
GPIO.add_event_detect(pin_btn, GPIO.FALLING, callback= onPress,bouncetime=500)
#signal.signal(signal.SIGTERM, handleSIGTERM)
try:
while True:
if press_time==1:
press_time=0
print "start restart"
os.system("raspistill -o /home/pi/image/$(date +%Y%m%d%H%M%S).jpg -t 2000")
#os.system("fswebcam -r 1280x720 --no-banner -S 50 /home/pi/camera/$(date +%Y%m%d%H%M%S).jpg")
#USB camera
#sys.exit()
led_on=not led_on
GPIO.output(pin_led, led_on)
GPIO.output(pin_led2, led_on)
GPIO.output(pin_led, 0)
GPIO.output(pin_led2, 0)
time.sleep(1)
except KeyboardInterrupt:
print('User press Ctrl+C,exit;')
finally:
cleanup()
命令行执行sudo python d.py
当按下开始键时LWD亮起,LED灭时拍照完成。上面代码保存在/home/pi/image
下可以自修改
局域网视频监控
sudo apt-get install -y libjpeg8-dev
sudo apt-get install -y cmake
wget https://github.com/jacksonliam/mjpg-streamer/archive/master.zip
unzip master.zip
cd mjpg-streamer-master/mjpg-streamer-experimental
make clean all
cat>jk.sh<<EOF
#!/bin/sh
./mjpg_streamer -i "./input_raspicam.so -fps 30 -x 640 -y 480" -o "./output_http.so -w ./www"
EOF
sudo sh jk.sk
浏览器访问http://树莓派ip:8080/?action=stream
即可实现监控
jk.sh中 fps 后面的30 是指帧率,320 指图像宽度,240 指图像高度,可以自行更改
延时拍照应用
编辑camera.sh
文件
#!/bin/bash
DATE=$(date+"%Y-%m-%d_%H%M%S")
raspstill -o /home/pi/image/$DATE.jpg -t -2000
编辑genlapse.sh
#!/bin/bash
export PATH=/usr/local/bin:/usr/bin:/bin
cd /home/pi/image
ls *.jpg > stills.txt
DATE=$(date +"%Y-%m-%d_%H%M%S")
echo "========== Start mencoder =========="
mencoder -nosound -ovc lavc -lavcopts vcodec=mpeg4:aspect=16/9:vbitrate=8000000 -vf scale=1920:1080 -o $DATE.avi -mf type=jpeg:fps=24 mf://@stills.txt
echo "========== mencoder finished, start MP4Box =========="
MP4Box -add $DATE.avi ../videos/$DATE.mp4
echo "==========MP4Box finishes =========="
$DATE.avi
if [ ! -z "$1" ];
then
if [ $1 = "-r" ];
then
rm *.jpg
echo "========== raw images removed =========="
else
echo "========== wrong arg, only support: -r =========="
fi
else
echo "========== raw images NOT removed. set -r if need to remove =========="
fi
cd ..
shell文件添加744权限,image文件夹添加777权限
sudo chmod 744 camera.sh
sudo chmod 744 genlapse.sh
sudo chmod -R 777 image/
添加定时任务,编辑/etc/crontab
文件
*/1 * * * * root /home/pi/camera.sh 2>&1
*/1 * * * * root sleep 20; /home/pi/camera.sh 2>&1
*/1 * * * * root sleep 40;/home/pi/camera.sh 2>&1
50 23 * * * /home/pi/genlapse.sh
定时任务生效sudo /etc/init.d/cron restart
。
以上表示每隔20秒拍摄一次照片
晚上23:50分自动根据拍摄的照片合成mp4视频文件