LED 点滅スクリプトの修正
前回、キットについてた LED をシェルスクリプトで点滅させたんだけど、なんと仮置きしてた /tmp の下にない。
なーんにもない。
確かに一時領域だから、消えても問題のないファイルしか置いちゃダメなんだけど、それにしたって早すぎないか?
もしかしてと思って last コマンドを打ってみたら、システムがリブートしてた。
タイミング的には Raspberry Pi の電源コードに手が当たった時。
うん、思いっきり自爆してたようだ。
Raspbian の場合、再起動時に /tmp の掃除が行われるんかなぁ
とりあえず、ブログに書いてたスクリプトそのままなので、復旧は簡単だった。
でも。
再実行してみたらエラーが出るようになった。
具体的には、コレ
pi@raspberrypi ~/script $ sh led2.sh led.sh: 8: led.sh: cannot create /sys/class/gpio/gpio5/direction: Permission denied led.sh: 11: led.sh: cannot create /sys/class/gpio/gpio5/value: Permission denied pi@raspberrypi ~/script $
たしかに、前回は root で実行してた。
試しに root でやってみると、権限の問題は出ないんだけど…。
だから見事に権限が無いと書かれているのは分かる。
分かるんだけど、コマンドを手入力で実行すると問題なく LED は光る。
gpio グループに入ってるから、権限自体は問題なかったのかもしれないと思う。
他の理由…?
単なる勘だけど、権限判定って非同期なのかも知れないなぁ。
試しに、sleepenh を入れてみる。
#!/bin/bash # シェル変数設定 i=1 max=10 n5Val=/sys/class/gpio/gpio5/value NULL=/dev/null # GPIO 5 に出力 echo "5" > /sys/class/gpio/export sleepenh 0.2 > ${NULL} echo "out" > /sys/class/gpio/gpio5/direction until [ "${i}" = "${max}" ]; do # 0.1 〜 0.9 秒まで実行 echo "1" > ${n5Val} sleepenh 0.$i > ${NULL} echo "0" > ${n5Val} sleepenh 0.$i > ${NULL} i=`expr $i + 1` done echo "5" > /sys/class/gpio/unexport
自分の権限で問題なく動作するようになった。