
この記事ではRaspberry Piの基板上の赤色と緑色のLEDを付けたり消したりする方法ついて解説しています。
複数台のRaspberry Piが密集していたり、接続しているRaspberry PiがどれかわからなくなったときにLEDを任意のタイミングで光らせることによって判断することができるので便利です!
この記事でできること
- Raspberry Piの基板上のLEDを光らせる。
triggerを設定して光るタイミングを制御する。
作業
とりあえずON/OFFしてみる
まずはコマンドラインからLEDがON/OFFできるのか試してみましょう。
/sys/class/leds/というディレクトリ内にled0/とled1/というディレクトリがあります。Raspbianのバージョンによってはled1/が存在していない場合もあります。
led0/内のファイルを操作すると、緑色のLEDを操作することができます。今回はコチラをメインにあれこれしていきます。led1/のほうは赤色のLEDのほうを操作することができるのですが、コチラは電源がONになっているか確認するために(個人的には)必要なのでそのままにしておきます。
LEDを操作するためのファイルをいじるためにはそのままだと管理者権限が必要になるので、su -でrootユーザーになります。
$ su - # cd /sys/class/leds/led0 # ls -l -rw-rw-rw- 1 root root brightness lrwxrwxrwx 1 root root device -> ../../../leds -r--r--r-- 1 root root max_brightness drwxr-xr-x 2 root root power lrwxrwxrwx 1 root root subsystem -> ../../../../../class/leds -rw-rw-rw- 1 root root trigger -rw-r--r-- 1 root root uevent
今回触るファイルはbrightnessとtriggerというファイルです。
以下のコマンドを実行することで、LEDを常時点灯させることができます。
# echo 1 > brightness
点灯しない場合は、echo 0 > brightnessを一度実行してから再度1で実行してみてください。brightnessが0だと常時消灯、1 - 255の値だと点灯となります。それ以外の文字列などを書き込もうとするとエラーとなります。
消すときは繰り返しになりますが、以下のコマンドで常時点灯にすることができます。
echo 0 > brightness
ただ、このままだと今までSDカードのアクセス時にピカピカしていたLEDがずっと消えたままになってしまいます!元の設定に戻すために次はtriggerを設定します。
triggerを設定して光らせる
まずは中身を見てみます。
# cat trigger [none] rc-feedback kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock timer oneshot heartbeat backlight gpio cpu cpu0 cpu1 cpu2 cpu3 default-on input panic mmc1 mmc0 rfkill-any rfkill0 rfkill1
設定することのできるトリガーの一覧が表示されます。[]で囲まれている設定が現在適用されているものです。echo 0 > brightnessすると自動的にnone(光らせない)に設定されます。
他の設定値の意味はおおむね以下のようになっています。
| 設定値 | LEDが光るタイミング |
|---|---|
| kbd-scrolllock | ScrollLock押下 |
| kbd-numlock | NumLock押下 |
| kbd-capslock | CapsLock押下 |
| kbd-kanalock | KanaLock押下(?) |
| kbd-shiftlock | ShiftLock押下(?) |
| kbd-altgrlock | AltGrave押下(?) |
| kbd-ctrllock | Ctrl押下 |
| kbd-altlock | Alt押下 |
| kbd-shiftllock | 左Shift押下 |
| kbd-shiftrlock | 右シフト押下 |
| kbd-ctrlllock | 左Ctrl押下 |
| kbd-ctrlrlock | 右Ctrl押下 |
| timer | 1秒起きに点滅 |
| oneshot | 1回だけ短く点灯 |
| heartbeat | 心拍のように点滅 |
| backlight | 常時点灯 |
| gpio | GPIOピンの特定ピンを検知して点灯(?) |
| cpu | CPU使用時 |
| default-on | 常時点灯 |
| input | キー入力時に点滅 |
| panic | カーネルパニック発生時に点滅 |
| mmc0 | SDカード書込み時に点灯 |
| mmc1 | (2番目のSDカード書込み時に点灯) |
| rfkill0 | WiFi動作時に点滅 |
| rfkill1 | Bluetooth動作時に点滅 |
以下より引用し和訳。一部省略・修正・追記。 https://raspberrypi.stackexchange.com/questions/69674/are-there-other-act-led-trigger-options-besides-mmc-and-heartbeat
のようになっているようです。太字にしている箇所は使えそうだと感じる設定です。
デフォルトではmmc0がオンになっているのでSDカードの読み書き時に点滅するようになっています。
設定値を変更するには以下のコマンドを実行します。
# echo timer > trigger
とすることでtimerに設定され、LEDが1秒起きに点滅します。triggerの設定値の場合も上記以外の値(cat triggerで表示されるもの以外の値)を設定しようとするとエラーとなります。
もともとの設定に戻すにはmmc0を設定してあげます。
# echo mmc0 > trigger
これで元に戻りました。apt-get updateなど書込みが発生するコマンドを実行してみて確認してください。
権限を変更する
いちいち管理者権限で実行するのも面倒なので、このbrightnessとtriggerファイルを普通のユーザーでも読み書きできるように設定します。
以下のコマンドを実行して権限を追加します。
# chmod 666 brightness trigger
これで普通のユーザーでもLEDを操作することができるようになります。
$ echo timer > /sys/class/leds/led0/trigger # LEDが点滅する $ echo mmc0 > /sys/class/leds/led0/trigger # 元に戻す
参考
triggerで指定できる値と効果について