Raspberry Pi(Raspbian)でLEDを点灯/消灯させるプログラムを作る


はじめに

Raspberry Pi(Raspbian)でLEDを点灯/消灯させるプログラムの紹介です。

必要なもの

  • RaspbianがインストールされているRaspberry Pi
  • ブレッドボード
  • LEDx2
  • 抵抗(100Ω)x2
  • ジャンパー線(オス/メス)x3
  • ジャンパー線(オス/オス)x2

配線

GPIOとGNDならどこでも可ですが、今後の拡張性などを考えるとGPIOのみのピン(3, 5, 8, 10, 19, 21, 23, 24, 25以外)を使う方が無難だと思います。
この投稿では33(GPIO13), 35(GPIO19), 39(GND)ピンを使用しています。

プログラム

led.py
#Import Files
import RPi.GPIO as GPIO
import time

#GPIO Settings
GPIO.setmode(GPIO.BCM)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(19, GPIO.OUT)

#Main
try:
    while True:
        GPIO.output(13, GPIO.LOW)
        GPIO.output(19, GPIO.HIGH)
        time.sleep(1)
        GPIO.output(13, GPIO.HIGH)
        GPIO.output(19, GPIO.LOW)
        time.sleep(1)

except KeyboardInterrupt:
    GPIO.cleanup()

解説

  1. スイッチの制御に使用するRPi.GPIOライブラリをインポートする
  2. 時間を取得するために使用するtimeライブラリをインポートする
  3. GPIOのモードをBCMに設定する(物理的なピン番号ではなく、GPIO**を使用する)
  4. GPIO13, GPIO19を出力端子に設定する(Hi=点灯, Low=消灯)
  5. LEDを点滅させ続けるのでwhile True:で無限ループさせる
  6. LEDを1秒周期で交互に点滅させる
  7. 解説6に遷移 or プログラムが終了するのを待つ
  8. Control+Cが押されたらGPIOを解放してプログラムを終了する

プログラムを実行してみる

  1. プログラムを実行する
  2. LEDが1秒周期で交互に点滅する

写真を撮るプログラムに組み込んでみる

以前作成した写真を撮るプログラムのcamera_func(x)にLEDの点灯/消灯処理を組み込んでみた。

camera_v2.py
#Import Files
import RPi.GPIO as GPIO
import picamera
import time

#GPIO Settings
GPIO.setmode(GPIO.BCM)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(19, GPIO.OUT)
GPIO.setup(26, GPIO.IN, pull_up_down=GPIO.PUD_UP)

#Camera Settings
CAM_DIR  = "/home/pi/python/_photo/"

camera = picamera.PiCamera()

#Camera Function
def camera_func(x):
    if GPIO.input(26) == 0:
        GPIO.output(19, GPIO.HIGH)
        filename = time.strftime("%Y%m%d%H%M%S") + ".jpeg"
        save_dir_filename = CAM_DIR + filename
        camera.capture(save_dir_filename)
        GPIO.output(19, GPIO.LOW)
    else:
        GPIO.output(13, GPIO.HIGH)
        time.sleep(1)
        GPIO.output(13, GPIO.LOW)

#Interrupt
GPIO.add_event_detect(26, GPIO.FALLING, callback=camera_func, bouncetime=200)

#Main
try:
    while True:
        pass

except KeyboardInterrupt:
    GPIO.cleanup()

変更前はスイッチを押しても写真を撮れているのかわからなかったが、変更後はスイッチを押した際、正常(写真が撮れている場合)なら緑色、異常(写真が撮れていない場合)なら赤色のLEDが点灯するので、何も無いよりはわかりやすくなった。

参考