BeagleBoneのオンボードLED制御
BeagleBoneでLED4つ実装している。それぞれの名称はusr0、usr1、usr2、usr3だ。 LEDはトリガー(trigger)によって制御されている。
下記のフォルダにそれぞれLEDの制御フォルダがある /sys/class/leds/ しかし、本体は/sys/devices/platform/leds-gpio/leds に指しているシンボリックリンクだ beaglebone::usr0 -> ../../devices/platform/leds-gpio/leds/beaglebone::usr0 beaglebone::usr1 -> ../../devices/platform/leds-gpio/leds/beaglebone::usr1 beaglebone::usr2 -> ../../devices/platform/leds-gpio/leds/beaglebone::usr2 beaglebone::usr3 -> ../../devices/platform/leds-gpio/leds/beaglebone::usr3
それぞれのLED制御フォルダに下記にファイルがある: 1,brightness 説明:値が0なら消灯、値が1なら点灯となる。 例:echo 1 > brightness 2,device -> ../../../leds-gpio 説明:特に使い道なし 3,max_brightness 説明:(TBD) 4,power 説明:(TBD) 5、subsystem -> ../../../../../class/leds 説明:特に使い道なし 6,trigger 説明:LED制御トリガー トリガーはnone mmc0 timer heartbeat backlight gpio default-on7種類だ。 設定するため、viで編集するのではなく、echo で変更する 例:$ echo none > trigger 有効中の設定は四角カッコで囲っている 例: $ cat trigger [none] mmc0 timer heartbeat backlight gpio default-on none:未設定 mmc0:SDカードスロット(SDカードにアクセスした場合LED点灯) timer:LEDのon,offタイマー設定 $ echo timer > trigger この設定を有効にした場合、delay_offとdelay_onファイルが作成される。 delay_off:消灯間隔(ms) delay_on:点灯間隔(ms) 例:点灯5秒消灯1秒のパターン $ echo 5000 > delay_on $ echo 1000 > delay_off 設定しない場合デフォルトはどちらも500msとなっている。 heartbeat:生存監視 backlight:(TBD) gpio:(TBD) default-on:(TBD) 7,uevent 説明:(TBD)
デフォルトで付属のAngstromLinuxでは下記の動作となっている。 usr0:heartbeat usr1:mmc(つまりSDカードアクセス) usr2:未使用 usr3:未使用
LEDテストスクリプトを作成した:testled.sh
#!/bin/sh led="/sys/class/leds/beaglebone::" get_led_state () { usr0_trigger=`cat ${led}usr0/trigger | sed -e "s/^.*\[\(.*\)\].*$/\1/"` usr1_trigger=`cat ${led}usr1/trigger | sed -e "s/^.*\[\(.*\)\].*$/\1/"` usr2_trigger=`cat ${led}usr2/trigger | sed -e "s/^.*\[\(.*\)\].*$/\1/"` usr3_trigger=`cat ${led}usr3/trigger | sed -e "s/^.*\[\(.*\)\].*$/\1/"` usr0_brightness=`cat ${led}usr0/brightness` usr1_brightness=`cat ${led}usr1/brightness` usr2_brightness=`cat ${led}usr2/brightness` usr3_brightness=`cat ${led}usr3/brightness` echo "USR0 LED state ($usr0_brightness) [$usr0_trigger]" echo "USR1 LED state ($usr1_brightness) [$usr1_trigger]" echo "USR2 LED state ($usr2_brightness) [$usr2_trigger]" echo "USR3 LED state ($usr3_brightness) [$usr3_trigger]" } get_led_state save0t="$usr0_trigger" save0b="$usr0_brightness" save1t="$usr1_trigger" save1b="$usr1_brightness" save2t="$usr2_trigger" save2b="$usr2_brightness" save3t="$usr3_trigger" save3b="$usr3_brightness" echo "Turning LEDs on for 3 seconds..." echo "none" > ${led}usr0/trigger echo "none" > ${led}usr1/trigger echo "none" > ${led}usr2/trigger echo "none" > ${led}usr3/trigger echo "1" > ${led}usr0/brightness echo "1" > ${led}usr1/brightness echo "1" > ${led}usr2/brightness echo "1" > ${led}usr3/brightness get_led_state sleep 3 echo "Turning USR0 LED off for 3 seconds..." echo "0" > ${led}usr0/brightness get_led_state sleep 3 echo "Turning USR1 LED off for 3 seconds..." echo "0" > ${led}usr1/brightness get_led_state sleep 3 echo "Turning USR2 LED off for 3 seconds..." echo "0" > ${led}usr2/brightness get_led_state sleep 3 echo "Turning USR3 LED off for 3 seconds..." echo "0" > ${led}usr3/brightness get_led_state sleep 3 echo "Restoring LEDs to their original state..." echo "$save0b" > ${led}usr0/brightness echo "$save1b" > ${led}usr1/brightness echo "$save2b" > ${led}usr2/brightness echo "$save3b" > ${led}usr3/brightness echo "$save0t" > ${led}usr0/trigger echo "$save1t" > ${led}usr1/trigger echo "$save2t" > ${led}usr2/trigger echo "$save3t" > ${led}usr3/trigger get_led_state