声で操作するマルチリモコンをつくる!
第1回:ラズパイZeroとラズパイHatで電子工作を簡単に!
第2回:Groveセンサを使った環境チェックデバイスをつくる
こんにちは、ヨシケンです!ラズパイZeroを使った工作の第3回は、さまざまなリモコン機器を登録できるマルチリモコンをつくります。ラズパイにCloud Speechをインストールして、声でテレビや加湿機を操作してみましょう。
今回の記事で必要な物一覧
・小型リチウムポリマーバッテリー
(※注意:取り扱いに十分気をつけて自己責任でお使いください)
・ラズパイZero用ケース(ラズパイStarter Kitだと、ケースも同梱されていてすぐに始められます。)
今回の記事の流れ
1. Cloud Speechのインストール
2. 赤外線受信の設定
3. 赤外線送信の設定
4. 音声対応リモコン型につくりあげる
5. まとめ
1.Cloud Speechのインストール
ラズパイZeroに話しかけて操作するため、GoogleのCloud Speechをインストールします。以下のサイトの指示に従ってSDKを導入していきます。
(https://cloud.google.com/speech-to-text/docs/quickstart-client-libraries?hl=ja)
まずGoogle Cloud Consoleから、Cloud Speechを開いて、それを有効化します。
次に、同じConsole上から、以下の認証情報のページに移動し、サービスアカウントキーを作成します。(https://console.cloud.google.com/apis/credentials?hl=ja)
サービスアカウントIDに適当な値を入れて、JSONタイプを選んで、作成を押します。すると、秘密鍵がパソコンにダウンロードされます。
認証JSONファイルをラズパイ側に転送します。その後、ラズパイ側でログインし直して、先程のキーファイルが送られているか確認します。それを以下コマンドで、ラズパイの環境変数として読み込ませます。環境変数設定コマンドは、このログインでだけ有効なので、ラズパイを再立ち上げなどする際は、再度ファイルを読み込ませる必要があります。
これでGoogle認証設定とラズパイの紐付けができたので、ラズパイにgoogle-cloud-speechをインストールしていきます。
まず、サンプルプログラムのダウンロードをおこないます。
このプログラム群にはGoogleのさまざまなAPIのサンプルが入っています。この中でspeechの部分を使っていきます。
Python3系の依存ライブラリの導入と、Cloud Speechをインストールします。
$ pip3 install pyaudio
$ pip3 install –upgrade google-cloud-speech
Cloud Speechのインストールが終わったら、microphoneというフォルダに入っているリアルタイム文字起こしのプログラムを実行します。まずは英語がデフォルトになっているので、英語で話しかけてみてください。
“exit”や”quit”と言うと、この聞き取りのプログラムが終了します。
次に、日本語を聞き取るために、サンプルプログラムをコピーして少し改良します。
$ sudo vi streaming_jp.py
main()プログラム中の修正:
listen_print_loop内のkeywords修正:
ここで修正後の日本語聞き取りプログラムを流してみます。
いかがでしょうか? 日本語を聞き取って、文字起こしをしてくれたと思います。ここでは「さようなら」などと言うと、このプログラムから抜けてくれます。
2.赤外線受信の設定
Cloud Speechがインストールできたところで、ラズパイとReSpeakerに赤外線をセットアップしていきます。
前回説明したように、このReSpeakerには簡単にセンサなどを追加できるGrove端子が2つ付いています。
ここではGrove機器のうち、まずリモコン信号を読み取る受信用赤外線LEDをセットします。
Grove受信用赤外線LED、向かって左側端子に差しています。
この受信用赤外線LEDを使って、リモコンの信号を読み取ってみます。詳細のステップは、以前のスマートホームの記事の赤外線の設定方法を参照してください。LIRCという赤外線ツールをZeroにインストールしておこないます。
$ sudo vi /boot/config.txt
$ sudo vi /etc/lirc/lirc_options.conf
ここで注意しなければいけないのが、最新のRaspbianを使うと、前記事時点に比べOSのカーネルのバージョンが上がっているようです。それに伴ってconfig.txtファイルの設定方法も以下のように少し変える必要があります(ここでは赤外線受信にGPIO3、送信にGPIO12を使っています)。
[config.txt]
また、lirc_options.confの方は、受信用に以下のように設定します。
[lirc_options.conf]
設定を済ませたあとに、mode2というコマンドでリモコン信号が受信できるか確かめます。
一度lircdを止めてから、irrecordでリモコン信号を登録します。ここではテレビと加湿機のリモコン設定を覚えさせました。
$ irrecord -n -d /dev/lirc1
これによりtvというテレビとhumidという加湿機の設定ファイルremote.lircd.confができました。
3.赤外線送信の設定
リモコン信号が登録できたところで、これをラズパイZeroから送信して操作してみます。これも発信用赤外線LEDのGrove端子がありますので、Zero上のRepeakerに差します。
Grove発信用赤外線LED、向かって右側の端子に差しています。
まず、先ほど作ったremoteコマンドファイルを自動起動プログラムとして登録します。
$ sudo systemctl enable lircd
$ sudo systemctl start lircd
$ sudo systemctl status lircd
赤外線送信のコマンドは、irsendを使いますが、これも設定方法が若干変わっていますので、lirc_optionsを以下のように変更します。
[lirc_options.conf]
lircが起動できたら、以下コマンドで登録内容を確認します。
最後にリモコン操作をしてみます。
いかがでしょうか? テレビや加湿機をオンオフできたでしょうか?
$ irsend SEND_ONCE humid off
4.音声対応リモコンにつくり上げる
赤外線の受信と送信を使うことができたら、それらをまとめて音声対応リモコンにします。
Grove端子をReSpearkerにつないだ状態で、ラズパイZeroのケースなどで筐体を覆います。上蓋の方はReSpearkerのボタンがちょうど押せるようにします。
リモコン対応が可能なコマンドを表面に貼っておくと分かりやすいかもしれません。
ここで、Repeakerのボタンが押されると、Cloud Speechがリモコン指示を聴き始めるようにbutton_stream.pyというプログラムをつくります。ReSpeakerのボタンはGPIO17とつながっています。
[button_stream.pyプログラム]
次に「テレビつけて」などの発話に合わせて、リモコン操作できるように赤外線プログラムを修正します。stream_jp_ctl.pyとして以下の部分を追加します。
[stream_jp_ctl.pyの追加部分]
それでは、ボタンプログラムを流してリモコンを使ってみましょう。起動すると、まずLEDが光って準備ができたかどうか分かります。
ボタンを押して少ししてから、「テレビオン」や「加湿機つけて」とリモコンに呼びかけてみましょう。
リモコンはテレビだけですと、ボタンを押すだけの方が早い気がしてしまいます。テレビ、エアコン、照明などのリモコンをいくつでも追加できるので、音声コマンドを追加してマルチなリモコンにしてみてください。
5.まとめ
今回は、ラズパイZeroに赤外線の送受信を設定してみました。Grove端子を使っているので、ホームデバイスをつくった時よりも簡単で、コンパクトにリモコンがつくれたのではないでしょうか。ぜひ、テレビだけでなく、エアコンや扇風機などリモコン機器を登録して便利なマルチリモコンにしてみてください。
また、Cloud Speechを使うとリアルタイムに会話をテキストにしてくれます。これを使えば言葉でさまざまな操作をすることが可能です。できることが広がって、ますます便利になりますね!
では次回は、画面表示などを付けてスマートウォッチ型のラズパイZero工作をしたいと思います。
お楽しみに!
(ヨシケン)
今回の連載の流れ
第1回:ラズパイZeroとラズパイHatで電子工作を簡単に!
第2回:Groveセンサを使った環境チェックデバイスをつくる
第3回:声で操作するマルチリモコンをつくる!(今回)
第4回:小型ディスプレイを付けてスマートウォッチをつくる!