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


自分の権限で問題なく動作するようになった。