這裡介紹如何撰寫程式控制樹莓派(Raspberry Pi)板子上內建的 ACT LED 指示燈。

樹莓派 Raspberry Pi B+ 上面有一個綠色的 ACT LED 指示燈,在預設的狀況下只要系統有存取 MicroSD 卡時,這個指示燈就會發亮,而這個指示燈也可以讓使用者透過程式來控制,依照使用的需求來動作。


首先進入 code 目錄中:

cd /sys/class/leds/ACT

這個目錄中包含了所有控制 ACT LED 指示燈會用到的系統檔案。

raspberry-pi-control-act-led-2

trigger

trigger 是用來設定指示燈觸發條件的檔案,預設的 trigger 設定會是 mmc0(MultiMediaCard),代表存取 MicroSD 卡時觸發 LED 指示燈,如果您將 trigger 這個檔案直接用 cat 輸出,其內容會像這樣:
none [mmc0] timer oneshot heartbeat backlight gpio cpu0 default-on
中括號代表目前所選擇的觸發條件,而其餘的都是使用者可以選擇的選項,以下介紹各種選項的使用方式。

手動控制指示燈

如果要完全使用手動控制指示燈,可以將觸發條件設定為 none

sudo sh -c 'echo none > trigger'

或是直接切換成 root 再執行也可以:

sudo su
echo none > trigger

然後再更改 brightness 的內容來控制燈號,設為大於 0 的值會讓指示燈開啟:

sudo sh -c 'echo 1 > brightness'

設定為 0 則會讓指示燈關閉:

sudo sh -c 'echo 0 > brightness'
brightness 的值可以設定的範圍是從 0max_brightness 的值(也就是 255)之間,在一般的 Linux 下使用者可以透過 brightness 調整 LED 的亮度,不過由於 Raspberry Pi 的硬體不支援亮度的調整,只能開啟或是關閉,所以在 Raspberry Pi 上面,只要將 brightness 設定為大於 0 的值,不管其值為何,效果都是一樣的(都是開啟 LED 指示燈)。

One-shot LED Trigger

這種觸發條件適合用於一些沒有明確開啟與關閉的事件,使用這種觸發條件時,使用者只需要在事件發生時送出訊號,而指示燈在收到觸發訊號時會開啟,經過一小段時間後自動關閉。

這種觸發條件可以同時適用於較稀疏或是較密集的觸發事件,如果觸發事件很稀疏,那麼每一個事件觸發時指示燈就會閃一下,而如果觸發事件非常密集而且連續不斷,那麼指示燈就會以固定的頻率持續閃爍,表示持續有事件被接收到。

在使用這種觸發事件時,首先將 trigger 設定為 oneshot

sudo sh -c 'echo oneshot > trigger'

然後將 shot 設定為 1 來觸發事件:

sudo sh -c 'echo 1 > shot'

如果要更改持續事件的閃爍頻率,可以修改 delay_ondelay_off 兩個檔案內容:

sudo sh -c 'echo 33 > delay_on'
sudo sh -c 'echo 33 > delay_off'

這樣持續觸發事件閃爍的頻率就是 1 / (33 + 33) Hz。

一般來說觸發事件時,指示燈會開啟,平常如果沒有事件的時候,指示燈是熄滅的。而這個邏輯規則可以靠 invert 來調整,如果 invert 設定為 0(這是預設的狀況):

sudo sh -c 'echo 0 > invert'

指示燈在觸發時會開啟 delay_on ms,然後關閉 delay_off ms,如果設定為 1

sudo sh -c 'echo 1 > invert'

則會相反,在事件觸發時指示燈會關閉 delay_off ms,然後開啟 delay_on ms,平常沒有事件時,指示燈則是保持開啟的狀態。

以 CPU 狀態觸發

依照 CPU 的狀態觸發指示燈:

sudo sh -c 'echo cpu0 > trigger'

當 CPU 忙碌時指示燈就會開啟,當 CPU 進入 idle 狀態時則熄滅。

定時閃爍

不需任何觸發事件,讓指示燈依照固定的頻率持續閃爍:

sudo sh -c 'echo timer > trigger'

閃爍的頻率同樣可以透過 delay_ondelay_off 兩個檔案來指定:

sudo sh -c 'echo 50 > delay_on'
sudo sh -c 'echo 50 > delay_off'

模仿心跳閃爍

類似 timer,不過模仿心跳的方式閃爍:

sudo sh -c 'echo heartbeat > trigger'

持續開啟指示燈

trigger 設定為 default-on 會讓指示燈持續開啟:

sudo sh -c 'echo default-on > trigger'

如果您對於樹莓派的應用有興趣,建議您可以繼續閱讀物聯網的相關文章。

參考資料:Raspberry PiGitHubGitHub