NanoPi NEOのLED
NanoPi NEOにはボード上のマイクロSDカードスロットとマイクロUSBコネクタの間に緑と青の2つのLEDがあります。
デフォルトの動作は以下の通り。
- 緑はPower LEDで電源が入るとずっと点灯
- 青はStatus LEDでカーネルが起動した後に点滅。
これらのLEDはLinuxのled class デバイスドライバとして実装されているので、Linuxの標準の方法で制御することができます。
LEDクラスドライバ
カーネルのドキュメント
https://www.kernel.org/doc/Documentation/leds/leds-class.txt
/sys/class/leds を散策してみます。
# cd /sys/class/leds/
# ls
nanopi:blue:status nanopi:green:pwr
# cd nanopi\:blue\:status/
# ls -l
total 0
-rw-r--r-- 1 root root 4096 Jan 1 02:09 brightness
lrwxrwxrwx 1 root root 0 Jan 1 02:09 device -> ../../../leds
-rw-r--r-- 1 root root 4096 Jan 1 02:09 invert
-r--r--r-- 1 root root 4096 Jan 1 02:09 max_brightness
drwxr-xr-x 2 root root 0 Jan 1 02:09 power
lrwxrwxrwx 1 root root 0 Jan 1 02:09 subsystem -> ../../../../../class/leds
-rw-r--r-- 1 root root 4096 Jan 1 02:09 trigger
-rw-r--r-- 1 root root 4096 Jan 1 02:09 uevent
# cat trigger
none rfkill-any kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock mmc0 [heartbeat] default-on
#
起動時に青LEDが点滅するのは、heartbeatをトリガーにしていました。
brightnessに値を書き込んで点灯消灯させる例
緑のLEDを1秒点灯、0.2秒消灯を繰り返す。
ゆったりした正常動作っぽい感じの表示になります。(主観です。)
# !/bin/sh
echo none > /sys/class/leds/nanopi:green:pwr/trigger
while :;do
echo 1 > /sys/class/leds/nanopi:green:pwr/brightness
sleep 1
echo 0 > /sys/class/leds/nanopi:green:pwr/brightness
sleep 0.2
done
青のLEDを0.05秒点灯、0.05秒消灯を繰り返す。
イライラしたエラーっぽい感じの表示になります。(主観です。)
# !/bin/sh
echo none > /sys/class/leds/nanopi:blue:status/trigger
while :;do
echo 1 > /sys/class/leds/nanopi:blue:status/brightness
sleep 0.05
echo 0 > /sys/class/leds/nanopi:blue:status/brightness
sleep 0.05
done
点灯時間と消灯時間を指定して点滅させる例
時間の制御をカーネル自身にやらせることもできます。
triggerにtimerを指定するのですが、NanoPi NEOのデフォルトのカーネルではこれが有効になっていないので、カーネルのコンフィグに以下を追加してカーネルをリビルドします。
CONFIG_LEDS_TRIGGER_TIMER=y
緑のLEDを1秒点灯、0.2秒消灯を繰り返す。
# !/bin/sh
echo timer > /sys/class/leds/nanopi:green:pwr/trigger
echo 1000 > /sys/class/leds/nanopi:green:pwr/delay_on
echo 200 > /sys/class/leds/nanopi:green:pwr/delay_off
青のLEDを0.05秒点灯、0.05秒消灯を繰り返す。
# !/bin/sh
echo timer > /sys/class/leds/nanopi:blue:status/trigger
echo 50 > /sys/class/leds/nanopi:blue:status/delay_on
echo 50 > /sys/class/leds/nanopi:blue:status/delay_off
両方のLEDの点滅を止めて消灯。
# !/bin/sh
echo none > /sys/class/leds/nanopi:blue:status/trigger
echo none > /sys/class/leds/nanopi:green:pwr/trigger
echo 0 > /sys/class/leds/nanopi:blue:status/brightness
echo 0 > /sys/class/leds/nanopi:green:pwr/brightness