柄スタイル

ここは文系のオッサンがITに立ち向かう所

コドモ達の帰宅をRaspberry PiからLINEにお知らせする

   

前回は写真をLINEに送るPythonプログラムを作成しました。今回はタクトスイッチを押すと写真を撮ってLINEに送ってみようと思います。

コドモ達の帰宅を知りたい!

スマホを持っていないコドモ達。無事に帰宅したか知りたい!帰ってきたときにタクトスイッチを押せば自動でLINEに写真がやってくる。そうすればちょっと安心。何かを伝えたければ紙に文字を書いてタクトスイッチを押せば伝わるかも!そうすればお留守番のときに心配が少し減るかもしれません。

方法

DevicePlusの「第2回 ラズパイでAIカメラを自作しよう!ボタンとウェブサーバー機能を付けて、カメラ、マイクを操作
上記の記事を参考にして作成します。

記事ではLED付きタクトスイッチを使用していますが、タクトスイッチとLEDを別々にしておこないます。

用意したもの

  • Raspberry Pi3
  • ブレッドボード
  • タクトスイッチ
  • LED
  • 抵抗

配線

タクトスイッチ GPIOの20番と3.3V、GNDに繋ぎます。
LED GPIOの16番とGNDに繋ぎます。

プログラム

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import time
import RPi.GPIO as GPIO
import subprocess

BUTTON = 20 # タクトスイッチ GPIOの20番と3.3V、GNDに繋ぐ
LED    = 16 # LED GPIOの16番(長い)とGND(短い)に繋ぐ
hold_time=1.5

GPIO.setmode(GPIO.BCM) # ピン番号でなくGPIO番号で指定する
GPIO.setup(BUTTON, GPIO.IN, pull_up_down=GPIO.PUD_UP) # プルアップ抵抗を有効
GPIO.setup(LED, GPIO.OUT)

# ボタンクリック待機中
print("ボタン待機中...")

actions = ['python /home/pi/scripts/camera_line.py', #ボタン長押し
           'python /home/pi/scripts/camera_line.py', #ワンプッシュで写真撮影
           'python /home/pi/scripts/camera_line.py'] #ダブルプッシュ

for i in range(3):
      GPIO.output(LED, GPIO.HIGH)
      time.sleep(0.5)
      GPIO.output(LED, GPIO.LOW)
      time.sleep(0.5)

GPIO.add_event_detect(BUTTON,GPIO.FALLING) # 立ち下がりエッジを検出

while True:
     if GPIO.event_detected(BUTTON):
      GPIO.remove_event_detect(BUTTON)
      now = time.time()
      count = 0
      GPIO.add_event_detect(BUTTON,GPIO.RISING) # 立ち上がりエッジを検出
      while time.time() < now + hold_time:
        if GPIO.event_detected(BUTTON):
          count +=1
          time.sleep(.3) # debounce time

      print(count)

     if count == 0:
        GPIO.output(LED, GPIO.HIGH)
        time.sleep(hold_time)
        GPIO.output(LED, GPIO.LOW)

      for i in range(count):
        time.sleep(0.5)
        GPIO.output(LED, GPIO.HIGH)
        time.sleep(0.5)
        GPIO.output(LED, GPIO.LOW)

      cmd = actions[count]
      print cmd
      if cmd:
        subprocess.call(actions[count], shell=True)

      GPIO.remove_event_detect(BUTTON) # ボタン検知の解除
      GPIO.add_event_detect(BUTTON, GPIO.FALLING) # 立ち下がりエッジを検出
      
GPIO.cleanup() # 終了処理 これがないと次回実行時にエラーになる

動作の簡単な説明

タクトスイッチの長押し、ワンプッシュ、ダブルプッシュによってそれぞれ異なるプログラムを実行します。今回はどの押し方をしても同じプログラムが動作します。LEDは初回実行時とボタンを押した回数によって点滅します。

まとめ

Raspberry Piにシャッターが付きました。タクトスイッチを押すとLEDが点滅して撮影します。そしてすぐにLINEに写真が送られてきます。コドモ達に早速押させてみたいと思います。
次回は実際に動作した写真、それからRaspberry Piを再起動したときにこのプログラムが自動で動作するようにします。

 - Raspberry Pi , ,