こっちはMarkdownがいつまでたっても使えるようにならないから,はてなに行こうと思う
まあもともとブログ書いてなかったけど,行っても何も書かないかもだけど
GPIO with raspi第一回(?)
ロードアベレージの高さに応じてLEDを点灯させる
- ロードアベレージが低い[0,2)→緑
- ちょっとしんどい[2,5)→黄
- しんどい[5,∞)→赤
閾値は適当
用意するもの: 赤,緑,黄のLED(色なんでもいい),ジャンパー線(メス―メス),基板につけるオス端子,100Ω抵抗
抵抗について.抵抗は270Ωがいいと他サイトにあるが,暗くなるので抵抗値を小さくした.RasPiのGPIOの出力電流 には限界があるらしく,全部で50mAを超えるといけないようだが,今回同時に点灯させるLEDは一つで,13mAほどしか 通ってないはずなので大丈夫だと思っている.
写真見れば分かるだろで済みそうな単純な基板だけど一応
GPIO0 → 緑のLED ➘
GPIO1 → 黄のLED → 100Ω → 0V(GND)
GPIO2 → 赤のLED ➚
WiringPiを使う.Archならalarm/wiringpi
をpacmanでインストール.
これを使うとgpio write PIN 0/1
で出力オンオフができる.とても素敵.
#!/bin/bash
# GPIO0: green
# GPIO1: yellow
# GPIO2: red
# set mode
gpio mode 0 out
gpio mode 1 out
gpio mode 2 out
while true; do
# load avarage per min
load=`uptime | cut -d, -f3 | cut -d' ' -f5`
if [ `echo "$load >= 5.00"|bc` -eq 1 ]; then
# set red
gpio write 0 0
gpio write 1 0
gpio write 2 1
elif [ `echo "$load >= 2.00"|bc` -eq 1 ]; then
# set yellow
gpio write 0 0
gpio write 1 1
gpio write 2 0
else
# set green
gpio write 0 1
gpio write 1 0
gpio write 2 0
fi
sleep 30
done
uptime
コマンドの結果から1分のロードアベレージを取り出して,値を比較した結果に基づきLEDに電圧をかけるだけ.
こんな感じでシェルスクリプトを書くだけでシステムの状態に合わせてGPIOを操作できる.素敵.
スクリプトを実行して動作確認.
しすてむでぃー分かんないから適当に書いた.依存関係とか気にしてない.
[Unit]
Description=GPIO LED
[Service]
ExecStart=/usr/local/bin/gpio-led.sh
[Install]
WantedBy=multi-user.target
/etc/systemd/system/gpio-led.service
として配置.
sudo systemctl enable gpio-led # システム起動時に起動
sudo systemctl start gpio-led