歡迎轉載,但請注明出處 http://www.cnblogs.com/chuxiuhong
先說好,我們的家庭監控是每分鍾的照片的監控,並不是真正的實時視頻,這種實時視頻樹莓派性能可能不夠。
我們這一次工程的大體步驟:
硬件准備
我們至少需要一個樹莓派3,樹莓派的攝像頭,一個tf卡(16G,class10的比較推薦),出於便於傳數據,你最好還有讀卡器或者SD卡套,常用的USB鼠標,USB鍵盤,HDMI接口的顯示器(這個有則最好,沒有會麻煩但是也能搞定,我默認你有)
首先看看我們的樹莓派長成什么樣子:
它有四個USB接口,一個網線口,一個HDMI接口,一個攝像頭的接口,還有電源口,還有一些不是很常用的口,以及GPIO。
看看我們的攝像頭長成什么樣子
很簡單的一個小攝像頭,大概500W像素,淘寶一般賣35左右。
除了上面的兩個我們要求是統一的,至於鍵盤鼠標顯示器我都不管你用的什么型號的。
安裝系統和基本設置
安裝系統這方面的教程網上實在是太多了,不需要搜英文的資料,只需看看百度的結果就可以完美解決。下面我默認樹莓派上的系統已經做完了。
在樹莓派上進入終端(如果選擇debian系統的話,和Ubuntu的操作基本一樣),執行
sudo raspi-config
出現下面的頁面
先選擇第一項,擴充文件系統,讓樹莓派可以完全的占有你的tf卡。完事之后可能需要重啟,重啟之后我們還是執行上述命令,然后還是來到這個頁面,選擇選擇第五項,然后一直選OK,打開攝像頭的接口。
然后我們關機
sudo shutdown -h now
或者是干脆直接斷電源其實也沒有問題。
警告!!!!!!!!!!!!!!!!!!!!!!!!!
絕對不可以帶着電源的情況下插入攝像頭,如果帶電操作,十之八九你的攝像頭會GG,博主血淚教訓。而且攝像頭GG了之后每次調用還是會亮燈,只是你接受不到數據,這個問題我已經Google了很長時間,老外們也是一臉懵逼,大家普遍認為應該是被燒壞了= =
我們把攝像頭插到樹莓派上,如圖:
需要將攝像頭底下那個藍色的一面朝向USB接口那個方向,不要插反了。
等到你都安裝完畢了,確保連接好各個硬件之后再給電源。(千萬記得不要熱插拔攝像頭)
准備七牛雲
為什么非常突兀的在這里提到七牛雲,原因是我們總需要一個存儲監控的數據的空間,自己寫一個簡單的服務器代碼也是可以,不過雲服務器現在便宜的帶寬太小,貴的我們窮苦學生又玩不起,不如用一個七牛雲,簡單還免費。(實名注冊用戶擁有10G免費空間,題主markdown的圖片外鏈都是拿這兒做的)
首先我們來到七牛雲官網,注冊賬號 http://www.qiniu.com/
登錄之后,如圖操作
把這這個密鑰對存起來,我們一會用
我們需要新建一個倉庫,點開之后自己任意選節點,其實國內的幾個節點速度都差不多,完全可以滿足需求。
以后我們獲取的監控照片就可以來這里查詢
代碼
下面的代碼既可以現在本地上寫之后再用github克隆過去或者是U盤copy過去,或者是直接在樹莓派上寫都可以,不過記得如果是前者,那么安裝第三方庫和配置東西要同步配置。
首先,我們寫一個.sh腳本
take_photo.sh
raspistill -o current_photo.jpg
python test.py
然后安裝七牛雲的python SDK,在命令行內執行
sudo pip install qiniu
在take_photo.sh同目錄下我們建立一個test.py
# -*- coding: utf-8 -*-
import time
from qiniu import Auth, put_file, etag, urlsafe_base64_encode
import qiniu.config
import os
#需要填寫你的 Access Key 和 Secret Key
access_key = '' #這里的密鑰填上剛才我讓你記住的密鑰對
secret_key = '' #這里的密鑰填上剛才我讓你記住的密鑰對
#構建鑒權對象
q = Auth(access_key, secret_key)
#要上傳的空間
bucket_name = 'mypi'
#上傳到七牛后保存的文件名
key = '%s_%s_%s_%s_%s_%s.jpg'%(time.localtime()[0],time.localtime()[1],time.localtime()[2],time.localtime()[3],time.localtime()[4],time.localtime()[5])
#生成上傳 Token,可以指定過期時間等
token = q.upload_token(bucket_name, key, 3600)
#要上傳文件的本地路徑
localfile = 'current_photo.jpg'
ret, info = put_file(token, key, localfile)
filename = 'current_photo.jpg'
if os.path.exists(filename):
os.remove(filename)
這樣一來,我們每次執行take_photo.sh腳本,都可以讓樹莓派拍一張照片並且發送到七牛雲上,我們只需登錄就能看見下面這樣的數據
文件命名是以年月日時分秒的方式命名的
但是這樣我們總不可能手動的一次次執行,那樣也不叫監控了。最簡單的想法,我們可以利用Linux的定時任務crontab管理這個腳本
進入命令行,執行
crontab -e
在末尾追加上
* * * * * /home/pi/take_photo.sh
然后按Ctrl+x,按Y,保存修改。
之后重啟cron
sudo service cron restart
然后我們的定時監控就完成了!把它安放到想要的位置,它會每分鍾拍下照片並且發送到七牛雲,你可以使用七牛雲的本地同步工具qshell來方便的查看更新照片。
qshell使用教程 http://developer.qiniu.com/code/v6/tool/qshell.html
寫代碼的時候自動拍攝的樣圖:
其實本文涉及的內容僅僅是我們一門課程中的小項目三分之一的部分,原本的用途也不是作為家庭監控的,但拿出來與大家分享,無論你是從頭到尾實現這個監控器,還是取一小段用於他途,只要有幫助就好。
博客保持更新,願意來定時看我腦洞的,請關注我