非公式Rock研究所

Radxaのシングルボード(主にRock4c+)について書いています

オンボードLEDの制御

Rock4c+のLED部分

Rock4c+には2つのLEDランプがボードの上にある。ここでは、LEDランプを操作する方法を紹介する。

LEDの初期状態

Rock4c+のLED部分(点灯時)

Rock4c+のLEDの初期状態は以下のようになっている。

LEDを制御するファイル

Rock4c+にはLEDを制御するためのファイルがあり、そのファイルに設定を書き込むことで、LEDはそれに応じた動きをしてくれる。

Rock4c+のLEDを制御するためのファイルの場所についてはradxa wikiのページに説明があるので、参考でリンクを貼っておく。
(ただし、LEDの制御そのものについては軽く触れている程度である。)

Rockpi4/ハードウェア/LED - Radxa Wiki
https://wiki.radxa.com/Rockpi4/hardware/led

実際、各LEDのファイルの場所は以下のようになっている。

ためしに、緑色のLEDのファイルを以下のコマンドで確認してみる。

$ cd /sys/class/leds/user-led1
$ ls
user-led1ディレクトリの中身

user-led1はディレクトリでその中に更にファイルがあることが確認できる。

現在の点灯パターンを確認

現在のLEDの点灯パターンを確認するにはtriggerファイルを見るとわかる。

$ cat /sys/class/leds/user-led1/trigger
user-led1のtriggerファイルの中身

catコマンドでtriggerファイルを確認すると、LEDの点灯パターンが列挙され、その中で現在の点灯パターンはかっこで囲われて表示される。初期状態では通電すれば点灯するuser-led1は、それに対応する[default-on]がかっこで囲われている。

user-led2のtriggerファイルの中身

同じようにuser-led2を確認すると、[heartbeat]がかっこで囲われており、点滅する青色のLEDの挙動と一致している。

LEDを点灯パターンを変更する

LEDの点灯パターンを変更するにはtriggerファイルに設定したいパターンを入力すればよい。

まず、LEDを操作するには管理者権限が必要なため、以下のコマンドでroot権限を取得する。

$ sudo su -
(パスワードを入力)

管理者権限に移行できたら、LEDの点灯パターンを以下のように変更してみる。

# echo heartbeat > /sys/class/leds/user-led1/trigger
# echo none > /sys/class/leds/user-led2/trigger
trigger変更後LEDの点灯写真 変更後のtriggerファイルの中身

コマンド実行のタイミングでLEDは指定したとおりの光り方に変わり、triggerファイルも指定した点灯パターンがかっこで囲われている。

LEDの点滅時間を変更する

点滅時間を具体的に設定したいときは、triggerファイルの点灯パターンからtimerを指定すると点灯及び消灯を時間で指定することができる。

この方法を説明しているサイトとして、別のIoTブランドだが、Armadilloの説明が参考になったのでリンクを貼っておく。

Armadillo 第8章 その他のデバイス
https://manual.atmark-techno.com/armadillo-460/armadillo-460_startup_guide_ja-1.1.2/ch08.html

ここでは、user-led1にtimerを設定する。

# echo timer > /sys/class/leds/user-led1/trigger

triggerファイルにtimerを指定したあと、lsコマンドでuser-led1をみてみると、

user-led1ディレクトリの中身 timer登録後のuser-led1ディレクトリの中身

user-led1の配下に"delay_on"ファイルと"delay_off"ファイルが追加されている。

追加されたファイルをcatコマンドで確認すると数字が返ってくる。

delay_on,delay_offファイルの中身

この数字は、それぞれの状態をどれだけ持続させるかをミリ秒で表しており、この結果では、点灯状態が500ミリ秒、消灯状態が500ミリ秒の点滅を示している。 実際に緑色のLEDが等間隔に光っており、合計で1秒のサイクルで点滅している。

試しに、点灯時間を2000ミリ秒、消灯時間を100ミリ秒に設定してみる。

# echo 2000 > /sys/class/leds/user-led1/delay_on
# echo 100 > /sys/class/leds/user-led1/delay_off

コマンドを入力すると、LEDはすぐに指定したとおりの点滅サイクルに変更される。

sudoコマンドでLEDを操作するには

LEDのファイルへの書き込みは管理者権限が必要だが、以下のようにsudoを使ってコマンドを打つと書き込みに失敗する。

sudo echoの出力をリダイレクトした結果

これはsudoが">"(リダイレクト)まで及ばないため、書き込みを一般ユーザの権限で実行しようとして失敗しているようだ。

参考リンク
sudoでリダイレクトするとPermission deniedとなってしまう場合の解決方法 | server-memo.net
https://www.server-memo.net/memo/sudo_redirection.html

上記リンクを参考に、suで管理者に切り替えるのではなく、sudoでLEDを操作するためのコマンドは以下のようになる。

(sudo sh -cを使う場合)
$ sudo sh -c "echo 2000 > /sys/class/leds/user-led1/delay_on"

(teeコマンドを使う場合)
$ echo 100 | sudo tee /sys/class/leds/user-led1/delay_off

この方法だと、管理者権限でログインし続けることはないので安全である。