35
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

メモ:Raspberry Piの基板上のLEDを別の用途に使う

Raspberry Piの基板上にはLEDが2つあって、1つは電源(赤)、もう1つはGPIO接続のLED(緑)。
参考: Raspberry Pi Schematics
デフォルトの状態では点灯トリガが「mmc0アクセス時」になっている。これを変更することで別の使い方ができる。

sysfs経由で制御する。

$ cd /sys/class/leds/led0
$ ls -la
合計 0
drwxr-xr-x 3 root root    0  6月 15 00:27 .
drwxr-xr-x 3 root root    0  6月 15 00:27 ..
-rw-r--r-- 1 root root 4096  6月 15 00:27 brightness
lrwxrwxrwx 1 root root    0  6月 15 00:27 device -> ../../../leds-gpio
-r--r--r-- 1 root root 4096  6月 15 00:27 max_brightness
drwxr-xr-x 2 root root    0  6月 15 00:27 power
lrwxrwxrwx 1 root root    0  6月 15 00:27 subsystem -> ../../../../../class/leds
-rw-r--r-- 1 root root 4096  6月 15 00:29 trigger
-rw-r--r-- 1 root root 4096  6月 15 00:27 uevent

現在設定されている点灯トリガの確認をする。

$ cat trigger
none [mmc0] timer oneshot heartbeat backlight gpio cpu0 default-on input rfkill0 phy0rx phy0tx phy0assoc phy0radio

デフォルトで[mmc0](mmc0アクセス時に点灯)に設定されている。
heartbeatに変更してみる。

$ sudo sh -c "echo heartbeat > trigger"
$ cat trigger
none mmc0 timer oneshot [heartbeat] backlight gpio cpu0 default-on input rfkill0 phy0rx phy0tx phy0assoc phy0radio

一定間隔でチカチカと点灯する(ハートビート)ようになる。
initスクリプトなどで設定してあげれば、kernelが起動できているかどうかの確認用に使える。

点灯トリガをnoneにし、brightnessに明るさの値を設定してあげることで、点灯状態を制御できる。明るさとして設定できる最大値はmax_brightnessの値となる。

$ cat max_brightness
255
$ cat brightness
0
$ sudo sh -c "echo none > trigger"
$ cat trigger
[none] mmc0 timer oneshot heartbeat backlight gpio cpu0 default-on input rfkill0 phy0rx phy0tx phy0assoc phy0radio

GPIO接続のため単純なON/OFF制御しかできないので、brightnessに書き込む値は、0以外で点灯、0で消灯になる。

$ sudo sh -c "echo 255 > brightness"
$ sudo sh -c "echo 0 > brightness"

/boot/config.txtにDevice Treeのパラメータを記述することで、点灯トリガの初期値を変更することができる。詳しくは/boot/overlays/READMEを確認すること。
(Raspberry Pi 3 については、接続の関係で下記の方法と違う設定となる。/boot/overlays/README内のpi3-act-led設定を確認すること)

点灯トリガをheartbeat状態で起動するのであれば、

dtparam=act_led_trigger=heartbeat

none状態(消灯状態)で起動するのであれば、以下のように書いておく。

dtparam=act_led_trigger=none

sysfsのLEDクラスについては、kernelソースのドキュメントディレクトリ Documentation/leds/leds-class.txt に記載がある。
他の点灯トリガについては、kernelソースのディレクトリ drivers/leds/trigger を確認する。
あるいは、kernelソース全体から 関数 led_trigger_register() 、および関数 led_trigger_register_simple() を呼び出しているところを探す。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
35
Help us understand the problem. What are the problem?