1. 程式人生 > >樹莓派定時採集影象上傳到伺服器

樹莓派定時採集影象上傳到伺服器

樹莓派採集圖片定時上傳至伺服器

準備圖片儲存伺服器

在做這個系統之前,得先選擇一個可以上傳圖片的伺服器,當然,可以自己做一個小伺服器,但是我選擇了七牛網,因為它是一個免費的雲圖庫,而且我平時寫MarkDown也可以用這個

先要註冊登入,之後,如圖操作
建立一個儲存空間picture

然後再進入這個頁面記住AK(access_key )和SK(secret_key )。

# -*- coding: utf-8 -*-
# flake8: noqa
from qiniu import Auth, put_file, etag, urlsafe_base64_encode
import qiniu.config

#獲取圖片
os.system('raspistill -o current_photo.jpg') #需要填寫你的 Access Key 和 Secret Key access_key = 'Access_Key' secret_key = 'Secret_Key' #構建鑑權物件 q = Auth(access_key, secret_key) #要上傳的空間 bucket_name = 'Bucket_Name' #上傳到七牛後儲存的檔名 key = 'my-python-logo.png'; #生成上傳 Token,可以指定過期時間等 token = q.upload_token(bucket_name, key, 3600
) #要上傳檔案的本地路徑 localfile = './sync/bbb.jpg' ret, info = put_file(token, key, localfile) print(info) assert ret['key'] == key assert ret['hash'] == etag(localfile)

安裝七牛雲的python SDK

  • 直接安裝:
    pip install qiniu

    easy_install qiniu
  • 原始碼安裝
    #從Python SDK 下載地址下載原始碼
    tar xvzf python-sdk-VERSION.tar.gzcdpythonsdkVERSION
    python setup.py install
  • 在嵌入式系統中(樹莓派)
    sudo pip install qiniu

程式碼

首先建一個get_photo.sh指令碼檔案

python get_picture.py 

然後在/home/camera中建立一個檔案get_picture.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 = 'picture'

#上傳到七牛後儲存的檔名
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)

每次執行一次該程式就會自動上傳一張圖片,現在就差定時部分。

樹莓派/Linux定時執行python指令碼

  1. 開啟crontab日誌。

crontab預設不開啟日誌,所以先開啟定時任務的日誌來檢視

修改rsyslog服務,將 /etc/rsyslog.d/50-default.conf 檔案中的 #cron.* 前的 # 刪掉;用service rsyslog restart重啟rsyslog服務:

  1. 寫定時任務

crontab -e

開啟本使用者的定時任務,即建立以本使用者名稱為檔名的定時任務檔案,位置在/var/spool/cron/crontabs/。

定時任務語句格式為:執行週期+命令,週期有5個域,分別是

分鐘,小時,日(day of month),月(month of year),周幾(day of week).

每個域不加限制任意的話用,整體格式為: * * * * command

比如我的指令碼是 /home/camera/get_photo.sh

執行環境為 /usr/bin/python2.7

每5分鐘執行一次

則語句為

/5 * * * /usr/bin/python2.7 /home/camera/get_photo.sh

寫完後重啟cron 服務

service cron restart

順便附上常用的週期格式

每五分鐘執行 /5 * * *

每小時執行 0 * * * *

每天執行 0 0 * * *

每週執行 0 0 * * 0

每月執行 0 0 1 * *

每年執行 0 0 1 1 *

簡單總結一下定時指令碼:

crontab -e
選擇vim進入,到末尾輸入 o
然後在末尾加入
*/5 * * * * /home/camera/get_photo.sh
然後按Esc->:wq->換行退出
最後重啟cron
sudo service cron restart

實物圖

最終在七牛雲上看到的效果