介紹
開發(fā) Zero 一體相機(jī)的初衷是基于興趣,還有就是樹莓派 Zero相較于其它版本夠便宜,且體積小巧,可以滿足制作常規(guī)應(yīng)用,比如:簡易拍照相機(jī),延時拍照相機(jī),視頻監(jiān)控,遙控小車,等。唯一遺憾的就是上高級點(diǎn)的應(yīng)用性能就不夠用了,但如果性能上去了,功耗也就跟著上去了,就不適合用電池供電,所以也就沒必要一味追求性能,夠用就好。先說說樹莓派 Zero W 和 Zero 這兩個版本,帶 W 的是帶 WIFI 功能,不帶 W,就是沒有WIFI 功能,如果是用來做常規(guī)拍照相機(jī)或延時相機(jī)應(yīng)用,樹莓派 Zero 不帶 WIFI的版本,會更加省電,使用電池待機(jī)時間就更長,如果需要聯(lián)網(wǎng),可以使用下面的方案,外接 USB網(wǎng)卡,需要插上,不需要拔下就好。Zero W 版本略過。

后續(xù)會開發(fā)和 Zero 一體相機(jī) 配套的小車底盤,安裝上去就是一臺 高清視頻小車,更新中。。。。。。。
裝配后正面效果圖

裝配后反面未安裝電池效果圖

- 連接攝像頭座
- USB 電源接口.也是電池充電接口.給電池充電時.最好給樹莓派關(guān)機(jī)
- 樹莓派 USB 接口
- 樹莓派 HDMI 接口
- 電池供電開關(guān).往左撥動為關(guān).往右撥動為開
- 電池充放電芯片
- 4 顆電池電量指示燈
- 連接在 GPIO23(BCM 編碼)上的 LED 燈.可用作功能狀態(tài)指示燈.比如按鍵按下拍照.指示燈亮起
- DS1307 RTC 時鐘芯片
- 連接在 GPIO18(BCM 編碼)上的按鍵.可用作攝像頭拍照按鍵或樹莓派關(guān)機(jī)按鍵.可自定義
- 電池接入座子
- 500 萬高清 66 度視角攝像頭
- GPIO 擴(kuò)展連接器.通過此連接器把樹莓派上的各接口引出.連接器的下方為序號 1.連接器的上方為序號 24.

裝配安裝有顯示屏的正面效果圖

安裝電池和 500 萬 120 度視角攝像頭反面效果圖

安裝電池和 500 萬 120 度視角攝像頭反面效果圖

樹莓派 Pi Zero / W 一體相機(jī)安裝小車底盤上的效果圖

小車底盤功能介紹
帶超聲波測距模塊,帶 5 路循線傳感器,帶鋰電池充放電電路,板載光耦隔離電路,預(yù)留 GPIO 擴(kuò)展接口。可使用樹莓派 Pi Zero/W一體相機(jī)的電源給小車供電,也可外接電池給小車供電。另外還可以用 1 臺 Pi Zero / W 一體相機(jī)帶顯示屏,通過顯示屏板上的按鍵,控制另一臺 Pi Zero / W 一體相機(jī)小車,具體玩法,后續(xù)更新。。。。
關(guān)于系統(tǒng),因樹莓派 Pi Zero / W 的 CPU 性能不高,所以推薦刷樹莓派的標(biāo)準(zhǔn)精簡系統(tǒng)或者無桌面系統(tǒng)
設(shè)置網(wǎng)絡(luò)方法
我們進(jìn)入內(nèi)存卡的 boot 分區(qū)內(nèi),新建一個名為 wpa_supplicant.conf 的文件,然后往里面寫入如下內(nèi)容后保存:進(jìn)入系統(tǒng)后再設(shè)置網(wǎng)絡(luò)也是輸入以下內(nèi)容 終端輸入: 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 版本聯(lián)網(wǎng)需要外接 USB 無線網(wǎng)卡
然后把 SD卡插上樹莓派,連接好顯示器和鼠標(biāo)鍵盤打開電源開關(guān)開機(jī),如果電池沒電也可直接通過外部給樹莓派供電如果安裝的是樹莓派有桌面系統(tǒng),直接可以通過桌面右上角連接WIFI 上網(wǎng),開啟 SSH 就可以局域網(wǎng)通過 putty 控制 如果安裝的是無桌面系統(tǒng),開機(jī)后輸入登陸用戶名和密碼,默認(rèn)用戶名:pi 密碼:raspberry
進(jìn)入命令終端:輸入 sudo raspi-config 進(jìn)行系統(tǒng)默認(rèn)設(shè)置修改,選擇第 5 項(xiàng) Interfacing Options 進(jìn)入


