新點子:用Raspberry Pi製作檯燈計時器

二月 25, 2014
Facebook
Twitter
本篇文章節錄自麥特理查森(Matt Richardson)與尚恩華勒斯(Shawn Wallace)合著的《Getting Started with Raspberry Pi》

請你想像以下的情境,明天早上你就要去度長假了,當家裡無人留守的時候,你希望留下一些東西來嚇唬小偷,於是你想到檯燈計時器是個不錯的選擇,但是三更半夜的五金行早就關了,你又要搭上明天一早的班機,根本來不及買,要怎麼辦才好呢?幸好,你身為一位Raspberry Pi的玩家,手邊剛好有以下這些零件:

  • Raspberry Pi 
  • 麵包板
  • 公接母跳線
  • PowerSwitch Tail II繼電器
  • 跳線

有了這些零件之後,就可以用shell程式和cron這兩款功能強大的Linux工具來做出你自己的檯燈計時器了。

程式指令

Shell程式檔裡頭有許多不同的指令可以使用(像你用來控制、讀取針腳的功能就是其中一種指令),請看看下面的shell程式,以及隨後的註釋。

#!/bin/bash #  (1)
echo Exporting pin $1. # (2) 
echo $1 > /sys/class/gpio/export # (3) 
echo Setting direction to out.
echo out > /sys/class/gpio/gpio$1/direction # (4) 
echo Setting pin high.
echo 1 > /sys/class/gpio/gpio$1/value
(1) 每一個shell 程式都需要這一行指令。
(2) $1代表第一個指令行參數。
(3) 程式檔將採用第一個指令行參數,而不是輸出某個特定的針腳編號。
(4) 請注意,第一個指令行參數在這邊也會取代針腳號碼。
將程式碼另存為文字檔,檔名如下:

on.sh

並透過chmod指令使它變成可執行的程式:

root@raspberrypi:/home/pi#
chmod +x on.sh

注意

如果出現「Permission denied」這個錯誤訊息,你就需要以root身分執行這些指令,請輸入:

sudo su

只要在指令後面輸入指令行參數,就可以將程式資訊傳遞到程式或程式檔中。當你在shell程式檔中輸入$1便代表第一個指令行參數,$2則表示第二個指令行參數,依此類推。而在

on.sh 

範例中,你要輸入你想輸出並想啟動的針腳編號,通常我們不會把針腳編號寫到程式中,而是直接在指令行中指定該針腳編號。假設要使25號針腳輸出並將啟動的話,請輸入:

root@raspberrypi:/home/pi/# ./on.sh 25 (1)
Exporting pin 25.
Setting direction to out.
Setting pin high.

(1)檔案名稱之前的「./」符號表示你將在這個資料夾位置中執行此程式。

如果你在前幾個章節中所使用的LED還連接在25號針腳上,那麼這時候它應該會亮起來。現在,我們就來編寫另外一個shell程式檔,名稱是:

off.sh

它的功能可用於將LED關閉,程式內容如下:

#!/bin/bash
echo Setting pin low.
echo 0 > /sys/class/gpio/gpio$1/value
echo Unexporting pin $1
echo $1 > /sys/class/gpio/unexport


現在,讓我們加上最後一步,使它變成可執行的程式檔:

root@raspberrypi:/home/pi/temp#
chmod +x off.sh

root@raspberrypi:/home/pi/temp#
./off.sh 25

Setting pin low.
Unexporting pin 25

如果程式正確的話,LED應該就會關閉。

連接檯燈

當然,Raspberry pi上面的小小LED光線根本不足以嚇唬小偷,使他們以為你還在家,所以,我們要將檯燈連接到Raspberry Pi上。

  1. 移除原先連接在25號針腳上的LED
  2. 將兩條跳線連上麵包板,其中一條連到Raspberry Pi25號針腳,另一條則接地。
  3. 連接到25號針腳的那條跳線另一頭則要接到PowerSwitch Tail繼電器的「+in」端。
  4. 接地的那條跳線則要接到PowerSwitch Tail繼電器上的「-in」那一端,完成之後,請將你的線路與圖7將Raspberry Pi 連上PowerSwitch Tail II繼電器」對照,確認連接正確。
  5. PowerSwitch插上電源,然後將一盞檯燈接上PowerSwitch Tail,另外,請確認檯燈的開關保持在「開」的狀態。
  6. 現在,當你執行

./on.sh 25

時,檯燈應該會打開,反之,再執行

