経緯とか
- 実家で飼っている犬の写真を妹が見たがっている
- 両親は老眼のため、スマホの操作がつらいので、簡単操作で写真を送りたい
- RaspberryPiにカメラとスイッチつけて、ポチッと押してLINEに通知出来たら楽っしょ
物品購入
RaspberryPi:
すでに持ってた。
カメラ:
Raspberry Pi Official Camera V2 for 3B/2B/B+/A+/B/A ソニー製808万画素CMOSセンサ使用 ラズベリーパイ公式 HDカメラ
タクトスイッチ:
uxcell タクトスイッチ 触覚押しボタンスイッチ モーメンタリ 触覚型 金属 電子部品 ブラック 10個入り
まずはRaspberryPiとカメラで写真を撮ってLINEのグループに通知する
/usr/local/src/camera.sh
#!/bin/bash
# 変数定義
date=$(date +"%Y-%m-%d_%H%M")
save_file="/home/pi/camera/${date}.jpg"
token="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
# 写真撮影
raspistill -vf -hf -q 10 -o $save_file
# LINE通知
curl -X POST -H "Authorization: Bearer ${token}" -F "message=''" -F "imageFile=@${save_file}" https://notify-api.line.me/api/notify
※tokenにはLINE NotifyのTokenが入ります。
配線とか
※お試しなのでブレッドボードで適当に接続してます。
タクトスイッチを押すとcamera.shが実行されるようにする
/usr/local/src/camera.py
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
import os
GPIO.setmode(GPIO.BCM)
GPIO.setup(14, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
try:
while True:
if GPIO.input(14) == GPIO.HIGH:
os.system('bash /usr/local/src/camera.sh')
time.sleep(1.0)
except KeyboardInterrupt:
pass
GPIO.cleanup()
参考:【Raspberry Pi 2 Model B】初めての電子工作 タクトスイッチに挑戦
RaspberryPi起動時にスクリプトを実行させておく
su pi
crontab -e
@reboot python /usr/local/src/camera.py
※piユーザで実行する必要があるため、suしてます。
参考:ラズパイ起動時にスクリプトを実行したい
タクトスイッチを押してLINEに通知させる。
※実家、散らかっております…。なお、写真はモモちゃん(チワワ・4歳)です。
今回の発見
- LINE Notifyの仕様上、1MB以上のデータは送信出来なかった。何も指定せずに写真を撮ると4.5MBくらいになるので、raspistillコマンドのqオプションを使って、画質を落として撮影するようにした。
- 「messages」がLINE Notifyの仕様で必須のため、画像だけの投稿が出来なかった。仕方ないので何も文字を入れずにmessagesの値を渡した。
- タクトスイッチより、もっと押しやすいスイッチを買った方が使いやすかった
今後やりたいこと
- スイッチとRaspberryPiをハンダで直接、接続する
- もう少し押しやすいスイッチに変更する
- 実家の掃除をする