息子(6歳)から、ラズパイで写真を撮ってLINEにメッセージを送ってもらう。

■やりたいこと

息子(6歳)に手書きのノートを持たせて写真を撮ってそれをLINEに送ってもらう。そうすれば会社に居ながら息子とLINEでやりとりできる(パパからのお返事は、ママちんのLINEに送って息子に伝えてもらう)。

■まずはLINEのトークン発行

LINE Notifyにログインして、LINEに通知するためのトークンを発行する。
https://notify-bot.line.me/ja/
ログインしたら右上の自分の名前のところクリックして「マイページ」をクリックするとページ下部に「トークンを発行する」というボタンがあるのでそれをクリックする。
注意:ここで発行されるトークンはページを閉じるともう見られなくなるのでちゃんとコピーしてメモしておこう。

画像1

画像2

■ラズパイで写真を撮ってLINEに送ってみる

ラズパイの適当なフォルダ(例えばデスクトップ)にcamera.shというシェルスクリプトファイルを作成する。空っぽのままでいいので下記コマンドでファイルを/src/に移動しよう。srcというディレクトリがなければ予め作っておく。ついでに撮った写真を保存するディレクトリも作っておこう

$ sudo mkdir /home/pi/Pictures/line_pictures
$ sudo mkdir /src
$ sudo mv camera.sh /src

#予めcamera.shがおいてあるディレクトリに移動しておくこと#

/src/camera.shの中に次のようなスクリプトを書く。

#!/user/bin/bash

#変数定義
date=$(date +"%Y%m%d_%H%M%S")
save_file="/home/pi/Pictures/line_pictures/${date}.jpg"
token="<ここにトークンを貼る>"

#写真撮影
#LINEの写真サイズに合わせてサイズ指定。シャッタースピードは1000ミリ秒。
raspistill -w 890 -h 1188 -t 1000 -o $save_file

#LINEに送信
#ここでimageFile=のところはは''ではなく""で囲むこと。そうしないとちゃんと動かない。
curl -X POST -H "Authorization: Bearer $token" -F "message=ひなちゃんからメッセージです" -F "imageFile=@${save_file}" https://notify-api.line.me/api/notify

■ラズパイでmp3ファイルが再生されるようにする

iphoneのボイスメモなどで音声を録音する。
「写真を撮ります。はい、チーズ」
これをメールに添付して送信し、ラズパイでメールソフトを開いてダウンロードする。
iphoneで録音した音声は.m4a形式なのでこれを.mp3に変換する。
このサイトを使うと便利。
https://online-audio-converter.com/ja/
作成した.mp3ファイルは適当なディレクトリにおいておこう。例えばさっきつくった/src/とかの下に。

$ sudo mv take_a_picture.mp3 /src

次にこの.mp3ファイルを動かしてみる。
pygameというモジュールが基本らしいが、どうにも動かなかったのでmpg321というものを使ってみることにした。まずはインストール。

$ sudo apt-get install mpg321

インストールできたら動かしてみる。-gオプションで音量を調整できる。1〜1000まで(かな?)

$ mpg321 /src/take_a_picture.mp3 -g 100

おっと、ラズパイにスピーカーを繋いでおくのを忘れずに。
スピーカーから音が出るようにするにはラズパイの設定を変えておこう。

$ sudo raspi-config

設定画面が開いたらAdvanced Options→Audioで3.5mmジャックを選択しておけばOK。
これで音が流れればOKです。
100均一とかで売っているようなアンプ機能のないスピーカーを使う場合にはラズパイの音量もMaxにしておこう。ターミナルでalsamixerと打つと縦バーが表示されるのでこれで音量調整する。

$ alsamixer

スクリーンショット 2019-10-23 23.16.34

■音声を流すシェルスクリプト

/src/にvoice.shというファイルをつくり、中身をこうします。

#!/user/bin/bash

#音声出力「写真を取ります」
sudo mpg321 /src/take_a_picture.mp3 -g 100

ターミナルからこうやれば動く。

$ sudo sh /src/voice.sh

■ボタンが押されたらシェルスクリプトを実行するpythonプログラムを作る

また/src/に、今度はcamera.pyというpythonプログラムファイルを作成する。中身はこんな感じ。

#!/user/bin/env python

import RPi.GPIO as GPIO
import time
import os

GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

try:
   while True:
       if GPIO.input(4) == GPIO.HIGH:
           os.system('sudo sh /src/voice.sh')
           os.system('sudo sh /src/camera.sh')
           os.system('sudo mpg321 /src/finish.mp3 -g 100')
           time.sleep(1.0)
     
except KeyboardInterrupt:
   pass

GPIO.cleanup()

GPIO4番ピンにHIGHの入力があったら順番に3つのコマンドを動かす。
1)「写真を撮るよ」という
2)写真を撮って、LINEに送信する
3)「写真を撮ったよ」という。

■ラズパイ再起動時に.pyファイルが動くようにする

ここまでできたら、ラズパイを起動する度に自動でcamera.pyが起動してくれるように設定をする。まずはcrontabを編集モードで開きます。

$ crontab -e

crontubが開いたら、末尾に下記を加えましょう。ラズパイが再起動される度に/src/ディレクトリにあるcamera.pyが動いてくれます。

@reboot /src/camera.py

■こんな感じにする

画像3

この後スピーカーは100均で買った電源不要のやつに変更しました。

画像5

◼︎MESHボタンで動かす

ボタンタグを押すと、GPIOタグからデジタル出力がHIGHになるように指定して、それをラズパイの4番ピンに接続します。
一回だけHIGHにしたらその後はLOWに戻すようにします。これやらないとずっとHIGHのままで、何度も写真を撮ってくれちゃいます(汗

画像6

画像7

こんな感じでGPIOタグとラズパイを接続します。

◼︎使ってみる

息子から写真を送ってもらいます。

画像8

ちと画質荒いですがなんとか読み取れる。
(「なんじ?」と書いてある。「今日何時に帰ってくるの?」の意味)
これで息子とやりとりできるようになりました。

この記事が気に入ったらサポートをしてみませんか?