回路も作らずプログラムも書かずにLチカしてみた
2017年12月24日 日曜日
【IIJ 2017TECHアドベントカレンダー 12/24(日)の記事です】
IIJ 2017TECHアドベントカレンダーも最後の記事となりました。元々アドベントカレンダーはクリスマスを楽しみに待つための行事でしたので、最後の記事はクリスマスイブの日に公開となるのは当然です。と言うことで今回の記事はクリスマスネタです。
クリスマスと言えばチカチカした電飾が思い浮かびますね。電飾と言えば、LED。LEDと言えば……もう皆さんおわかりかと思います、Lチカです。
Lチカというのは、電子工作の入門記事で定番の「LEDをチカチカさせる(だけ)」の工作のことです。多くの場合、マイコンボードにLEDと数個の部品をつなげるだけ、極簡単なプログラムを書くだけで動かせますし、チカチカと点滅するLEDを見ていると「なんか動いている」という気分になれますので、新しく購入したマイコンボードの動作確認でもよくやることがあります。今回はクリスマスの電飾に引っかけてLチカさせて見ることを考えました。
しかし時の流れは残酷です。師走のバタバタした空気に流されているうちに、気がつくと締め切り前日の深夜。さすがにLチカとはいえ、いまから何か回路を組んで記事を書くというのは少々つらいのが本音です。せめて回路を組まずにLチカさせられれば……そんなことを考えながら手元を見ていると、ふと気がつきました。そこ(キーボード)にLEDがあるじゃないかと。
LinuxではホストにつながったLEDを操作するために、LED classが用意されており、sysfsからアクセスが可能です。早速見てみましょう。
今回はその辺に落ちてたRaspberryPiを使っていますが、最近のLinuxなら大抵どれでも動くと思います。
root@raspberrypi:/root# cd /sys/class/leds root@raspberrypi:/sys/class/leds# ls input0::capslock input0::kana input0::scrolllock led1 input0::compose input0::numlock led0 root@raspberrypi:/sys/class/leds# ls input0\:\:scrolllock/ brightness device max_brightness power subsystem trigger uevent
それっぽい雰囲気です。LEDを点灯してみます。
root@raspberrypi:/sys/class/leds# echo 1 > input0\:\:scrolllock/brightness
無事、ScrollLock LEDが点灯しました。しかし単にLEDが点灯しただけではさみしく感じます。でも安心してください、そんなときはtimer triggerを使うと簡単に点滅が実現できます。
root@raspberrypi:/sys/class/leds# echo timer > input0\:\:scrolllock/trigger
何なら、点滅速度も変更できます。
root@raspberrypi:/sys/class/leds# echo 300 > input0::scrolllock/delay_on root@raspberrypi:/sys/class/leds# echo 300 > input0::scrolllock/delay_off
他のLEDも点滅させてみましょう。
root@raspberrypi:/sys/class/leds# echo timer > input0\:\:numlock/trigger root@raspberrypi:/sys/class/leds# echo timer > input0\:\:capslock/trigger
デスクの片隅に、ちょっぴり華やかな電飾ができましたね……できましたよね?ですが、どうしてでしょう、なんだかすこしわびしいのは。
そこでもうちょっと電飾を盛ってみたいと思います。ジャンク箱の中からこんなものを取りだしてきました。これは、昔一瞬だけ流行った、メールの着信をLEDのランプで通知するUSBガジェットです。(今でもeBayあたりで買えます)元々はWindows用のアプリが用意されているのですが、なんとLinux Kernel 4.9以降ではこういったUSB接続のLED(制御チップが載っているものに限る)も、hid-ledとしてsysfsから同様に扱えるようになっているのです。
[ 742.790273] usb 1-1.4: new low-speed USB device number 6 using dwc_otg [ 742.929902] usb 1-1.4: New USB device found, idVendor=1294, idProduct=1320 [ 742.929932] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [ 742.929944] usb 1-1.4: Product: MAIL [ 742.929959] usb 1-1.4: Manufacturer: MAIL [ 743.103152] hid-led 0003:1294:1320.0002: hidraw1: USB HID v1.10 Device [MAIL MAIL ] on usb-20980000.usb-1.4/input0 [ 743.105027] hid-led 0003:1294:1320.0002: Riso Kagaku Webmail Notifier initialized
USB端子に接続するとさっくりと認識しました。なぜか「Riso Kagaku Webmail Notifier」として認識されていますが、これが理想科学工業(株)の製品とはとても思えないのですが、今回は細かいことは気にしないことにします。
※hid-ledは「Riso Kagaku Webmail Notifier」以外にもいくつかの製品に対応しています
root@raspberrypi:/sys/class/leds# ls input0::capslock input0::numlock led1 riso_kagaku1:red input0::compose input0::scrolllock riso_kagaku1:blue input0::kana led0 riso_kagaku1:green
再び/sys/class/ledsを見ると、”riso_kagaku1″として認識されていました。どうやらred/green/blueの三色のLEDが内蔵されているようです。早速点灯させてみましょう。
root@raspberrypi:/sys/class/leds# echo 1 > riso_kagaku1\:red/brightness
root@raspberrypi:/sys/class/leds# echo 1 > riso_kagaku1\:green/brightness
RGB三色を混ぜて使えるようです。8色表示のデジタルRGBですね。
適当にパラメータを調整して各色が表示できるようにしてみました。
root@raspberrypi:/sys/class/leds# echo timer > riso_kagaku1\:red/trigger root@raspberrypi:/sys/class/leds# echo timer > riso_kagaku1\:green/trigger root@raspberrypi:/sys/class/leds# echo timer > riso_kagaku1\:blue/trigger root@raspberrypi:/sys/class/leds# echo 400 > riso_kagaku1\:green/delay_on root@raspberrypi:/sys/class/leds# echo 400 > riso_kagaku1\:green/delay_off root@raspberrypi:/sys/class/leds# echo 300 > riso_kagaku1\:blue/delay_on root@raspberrypi:/sys/class/leds# echo 300 > riso_kagaku1\:blue/delay_off
随分と華やかになった気がします。ここまでくれば、クリスマスの電飾と言い切っても差し支えはないでしょう!
クリスマスのひとときを、華やかな電飾と一緒に過ごしていただくための参考になれば幸いです。