2016/10/02

RaspberryPiでLチカ

どうも、クラゲです。
今回はラズパイでLチカを行います!
色々な言語での方法があると思いますが、今回はRaspbianに最初から入っているPythonパッケージのRPi.GPIOを使って行います

【 大まかな流れ 】

回路作成

ラズパイ以外に必要な部品は以下4点です

LEDの色は何でもOK、抵抗値はざっくり330Ω〜1kΩくらいでOKです。

回路の結線はこの通りです。

ラズパイ側は、右側下から数えて6番目のピン(17pin)と、左側下から数えて3番目のピン(Ground)を使います。
注意事項としては、LEDは + と - の向きがあります。足の長いほうが + 側、短いほうが - 側です。今回の場合は足の長いほうを17pin側に繋ぎます。
ちなみに抵抗は向きがありません。

[画像引用元] https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/

これで回路は完了です
わずかにLEDが光っているかもしれませんが、気にしなくて大丈夫です。

コマンドでLチカ

抵抗を介したLEDに3.3Vと0Vを加えることによってLEDを光らせることができます。0VはGroundで固定なので、3.3V側のラズパイ端子を0Vにすることで消灯、3.3Vにすることで点灯が制御できます。

ラズパイの端子から3.3V電圧を出力させるためには2つのステップがあります。

これらを踏まえて実際にコマンドを打っていきましょう!
まず現状の各端子のモードがどうなっているのか確認します
以下のコマンドを打ってさい。これは各端子の状態をチェックするコマンドです。

gpio readall

このような表示が出てきます。
先ほどの回路図の端子配置を180°回転した表です

それぞれの記号の意味は以下の通りですが、今回はBCMとModeだけ注目してください

BCM17(つまりGPIO17pin)を見てみるとModeが "IN" となっています。
現状は入力設定になっているので、これを出力設定にします

gpio -g mode 17 out

この後に端子状態を見てみるとModeが "OUT" に変化しているのが分かると思います

gpio readall

次に3.3V出力を行います

gpio -g write 17 1

これでLEDが点灯します。
消灯させるには0V出力を行うので、以下のようにコマンドを打ちます。

gpio -g write 17 0

これで、手入力によるLチカは出来ました!

プログラミングでLチカ

先ほどはマニュアル操作のLチカだったので、今度はプログラムを実行したら自動的にずっとLチカするようにします。

まずコードを書いて保存しましょう。
nanoを立ち上げます。ファイル名は"Lchika.py"としました。

nano Lchika.py

以下のコードをコピペしてください

#!/usr/bin/python 
# coding:utf-8 
 
#timeモジュールをインポート 
import time
 
#RPi.GPIOモジュールをインポート 
import RPi.GPIO as GPIO
 
# BCM(GPIO番号)で指定する設定 
GPIO.setmode(GPIO.BCM)
 
# GPIO17を出力モード設定 
GPIO.setup(17GPIO.OUT)
 
while True:
  # GPIO17の出力を1にして、LED点灯 
  GPIO.output(171)
 
  # 0.5秒待つ 
  time.sleep(0.5)
 
  # GPIO17の出力を0にして、LED消灯 
  GPIO.output(170)
 
  # 0.5秒待つ 
  time.sleep(0.5)

保存して終了します
control + o で保存、ファイル名はそのままenter、control + x で終了。

今作ったファイルに実行許可を与えます

sudo chmod 755 Lchika.py

実行します

./Lchika.py

これで無限ループのLチカが出来ました!
終了させる場合は、control + c です

実行時、以下のようなワーニングが出てくる場合があります。
RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.

これはGPIO設定を、プログラミング実行後にクリアしていないために発生します。
気分が悪いので、対策します。
先ほどのLchika.pyを以下のようにtry〜exceptを使って修正します。

#!/usr/bin/python 
# coding:utf-8 
 
#timeモジュールをインポート 
import time
 
#RPi.GPIOモジュールをインポート 
import RPi.GPIO as GPIO
 
# BCM(GPIO番号)で指定する設定 
GPIO.setmode(GPIO.BCM)
 
# GPIO17を出力モード設定 
GPIO.setup(17GPIO.OUT)
 
try:
  while True:
    # GPIO17の出力を1にして、LED点灯 
    GPIO.output(171)
 
    # 0.5秒待つ 
    time.sleep(0.5)
 
    # GPIO17の出力を0にして、LED消灯 
    GPIO.output(170)
 
    # 0.5秒待つ 
    time.sleep(0.5)
except KeyboardInterrupt:
  # GPIO設定クリア 
  GPIO.cleanup()

これで control + c が押された時にexceptとなり、GPIOを設定をクリアしてからプログラムを終了することが出来るようになりました!
以上、RaspberryPiでLチカでした。