オンボードLEDの制御
Rock4c+には2つのLEDランプがボードの上にある。ここでは、LEDランプを操作する方法を紹介する。
LEDの初期状態
Rock4c+のLEDの初期状態は以下のようになっている。
- 緑色のLED 通電すると点灯する。
- 青色のLED OSが起動すると点滅する。
LEDを制御するファイル
Rock4c+にはLEDを制御するためのファイルがあり、そのファイルに設定を書き込むことで、LEDはそれに応じた動きをしてくれる。
Rock4c+のLEDを制御するためのファイルの場所についてはradxa wikiのページに説明があるので、参考でリンクを貼っておく。
(ただし、LEDの制御そのものについては軽く触れている程度である。)
Rockpi4/ハードウェア/LED - Radxa Wiki
https://wiki.radxa.com/Rockpi4/hardware/led
実際、各LEDのファイルの場所は以下のようになっている。
- 緑色のLED /sys/class/leds/user-led1
- 青色のLED /sys/class/leds/user-led2
ためしに、緑色のLEDのファイルを以下のコマンドで確認してみる。
$ cd /sys/class/leds/user-led1
$ ls
user-led1はディレクトリでその中に更にファイルがあることが確認できる。
現在の点灯パターンを確認
現在のLEDの点灯パターンを確認するにはtriggerファイルを見るとわかる。
$ cat /sys/class/leds/user-led1/trigger
catコマンドでtriggerファイルを確認すると、LEDの点灯パターンが列挙され、その中で現在の点灯パターンはかっこで囲われて表示される。初期状態では通電すれば点灯するuser-led1は、それに対応する[default-on]がかっこで囲われている。
同じようにuser-led2を確認すると、[heartbeat]がかっこで囲われており、点滅する青色のLEDの挙動と一致している。
LEDを点灯パターンを変更する
LEDの点灯パターンを変更するにはtriggerファイルに設定したいパターンを入力すればよい。
まず、LEDを操作するには管理者権限が必要なため、以下のコマンドでroot権限を取得する。
$ sudo su -
(パスワードを入力)
管理者権限に移行できたら、LEDの点灯パターンを以下のように変更してみる。
- 緑色のLED → 点滅
- 青色のLED → 消灯
# echo heartbeat > /sys/class/leds/user-led1/trigger
# echo none > /sys/class/leds/user-led2/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の配下に"delay_on"ファイルと"delay_off"ファイルが追加されている。
追加されたファイルをcatコマンドで確認すると数字が返ってくる。
この数字は、それぞれの状態をどれだけ持続させるかをミリ秒で表しており、この結果では、点灯状態が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が">"(リダイレクト)まで及ばないため、書き込みを一般ユーザの権限で実行しようとして失敗しているようだ。
参考リンク
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
この方法だと、管理者権限でログインし続けることはないので安全である。