./off.sh 25

時,檯燈就會關閉。

 

補充說明

PowerSwitch Tail裡有一些電子零件,能幫助你藉由像Raspberry Pi這樣的裝置來提供低電壓訊號控制像檯燈或果汁機這種需要高電壓的家電。在PowerSwitch Tail運作時,你所聽到的「喀啦」聲是繼電器將開關打開與關閉的聲音,這個繼電器就是線路中最核心的零件。繼電器就像開關一樣,可以根據Raspberry Pi上傳來的低電壓控制訊號打開或關閉這些家電的電源。

图片

將Raspberry Pi 連上PowerSwitch Tail II繼電器。

使用CRON來訂立時間表

到目前為止,你已經將許多不同的指令濃縮成兩種可用來控制針腳開啟與關閉的簡單指令了。而在將檯燈透過PowerSwitch Tail連上Raspberry Pi之後,甚至只要用一種指令來將檯燈打開或關上。現在,你可以使用

Cron

來設定時間,將檯燈在不同的時間打開或關上。 

Cron

是Linux系統中的作業排序功能。有了這個功能之後,你就可以設定在特定日期與時間時執行某個指令,或者每隔一段時間重複執行同一個指令(比方說,每小時一次)。在這個專題當中,你需要安排兩個時程:每天晚上八點時開燈,凌晨兩點則關燈。

注意
和其他關係到時間的程式相同,在開始執行之前,必須要確認Raspberry Pi上面的時間日期設定無誤。
要加入這些工作的時候,需要編輯cron表單(也就是一個指令列表,告訴Linux要在什麼時候執行哪些指令):

root@raspberrypi:/home/pi/# 
crontab -e

這樣一來系統會啟動文字編輯器來修改root中的cron表單,以下這一步是要以root使用者輸入指令:

sudo su

打開檔案之後,你會看到一些關於cron表單修改的說明,請使用滑鼠的游標移動到檔案最下方,並在檔案下方加入兩行新的文字。

0 20 * * * /home/pi/on.sh 25
0 2 * * * /home/pi/off.sh 25

提示

Cron
會忽略任何「#」號開頭的指令行,所以如果你需要讓某一行指令暫時失去作用,又不想直接刪除這行指令,可以在該行最前面加上「#」。

輸入

Control-X

就會離開文字編輯器,再輸入

y

就可以存檔。然後,按下Enter鍵套用預設的檔名就行了。檔案存好之後,你會回到指令輸入介面,應該會出現:

installing new crontab

表示你剛才所做的修改會由 

Cron

來執行。

更多Cron的功能

Cron可以記錄你排定在特定日期、時間或間隔下所要執行的工作,有五種時間選項(如果加上以年為單位的話,共有六種),每一個要用空格隔開,最後還要加上一個空格,再輸入待執行的指令,「*」符號表示每一個要執行指令的時間,舉例來說:
图片

表1. 每天晚上八點將燈打開的Cron表單

比方說你希望讓檯燈在週一到週五都會打開,那麼表單應該要這樣輸入:
图片

表2. 週一到週五每天晚上八點將燈打開的Cron表單

現在,假設你寫了一個shell程式檔,每五分鐘會幫你進行電子郵件的收發動作,那麼工作時間間隔的設定就會像是這樣:
图片

表3. 每五分鐘用電子信箱收一次信的Cron表單

如你所見,

Cron

是一個非常強大的工具,讓你可以任意決定工作要在哪個特定的時間、日期或時間間隔來執行。

 

更多資源

eLinux的Raspberry Pi的GPIO針腳參考頁面

這裡有關於Raspberry Pi的GPIO針腳詳盡的參考資源。

Adafruit:Raspberry Pi的MCP230xx GPIO擴充針腳

如果你覺得針腳數量不足,Adafruit提供了這個指南,讓你可以使用MCP23008這個晶片來擴充8支GPIO針腳,或者選用MCP23017晶片,來擴充16支GPIO針腳。


图片

BY Stett Holbrook

Stett身為《Make》雜誌的資深編輯,對於飲食、自行車、木工以及環保企業有著高度的興趣,同時他也是兩個小創客的爸爸。
他也是PBS電視紀錄片〈Food Forward〉的共同創作人,這是一部描述新創產業與先驅產業如何影響整個食物系統。

你可與史戴特討論關於下列議題:*食物*永續設計/綠設計*科學*小創客*運動體育


[原文]


Social media & sharing icons powered by UltimatelySocial