Raspberry PiのステータスLEDについて
Raspberry Pi の基板上には、電源LED(Zeroにはない)の他に緑色のSTATUS "ACT" LEDが搭載されており、GPIOで制御することができます。
参考: Schematics https://www.raspberrypi.org/documentation/hardware/raspberrypi/schematics/README.md
Raspbianデフォルトでは、mmc0(microSD)アクセス時に点灯するように設定されていて、ファイルアクセス時に点滅します。この設定は、sysfsに定義されている /sys/class/leds/led0
に値を設定することで、設定変更できます。
設定できる値は、
none kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock timer oneshot heartbeat backlight gpio cpu0 cpu1 cpu2 cpu3 default-on input panic [mmc0] mmc1 rfkill0 rfkill1
であり、現在の値は[]
で囲まれています。(デフォルトがmmc0
です)
gpioを設定することで、GPIOポートから操作できるようになります。その際のポート番号は、/sys/class/leds/led0/gpio
に設定したものになります。
Node-REDから設定する
Node-REDで操作する場合、piユーザはroot権限を持ちますが、piユーザのままで /sys/class/leds/led0
に書き込むことはできませんので、sudo してtee
コマンドを使うことになります。GPIO 20(38ピン)に設定する場合は、以下のようなFlowになります。
[{"id":"5fc1cf3a.d659e","type":"exec","z":"d62ca71d.243728","command":"echo gpio | sudo tee /sys/class/leds/led0/trigger","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":540,"y":80,"wires":[[],[],[]]},{"id":"11f2cb85.50b1f4","type":"inject","z":"d62ca71d.243728","name":"ボードLEDをGPIO20に","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":220,"y":80,"wires":[["5fc1cf3a.d659e","96405c80.8979a"]]},{"id":"74210ad3.0b1e24","type":"exec","z":"d62ca71d.243728","command":"echo 20 | sudo tee /sys/class/leds/led0/gpio","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":530,"y":160,"wires":[[],[],[]]},{"id":"96405c80.8979a","type":"delay","z":"d62ca71d.243728","name":"","pauseType":"delay","timeout":"500","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":270,"y":160,"wires":[["74210ad3.0b1e24"]]}]
(Node-REDの起動時に自動設定する場合は、以下のようにinjectノードの「Node-RED起動の0.1秒後以下を行う」にチェックを入れてください)
これで、rpi-gpioノード
node-red-node-pi-gpioを使ってLEDをON/OFFできるようになります。
GPIO20を使う場合、rpi-gpio outノードの設定は以下のようになります。
LEDとGPIOポートの割り当ては、設定Flowの下側のexecノードのecho 20
の部分で変更できます。LEDに割り当てたポートは、GPIOで操作できなくなりますので注意してください。
その他
rpi-gpioノードを使わず、直接/sys/class/leds/led0/gpio
に値を書き込んでLEDを制御することもできます。
Raspberry Pi 2/3/4では、電源LED(赤色)も操作することができます。ステータスLEDと同様に /sys/class/leds/led1
へ設定しますが、設定を変更することでボードの稼働状態がわからなくなりますので、電源LEDは極力操作しないほうがいいのではないかと思います。