今回は、
ラズパイに接続したボタンを押すと、
Webカメラで撮影した写真を、Lineに送信していきます。
私がこのガジェットが作りたいと思ったのは、
相手に負担を掛けずに、大切な人の顔が見たいと思ったからです。
このガジェットがあれば、ボタンを押すだけで相手の写真を撮って
Lineに送ってくれるので、相手も簡単に操作が出来ます。
朝起きた時、ご飯を食べている時、学校から帰った時、
好きな時に、挨拶をするかのようにボタンを押して、
写真を送ってほしいと思っています。
あなたの大切な相手は誰ですか?
恋人?子供?孫?
この記事で学べること
- カメラ制御
- Web API
- IoT
- マイコン
- Python
やりたいこと
・ラズパイに接続したボタンを押したと判断すると、
・USBカメラで写真を撮影し、
・写真をLineに送信する
システム構成図
やることリスト
上記の「やりたいこと」をみて、
どんな作業が必要か、自分で項目を考えてみてください。
これを考えることで、「プログラミング的思考」が身に付いていきます。
番号 | 作業項目 | 備考 |
1 | やりたいこと・システム構成図の作成 | |
2 | やることリストの作成 | 処理項目の洗い出し |
3 | 部品の準備 | |
4 | ボタンが押されたことを判断する | |
5 | カメラで写真撮影 | |
6 | 写真をLineに送信 | |
7 | 機能のまとめ | 以上の機能をまとめて、 やりたいことを実現する! |
部品の準備
今回のシステムに必要な部品です。
不足している部品があれば購入下さい。
部品名 | 備考 |
Raspberry Pi | 別途、電源・SDカード・HDMIケーブルが必要です。 |
ブレッドボード(※1) | |
ジャンパー線(※1) | オスーメス:2本 |
ボタン(※1) | タクトスイッチ:1個 |
Webカメラ | 既にWebカメラを持っていれば、一度それで試してみてください。 大概動作すると思います。 |
購入に必要な部品を、
Raspberry Pi 関連に記載しています。
ラズパイは、電源を入れただけでは起動しません。
ラズパイの起動手順の記事を参照ください。
ボタンが押されたことを判断する
以下記事「ボタンが押されたことを判断する」の章で、
回路図・配線図・部品の説明・プログラム の説明をしています。
参照ください。
カメラで写真撮影
カメラで写真を撮るのに、fswebcamパッケージ を使用します。
fswebcam のインストール
sudo apt install fswebcam
写真を撮る
写真を撮るには、以下コマンドをターミナルから実行します。
fswebcam -r 1280x960 --no-banner image.jpg
写真が撮れたか確認していきましょう!
以下パスにファイルが出来ていると思うので、
ファイルをダブルクリックして写真を見てましょう♪
/home/pi/image.jp
写真をLineに送信
写真を Line に送信するには、
Lineから Access Tokenを取得し、
LineのAPIに、 Access Token と通知したい写真を設定すれば完了です。
LineからAccess Token取得
LineからAccess Token取得に関しては、
以下記事「LineからAccess Token取得」の章を
参照ください。
プログラム
以下の通り、ディレクトリとファイルを作成する。
この章では、以下赤字のファイルを修正する。
/home/pi/work/photo_line/
└line.py
line.py
以下、
“Your Access Token” の箇所に、
「LineからAccess Token取得」 で取得した Access Token の文字列を設定下さい。
# -*- coding: utf-8 -*-
import requests
def line_photo(message: str, photo_path: str):
url = "https://notify-api.line.me/api/notify"
token = "Your Access Token"
headers = {"Authorization": "Bearer " + token}
params = {"message": message}
files = {"imageFile": open(photo_path, "rb")}
r = requests.post(url, headers=headers, params=params, files=files)
print(r.text)
if __name__ == '__main__':
default_path = "/home/pi/image.jpg"
line_photo("\nラズパイから写真を送信", default_path)
実行
以下コマンドでプログラムを実行します。
※ 事前に、上記の「カメラで写真撮影」の章を実行し、
写真を撮影しておいてください。
python3 line.py
結果として、
Lineにラズパイから「写真」が通知されれば成功です!
機能のまとめ
以上の機能をまとめて、
やりたいことを実現していきます。
プログラム
この章では、以下赤字のファイルを修正します。
赤色以外のファイルは、上記の章で出てきた内容と同じです。
/home/pi/work/
photo_line/
├app.py
└line.py
app.py
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import sys
import line
import subprocess
# LED_GPIO 変数に 24をセット
SW_GPIO = 24
# GPIO.BCMを設定することで、GPIO番号で制御出来るようになります。
GPIO.setmode(GPIO.BCM)
# GPIO.INを設定することで、入力モードになります。
# pull_up_down=GPIO.PUD_DOWNにすることで、内部プルダウンになります。
GPIO.setup(SW_GPIO, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
PHOTO_PATH = '/home/pi/work/photo_line/image.jpg'
while True:
try:
# ボタン押しで写真を撮影し、Lineへ送信
if GPIO.input(SW_GPIO) == 1:
subprocess.run(f'fswebcam -r 1280x960 --no-banner {PHOTO_PATH}', shell=True)
line.line_photo("\nラズパイから写真を送信", PHOTO_PATH)
# Ctrl+Cキーを押すと処理を停止
except KeyboardInterrupt:
# ピンの設定を初期化
# この処理をしないと、次回 プログラムを実行した時に「ピンが使用中」のエラーになります。
GPIO.cleanup()
sys.exit()
実行
コマンドラインから、先程作成した app.py のディレクトリに移動し、
以下コマンドでプログラムを実行します。
python3 app.py
ボタンを押すと、
カメラで撮影された写真が、Lineに送信されます。
最後に
如何だったでしょうか?
・ボタンを押したか判断出来た時、
・写真が撮れた時、
・写真をLineで送れた時、
感動しましたよね♪
この感動を一人でも多くの人に味わってもらいたいな。
自分で作ったものが動くって楽しいですよね♪
この記事に関連し、以下を作っても楽しいですね。
・定期撮影(1時間に1回撮影)
・人が居たら撮影
・以下記事と併せて、挨拶のタイミングで写真を撮る
以下記事では他にも色んな電子工作を作っています。
あなたが作りたいモノのヒントがあれば嬉しいです。
記事を更新するとTwitterでつぶやきます。
フォローしてもらうと、記事を書くモチベーションが上がります。
下のTwitterアイコンからフォローお願いします。
不明な点があればページTOPの「お問い合わせ」にてご連絡下さい。
もし一人で作るのが難しかったら、
一緒に作るサービスをしています。
お気軽に ページTOPの「お問い合わせ」にてご連絡下さい。