息子(6歳)から、ラズパイで写真を撮ってLINEにメッセージを送ってもらう。
■やりたいこと
息子(6歳)に手書きのノートを持たせて写真を撮ってそれをLINEに送ってもらう。そうすれば会社に居ながら息子とLINEでやりとりできる(パパからのお返事は、ママちんのLINEに送って息子に伝えてもらう)。
■まずはLINEのトークン発行
LINE Notifyにログインして、LINEに通知するためのトークンを発行する。
https://notify-bot.line.me/ja/
ログインしたら右上の自分の名前のところクリックして「マイページ」をクリックするとページ下部に「トークンを発行する」というボタンがあるのでそれをクリックする。
注意:ここで発行されるトークンはページを閉じるともう見られなくなるのでちゃんとコピーしてメモしておこう。
■ラズパイで写真を撮って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
■音声を流すシェルスクリプト
/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
■こんな感じにする
この後スピーカーは100均で買った電源不要のやつに変更しました。
◼︎MESHボタンで動かす
ボタンタグを押すと、GPIOタグからデジタル出力がHIGHになるように指定して、それをラズパイの4番ピンに接続します。
一回だけHIGHにしたらその後はLOWに戻すようにします。これやらないとずっとHIGHのままで、何度も写真を撮ってくれちゃいます(汗
こんな感じでGPIOタグとラズパイを接続します。
◼︎使ってみる
息子から写真を送ってもらいます。
ちと画質荒いですがなんとか読み取れる。
(「なんじ?」と書いてある。「今日何時に帰ってくるの?」の意味)
これで息子とやりとりできるようになりました。
この記事が気に入ったらサポートをしてみませんか?