Skip to content

Instantly share code, notes, and snippets.

@yuntan
Last active August 29, 2015 14:03
Show Gist options
  • Save yuntan/48c2b86f6fe9431a6cf0 to your computer and use it in GitHub Desktop.
Save yuntan/48c2b86f6fe9431a6cf0 to your computer and use it in GitHub Desktop.
raspiでGPIOを使ってみる 〜LEDでLoad Average〜

green

GPIO with raspi第一回(?)

ロードアベレージの高さに応じてLEDを点灯させる

  • ロードアベレージが低い[0,2)→緑
  • ちょっとしんどい[2,5)→黄
  • しんどい[5,∞)→赤

閾値は適当

LED基板を作る

用意するもの: 赤,緑,黄のLED(色なんでもいい),ジャンパー線(メス―メス),基板につけるオス端子,100Ω抵抗

抵抗について.抵抗は270Ωがいいと他サイトにあるが,暗くなるので抵抗値を小さくした.RasPiのGPIOの出力電流 には限界があるらしく,全部で50mAを超えるといけないようだが,今回同時に点灯させるLEDは一つで,13mAほどしか 通ってないはずなので大丈夫だと思っている.

led

写真見れば分かるだろで済みそうな単純な基板だけど一応

GPIO0 → 緑のLED ➘ 
GPIO1 → 黄のLED → 100Ω → 0V(GND)
GPIO2 → 赤のLED ➚

GPIOを操作

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を操作できる.素敵.

スクリプトを実行して動作確認.

systemdに自動起動してもらう

しすてむでぃー分かんないから適当に書いた.依存関係とか気にしてない.

[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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment