前言
紀錄如何使用RaspberryPi實現通用資料紀錄系統。使用YouTube作為上傳平台,製作出有自動紀錄溫溼度功能的縮時攝影;實際上的功能為偵測溫溼度後,把溫溼度鑲嵌在照片上,最後再把照片們壓製成影片,上傳到YouTube上。而這一些過程全都是由RaspberryPi自動進行。
總共會分成九個部分介紹,分別是
- 安裝作業系統以及環境配置。
- 溫溼度感測。
- 照片拍攝。
- 後製以及壓制影片。
- 上傳至Youtube。
- 檢查MD5碼及嵌入個人網頁。
- 清除舊有資料。
- 設定排程。
- 實際機器照片。
(以下所有圖片點選後皆會放大。)
安裝作業系統以及環境配置
首先必須到RaspberryPi官方網站(https://www.raspberrypi.org/)下載作業系統。
這裡使用Noobs版本,比較方便上手。下載完檔案解壓縮,把檔案移到SD卡裡面即可。
接下來把SD插入RaspberryPi的晶片內,接上HDMI螢幕以及鍵盤滑鼠後,就可以接上電源。(注意:因為沒有開機鍵,因此插上電源就會自動開機。)第一次開機後會顯示以下的畫面,我們安裝預設推薦的作業系統Raspbain。
安裝結束之後就會進入Linux系統,並跳到基礎設定畫面。我們要在這裡設定密碼、開啟相機功能還有開啟SSH(SSH的選項在進階選項之中)。設定完畢之後選擇Finish重新啟動系統。
登入時需要輸入帳號密碼,帳號為pi,密碼為剛才修改後的密碼。如果剛才沒有變更密碼則是預設的raspberry。
由於SSH需要接上網路才能使用,因此我們必須設定Wi-Fi環境;十分方便,只要設定一次之後,以後系統就會自動幫我們連線。我們使用圖像模式來設定Wi-Fi比較方便,在指令欄輸入”startx”即可進入圖形模式。
點選Scan之後,可以搜尋附近有的Wi-Fi網路。連結之後會顯示使用的IP位置,接下來使用putty時需要用到。
下載putty之後(http://www.putty.org),在視窗內輸入剛才的IP位置即可連線。
另外也可以使用windows的遠端桌面連線,直接連線到圖形模式。但是需要先幫RaspberryPi另外安裝組件。
sudo apt-get install xrdp
再來進行一些簡單的環境配置。首先是安裝python的開發套件,以及設定編譯器。第一行的update為更新現有資料庫位置,推薦在安裝任何額外套件時輸入以免發生問題,Vim為Linux普遍使用的編譯器,pip為安裝python額外套件時的小工具。Dev則為python開發套件。
sudo apt-get update
sudo apt-get install vim
sudo apt-get install python-pip
sudo apt-get install python-dev
安裝完畢之後,稍微設定vim編譯器,方便之後撰寫程式。要修改vim資料夾裡的設定檔vimrc。
cd /etc/vim/ #移動到vim資料夾
sudo vim vimrc #使用vim開啟設定檔
開啟vimre檔之後,直接在文件內加上以下指令即可。
syntax on #自動語法高量
set number #顯示行號
set autoindent #自動縮排
設定結束後,如果再重新開啟設定檔的話,會變成以下的樣子,表示設定成功。
溫溼度感測
主要是參考此網頁。(http://ruten-proteus.blogspot.tw/2012/11/raspberry-pi-lcd-dht-11.html)
溫溼度感測器的接法在這裡就不再多敘述,可以參考上方網頁。我們使用此網站的Code進行溫濕度的感測,需要在此下載程式碼。
cd #確認回到主目錄
mkdir DHT_CharLCD #建立資料夾名稱為 DHT_CharLCD
cd DHT_CharLCD #進入名為 DHT_CharLCD 的資料夾
wget -O – http://goo.gl/Km0ye | tar xvf – #下載程式碼
sudo ./DHT 11 15 #確認程式碼可執行,線路沒有接錯
cd #確認回到主目錄
vim photo.py #創立第一個程式碼
結束之後按下esc,再輸入:wq存檔。想要測試程式是否可以執行的話,輸入”sudo python photo.py”即可。由於DHT11感測器有頻率的問題,因此讀取溫溼度時有可能需要重複嘗試。
照片拍攝
cd #回到根目錄
mkdir TempPhoto #先建立一個暫存相片的資料夾
cd #回到根目錄
vim photo.py #開啟剛才的python檔
直接在剛才的photo.py中加入以下程式碼。
若想測試可以執行photo.py,即可完成照相動作,如下圖(這邊使用遠端桌面連線觀看)。
後製以及壓制影片
我們需要使用其他套件進行照片的後製處理,把每一次拍照時一同記錄的溫濕度鑲嵌在照片上。下載Pillow和讀取jpeg的套件組。並新增另一個python檔叫做video.py。
sudo apt-get update
sudo apt-get install libjpeg-dev
sudo pip install Pillow
vim video.py
再來是壓制影片的部分,我們使用ffmpeg套件。由於ffmpeg的套件十分的便利,安裝完之後只要在程式上多加上一行即可完成壓制影片的設定。
sudo apt-get install ffmpeg
壓制成功的畫面會像這樣。(這邊只有壓制一張照片,實際動作時畫面會更長,壓制時間也會更久)
上傳至YouTube
再來應該說是本系統最麻煩的部分,自動上傳到YouTube的設定。可以參考YouTube官方的文件進行設定。(https://developers.google.com/youtube/v3/guides/uploading_a_video)
而我們也需要安裝Google的套件才可以使用此功能。我們建立一個upload_video.py檔,而裡面的Code就直接複製Google官方的即可,這邊就不列出程式碼,請參照上方網址。
再來我們需要在自己的YouTube帳號申請API授權(https://console.developers.google.com/project),到API的地方啟用
“YouTube Data API”,再到驗證的地方建立新的用戶端ID。
接著我們要下載json檔提拱給upload_video.py使用。這邊要使用遠端桌面連線進行下載。下載好json檔之後,從Downloads資料夾裡面移出檔案,並從新命名為”client_secrets.json”。再執行剛剛的upload_video.py檔(記得使用遠端桌面執行),執行後會給一段網址請你去點擊;如果出現”重新導向 URI”不正確,請在Google網站憑證那裡修改重新導向 URI,之後再重新下載一次json檔。成功的話會跳出以下畫面,按下”接受”鍵即可。
此時應該可以成功上傳影片到YouTube上,但我們還要進行一些細部設定,像是影片名稱和隱私設定。在upload_video.py最下方設定。
最後在video.py中,加上呼叫upload_video.py即可。
檢查MD5碼及嵌入個人網頁
由於YouTube會自動傳回影片的ID碼,所以我們可以利用這個ID碼把影片鑲嵌在個人網頁之中,這邊使用本實驗室作為範例。但為了防止大家都可以上傳到實驗室網頁之中,我們使用檢查MD5碼的機制;在此利用hashlib完成這個功能。
sudo pip install hashlib
而實驗室網頁的接應程式如下。只要收到有人連結到此程式,便會判定MD5碼是否正確再動作。
實際嵌入影片至實驗室的程式碼。
清除舊有資料
最後則是上傳完影片之後,把暫存資料夾裡面的所以檔案清除,以免影響下一天的系統執行。
再開一個新的檔案clean.py。
設定排程
最後是設定Linux系統的排程,我們現在有四個python檔案,分別為溫溼度感測和照相功能的photo.py、後製加壓制影片以及上傳至YouTube的video.py、Google官方衍生的upload_video.py、最後是清除動作的Clean.py。這裡我們設定每三分鐘進行一次拍照功能,從早上5點一直到晚上11點;並且在晚上11點30分進行重新開機的動作;12點開始進行影片後製和上傳,由於壓制影片需要一段時間,所以特別留了一段時間後才重新開機;隔天的4點30分再重新開機一次;4點35分清除所有資料;等到5點時便會開始拍攝新的一天。
crontab –e -l #輸入crontab 後方加上-e可以編輯,加上-l可以觀看目前有的所有排程,一次輸入一個
0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 5-22 * * * sudo python photo.py
30 23 * * * sudo reboot
0 0 * * * sudo python video.py
30 4 * * * sudo reboot
35 4 * * * sudo python clean.py
實際機器照片
使用LEGO包裝外觀,可防止輕微雨水,又方便自由組裝。實際為11cm x 8cm x 5cm的長方體。
實際上工作時的英姿,因擔心被風吹落,因此用膠帶緊黏在書本上。
結尾
經過這些步驟之後,就可以簡單地完成通用資料紀錄系統。這次使用的是溫溼度與相機還有YouTube的結合,但除此之外也可以發展出其他功能,像是換掉現有的感測器,或是換掉Youtube平台使用其他社群平台都可以,因此本系統還有很廣的發展性。而說實在我所撰寫的Code並沒有十分的精簡漂亮,大多是東拼西湊湊出功能來,所以修改的空間也很大。附上完整的程式碼。(https://github.com/JohnSmithWithHuruhi/Pi)
後記
特別感謝專題指導教授-黃騰毅教授,讓我做出比最初想像還好的專題成果;老師的點子和意見一直都切中核心問題。題外話是最近應徵工作時面試都是拿此專題出去面對,但現時間點最終結果還沒有出來就是。最後在這裡用此專題成果為台科大的四年學習時光畫下句點。在此紀念かをりちゃん,沒有你的四月,04.28.2015 (05.10補上第九章。)
Recent Comments