開啟 P1-P8 所有功能,如果安裝的是無桌面系統(tǒng),P3 就選擇默認(rèn)關(guān)閉狀態(tài)即可。完成設(shè)置后,重啟樹莓派 Pi Zero / W
常規(guī)設(shè)置
Change Timezone 設(shè)置中國時區(qū)
Asia
Shanghai
Advanced Options
Expand Filesystem 擴(kuò)展 SD 卡
完成后保存,重啟樹莓派
如果樹莓派重啟后,連接上網(wǎng)絡(luò),可以做一下下列操作,比如更新,安裝常用程序,設(shè)置一下 RTC,等操作。
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install -y gpac //包含MP4Box視頻轉(zhuǎn)化工具
sudo apt-get isntall -y mencoder //圖片轉(zhuǎn)視屏工具
sudo ape-get install -y fswebcam //Usb攝像頭拍照
sudo apt-get install -y i2c-tools //管理I2C總線設(shè)備
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 #寫入系統(tǒng)
sudo apt-get -y installl python #用python編程經(jīng)常遇到代碼縮近問題,安裝這個工具會自動補(bǔ)全,避免一些格式錯誤
安裝wiringPi 新版本已默認(rèn)安裝,可忽略。通過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狀態(tài)
顯示器設(shè)置
官方地址參考參考安裝
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添加一下內(nèi)容
spi-bcm2835
flexfb
fbtft_device
新建/etc/modprobe.d/fbtft.cong寫入內(nèi)容
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
設(shè)置屏幕常亮。修改/etc/lightdm/lightdm.conf
# 找到一下內(nèi)容
# xserver-command=X
# 修改為
xserver-command=X -s 0 -dpms
模擬鼠標(biāo)
需要系統(tǒng)自帶桌面
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 運(yùn)行測試
開機(jī)自啟
注意不要加到/etc/rc.local 中,因?yàn)?rc.local 在系統(tǒng)還沒有進(jìn)入桌面之前會執(zhí)行,而 PyMouse模塊在命令行界面運(yùn)行的話會報(bào)錯沒有鼠標(biāo)這個事件,所以我們需要執(zhí)行如下:
cd .config/
mkdir autostart
cd autostart/
cat>local.desktop<<EOF
[Desktop Entry]
Type=Application
Exec=python /home/pi/mouse.py
EOF
重啟即可查看效果
拍照應(yīng)用
編寫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():
'''釋放資源,不然下次運(yùn)行是可能會收到警告
'''
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()
命令行執(zhí)行sudo python d.py
當(dāng)按下開始鍵時LWD亮起,LED滅時拍照完成。上面代碼保存在/home/pi/image下可以自修改
局域網(wǎng)視頻監(jiān)控
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即可實(shí)現(xiàn)監(jiān)控
jk.sh中 fps 后面的30 是指幀率,320 指圖像寬度,240 指圖像高度,可以自行更改
延時拍照應(yīng)用
編輯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權(quán)限,image文件夾添加777權(quán)限
sudo chmod 744 camera.sh
sudo chmod 744 genlapse.sh
sudo chmod -R 777 image/
添加定時任務(wù),編輯/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
定時任務(wù)生效sudo /etc/init.d/cron restart。
以上表示每隔20秒拍攝一次照片
晚上23:50分自動根據(jù)拍攝的照片合成mp4視頻文件