title:防犯Pi
date:2016-08-12
category:raspberry pi
tags:raspberry pi,python
はじめまして。Niohです。
はじめてのPython、そしてはじめての電子工作をしてみました。。
作る理由
当社が零細企業ですので現在レジ開閉した人が自己申告制となっています。
幸い現在現金過不足は出ていないものの、やはり人が見ていない時などは不安・・
ということでレジ開閉連動のカメラを作りたいと思っていました。
なぜRaspberry Piなのか
今回開閉連動カメラを作るにあたって必要な機能が
- 撮影した写真をSlackに掲載したい
- 開閉を検知したい(GPIO使用)
- 母艦のレジと連動させるのとかわかるわけない・・
だったので作例がたくさんあるRaspberry Piを使用しました。
まずは知識を仕入れる
実はPythonなどというものすらさっぱりわからなかったのでpython-izmというページで勉強しました。
後はググった。
必要なもの
- Raspberry Pi本体
- SDカード(16GB)
- LOGICOOL ウェブカム HD画質 120万画素 C270
- エーモン 開閉連動スイッチ 1588
- ブレッドボード、ジャンパワイヤ、抵抗(1kΩ?よくわからん)
原理
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
配線
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に投稿をさせていただきましたので、もしよろしければ色々ご指摘いただけると幸いです。
ありがとうございました。