8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Linux の LED 制御

Last updated at Posted at 2018-09-11

はじめに

LinuxでIoTデバイス開発をしていると、「LEDをこのパターンで点灯/消灯したい」という場合があります。
この記事ではその方法を記載します。

点灯/消灯

まず、対象のデバイスにどのようなLEDが定義されているかを確認しましょう。
下記コマンドを実行すると、以下のようにいくつかのディレクトリが表示されます。

$ ls /sys/class/leds/                                               
alfa:blue:lan   alfa:blue:wan   alfa:blue:wps                                   
alfa:blue:usb   alfa:blue:wlan  ath9k-phy0

このボードの場合は6つ表示されているので、6個のLEDが使用可能ということになります。

例としてLANを表すalfa:blue:lanを使用して説明していきます。
LANLEDという名前で定義しておきます。

LANLED="alfa:blue:lan"

以下のように記載することで、点灯できます。

echo "none" > "/sys/class/leds/$LANLED/trigger"
echo 255 > "/sys/class/leds/$LANLED/brightness"

同様に、下記で消灯です。

echo "none" > "/sys/class/leds/$LANLED/trigger"
echo 0 > "/sys/class/leds/$LANLED/brightness"

brightnessに書き込む値は、一般的には 0 が消灯で 1 以上が点灯です。
中間の明るさを表現できるLEDもありますが、私はあまりお目にかかったことはありません。

点滅

LEDを点滅させて欲しいという要求は割と多いものの、そのためだけにdaemonを起動するのはなるべく避けたいです。
IoTデバイスはリソースが限られるからです。
幸いなことにLinuxにはdaemonを用いずとも点滅させることができる仕組みがあります。
まず、下記コマンドでtriggerファイルに"timer"と書き込みます。
するとdelay_onとdelay_offというファイルが生えてきますので、これに対して点灯時間と消灯時間をmsec単位で書き込みます。
例えば1000msec点灯して500msec消灯するのを繰り返す場合は以下のように書き込みます。

echo "timer" > "/sys/class/leds/$LANLED/trigger"
echo 1000 > "/sys/class/leds/$LANLED/delay_on"
echo 500 > "/sys/class/leds/$LANLED/delay_off"

シェルで使う場合

OpenWrtの/lib/functions/leds.shに便利な関数が定義されているので、これを借用するのも手です。

led_set_attr() {
	[ -f "/sys/class/leds/$1/$2" ] && echo "$3" > "/sys/class/leds/$1/$2"
}

led_timer() {
	led_set_attr $1 "trigger" "timer"
	led_set_attr $1 "delay_on" "$2"
	led_set_attr $1 "delay_off" "$3"
}

led_on() {
	led_set_attr $1 "trigger" "none"
	led_set_attr $1 "brightness" 255
}

led_off() {
	led_set_attr $1 "trigger" "none"
	led_set_attr $1 "brightness" 0
}

例えば1000msec点灯して500msec消灯するのを繰り返す場合は以下のように書くだけでできます。

led_timer $LANLED 1000 500
8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?