今回は、
ラズパイに接続したスピーカーに喋った内容を、
Lineに送信していきます。
使い方として、
・子供が学校から帰って来た時の「ただいま」、を伝えることが出来る。
・用事があった時、喋って用事を伝えることが出来る。
スマホが使えなくても、気軽に、簡単にコミュニケーションが取れるようになるよ。
子供:「早く帰って来て」
子供:「宿題で分からないところがあるんだけど」
離れて暮らす両親:「今日、旅行に行ってきたよ」
あなたなら、どんな使い方をしてみます?
この記事で学べること
- ボタン制御
- マイク入力
- 音声認識
- WebAPI
- IoT
- マイコン
- Linux
- Python
やりたいこと
・ボタンを押している間、喋った内容を取得
・喋った内容を文字列に変換(音声認識)
・文字列をLineに送信
システム構成図
![](https://canmakewakuwaku.com/wp-content/uploads/2021/07/image-7-1024x634.png)
やることリスト
上記の「やりたいこと」をみて、
どんな作業が必要か、自分で項目を考えてみてください。
これを考えることで、「プログラミング的思考」が身に付いていきます。
番号 | 作業項目 | 備考 |
1 | やりたいこと・システム構成図の作成 | |
2 | やることリストの作成 | 処理項目の洗い出し |
3 | 部品の準備 | |
4 | ボタンが押されたことを判断する | |
5 | マイクに喋った内容を音声ファイルに保存 | |
6 | マイクに喋った内容を文字列に変換 | 音声認識 |
7 | 文字列をLineに送信 | |
8 | まとめ | 以上の機能をまとめて、 やりたいことを実現する! |
部品の準備
今回のシステムに必要な部品です。
不足している部品があれば購入下さい。
部品名 | 備考 |
Raspberry Pi | 別途、電源・SDカード・HDMIケーブルが必要です。 |
ブレッドボード(※1) | |
ジャンパー線(※1) | オスーメス:2本 |
ボタン(※1) | タクトスイッチ:1個 |
マイク | 「超小型 USBミニマイク」が値段的にお薦めです。 |
購入に必要な部品を、
Raspberry Pi 関連に記載しています。
※1)「電子工作キット」内に全て含まれています。
ラズパイは、電源を入れただけでは起動しません。
ラズパイの起動手順の記事を参照ください。
ボタンが押されたことを判断する
以下記事「ボタンが押されたことを判断する」の章を
参照ください。
回路・配線図・プログラムの情報を書いています。
![](https://canmakewakuwaku.com/wp-content/uploads/2021/03/11_1200x630-160x90.png)
マイクに喋った内容を音声ファイルに保存
以下記事「マイクに喋った内容を音声ファイルに保存」の章を
参照ください。
![](https://canmakewakuwaku.com/wp-content/uploads/2021/03/rasppi_bot-160x90.jpg)
マイクに喋った内容を文字列に変換
以下記事「マイクに喋った内容を文字列に変換」の章を
参照ください。
![](https://canmakewakuwaku.com/wp-content/uploads/2021/03/rasppi_bot-160x90.jpg)
文字列をLineに送信
ラズパイからLineに文字列を送信するのは意外に簡単で、
Lineから Access Tokenを取得し、
LineのAPIに、 Access Token と通知したい文字列を設定すれば完了です。
LineからAccess Token取得
Lineの Access Token を取得するには、
以下、Line Notifyという連携サービスから取得します。
https://notify-bot.line.me/my/
■以下から、ご自身のLINEアカウントでログイン下さい。
![](https://canmakewakuwaku.com/wp-content/uploads/2021/07/line_login.jpg)
■ 以下画面の「トークンを発行する」ボタンを押す。
Line のAPI仕様書を見たい場合は、「LINE Notify API Document」ボタンから参照ください。
![](https://canmakewakuwaku.com/wp-content/uploads/2021/07/line_token-1024x370.jpg)
■「トークン名」を入力、「1:1でLINE Notifyから通知を受け取る」を選択肢、
「発行する」ボタンを押します。
![](https://canmakewakuwaku.com/wp-content/uploads/2021/07/03ebe475b2bf703686c1ad8f25f1489d-1024x832.jpg)
■ 「コピー」ボタンを押して、トークンをコピーします。
コピーしたトークンは、後でプログラムで使用するので、
別のテキストファイルに保存ください。
はい、以上で Access Token の取得は完了です。
簡単でしたね。
![](https://canmakewakuwaku.com/wp-content/uploads/2021/07/line_token_-1024x656.jpg)
プログラム
以下ディレクトリ通り、ディレクトリとファイルを作成する。
この章では、以下赤字のファイルを修正する。
/home/pi/work/speech_line/
└line.py
line.py
以下、
“Your Access Token” の箇所に、上記で取得した Access Token の文字列を設定下さい。
# -*- coding: utf-8 -*-
import requests
def line(message: str):
url = "https://notify-api.line.me/api/notify"
token = "Your Access Token"
headers = {"Authorization": "Bearer " + token}
params = {"message": message}
r = requests.post(url, headers=headers, params=params)
print(r.text)
if __name__ == '__main__':
line("\nラズパイから送信")
実行
以下コマンドでプログラムを実行します。
python3 line.py
結果として、
Lineに「ラズパイから送信」の文字列が通知されれば成功です!
まとめ
以上の機能をまとめて、
やりたいことを実現していきます。
プログラム
以下の通り、ディレクトリとファイルを作成します。
この章では、以下赤字のファイルを修正します。
赤色以外のファイルは、上記の章で出てきた内容と同じです。
/home/pi/work/speech_line/
├line.py
├record.py
├speech2text.py
└app.py
app.py
# -*- coding: utf-8 -*-
from speech2text import speech2text
import RPi.GPIO as GPIO
import time
import sys
import record
import line
# 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)
if __name__ == '__main__':
# Audioインスタンスの作成
audio = record.Audio()
while True:
try:
# ボタン押し
if GPIO.input(SW_GPIO) == 1:
# マイクに喋った内容を音声ファイルに保存
print('start record')
audio.start_record()
while GPIO.input(SW_GPIO) == 1:
time.sleep(1) # 1秒間待つ
audio.stop_record()
print('stop record')
# 音声ファイルをテキスト変換
text = speech2text()
# 出力
utterance = ''
for result in text.results:
print("Transcript: {}".format(result.alternatives[0].transcript))
utterance = result.alternatives[0].transcript
break
# 喋った内容をLineに通知する。
if utterance:
line.line(utterance)
time.sleep(1) # 1秒間待つ
# Ctrl+Cキーを押すと処理を停止
except KeyboardInterrupt:
audio.stop_record()
# ピンの設定を初期化
# この処理をしないと、次回 プログラムを実行した時に「ピンが使用中」のエラーになります。
GPIO.cleanup()
sys.exit()
実行
コマンドラインから、先程作成した app.py のディレクトリに移動し、
以下コマンドでプログラムを実行します。
python3 app.py
以下の通り、ボタンを押している間に喋った内容が
Lineに通知されたら成功です。
![](https://canmakewakuwaku.com/wp-content/uploads/2021/08/IMG_1223-768x1024.jpg)
![](https://canmakewakuwaku.com/wp-content/uploads/2021/08/IMG_1222.jpg)
最後に
如何だったでしょうか?
・ボタンが押されたことを検知出来た時、
・喋った内容が文字列として変換出来た時、
・喋った内容が、Lineに通知された時、
感動しましたよね♪
この感動を一人でも多くの人に味わってもらいたいな。
自分で作ったものが動くって楽しいですよね♪
この記事に関連し、
・Lineに送った内容をラズパイで喋らせる
を作っても楽しいですね。
以下記事では他にも色んな電子工作を作っています。
あなたが作りたいモノのヒントがあれば嬉しいです。
![](https://canmakewakuwaku.com/wp-content/uploads/2021/05/15_1200x630-160x90.png)
記事を更新するとTwitterでつぶやきます。
フォローしてもらうと、記事を書くモチベーションが上がります。
下のTwitterアイコンからフォローお願いします。
不明な点があればページTOPの「お問い合わせ」にてご連絡下さい。
もし一人で作るのが難しかったら、
一緒に作るサービスをしています。
お気軽に ページTOPの「お問い合わせ」にてご連絡下さい。