LoginSignup
14
12

More than 5 years have passed since last update.

Python初心者がRaspberry Piで開閉連動カメラ

Last updated at Posted at 2016-08-12

title:防犯Pi
date:2016-08-12
category:raspberry pi
tags:raspberry pi,python

はじめまして。Niohです。
はじめてのPython、そしてはじめての電子工作をしてみました。。

作る理由


当社が零細企業ですので現在レジ開閉した人が自己申告制となっています。
幸い現在現金過不足は出ていないものの、やはり人が見ていない時などは不安・・

ということでレジ開閉連動のカメラを作りたいと思っていました。

なぜRaspberry Piなのか


今回開閉連動カメラを作るにあたって必要な機能が

  • 撮影した写真をSlackに掲載したい
  • 開閉を検知したい(GPIO使用)
  • 母艦のレジと連動させるのとかわかるわけない・・

だったので作例がたくさんあるRaspberry Piを使用しました。

まずは知識を仕入れる


実はPythonなどというものすらさっぱりわからなかったのでpython-izmというページで勉強しました。
後はググった。

必要なもの


原理


1.ドアが開く
2.開閉検知スイッチがONになる
3.ONになって2秒したらウェブカメラで撮影する
4.撮影した画像をSlackに投稿する

このような形で出来ればなあと思った。

前提となるアプリ等のインストール


  • Piのアップデート sudo apt-get update sudo apt-get upgrade
  • RPi.GPIOのインストール sudo pip install rpi.gpio
  • fswebcamのインストール sudo apt-get install fswebcam
  • slackerのインストール sudo pip install slacker

配線


今回はGPIO2を使用する。
回路図

Slackerの設定


はじめてのRaspberry PIで監視カメラを作ってみた。
にSlackerの設定の項目があるのでそこを読んで設定する。TokenとChannelのIDがわかればOK
対話型でPythonを起動し、それをコピペするのがよい。

保存用ディレクトリの作成


保存用に適当なディレクトリを作成する

sudo mkdir /home/pi/camera

スクリプトを記述する


適当なエディタで適当な名前で開いてこれをコピペしてutf-8で保存する。
僕はAtomEditorってやつを使ってみました。

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

#必要なライブラリーの読み込み
import RPi.GPIO as GPIO
from slacker import Slacker
import subprocess
import datetime
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(2,GPIO.IN)

def camcapslack():

    #1ウェブカムで写真を撮って保存する
    today = datetime.datetime.today()
    now =  today.strftime("%Y%m%d%H%M")
    cmd = "fswebcam [保存したいディレクトリ(/home/pi/camera/等)]%s.jpg" % now
    jpgdir = "[保存したいディレクトリ(/home/pi/camera/等)]%s.jpg" % now
    bolean = subprocess.call(cmd, shell=True)
    if bolean == 0:
        pass
    else:
        subprocess.call(cmd,shell=True)

#撮った写真をSlackに投稿する

    token = "[TokenのID]"
    slacker = Slacker(token)
    channel = '[channelのID]'
    result = slacker.files.upload(jpgdir,channels=['[channelのID]'])
    slacker.pins.add(channel='[channelのID]',file_=result.body['file']['id'])

while True:

    flag_GPIO = GPIO.input(2)

    if flag_GPIO == 0:
        time.sleep(2)
        camcapslack()

GPIO.cleaup()


後は起動時に登録して再起動するだけ。こちらは後ほど記述するかも。

今後追加したい機能


  • SDカードの保護(PiのRAMを一時的に利用し、撮影が終わったら画像を削除する)
  • 保存に失敗した時の試行回数(現在は1回以上はやり方がわからなかったので。)
  • 動画のほうがいいか否かを考える。

最後に


正直初めてPythonというかプログラミング言語自体触れたのでこのスクリプトの意味を全部わかっているかというとわかりません

Atom Editorも初めてですしMarkdown記法も学びながら書いています。

今のスクリプトもぐぐったりコピペしたりしたのを自分なりに直しながら作りました。

もっとこうした方がわかりやすいとか、速いとかのご指摘を頂ければと思ってQiitaに投稿をさせていただきましたので、もしよろしければ色々ご指摘いただけると幸いです。

ありがとうございました。

14
12
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
12