Raspberry Piとキーボードが一体化した「Raspberry Pi 400」を使っていますが、これを使って色々な電子工作をしてみたいと思います。今回はマイクとスピーカーを付けて、キーボードがしゃべって応えてくれるスマートスピーカーにしていきます!
今回の記事の流れ
- Raspberry Pi 400でスマートスピーカー作成
- マイク、スピーカーのセットアップ
- Google Assistant SDKのインストール
- キーボードとスマートスピーカーを使ってみよう!
必要な部品など
Raspberry Pi 400でスマートスピーカー作成
前回に引き続きRaspberry Pi 400(以下ラズパイ400)で電子工作をしていきます。
ラズパイ400には背面に3つのUSB端子があるので、ここにマイクやスピーカーを追加する事で、機能を拡張できて本当のパソコンのように使えます。またGoogle HomeのようなAssistant機能をインストールすると、ラズパイ400をスマートスピーカーにする事ができます。キーボードがしゃべって、色々な質問に応えてくれたら面白いのではないでしょうか?
ラズパイへのGoogle Assistant SDKのインストールはこちらのサイトに詳しく載っているので、それを順番に見ていきます。
https://developers.google.com/assistant/sdk/
まずはGoogleのCloud Platformにアカウントを作って、ログオンできるようにしておいて下さい。そして先ほどのGoogle Assistant SDKのページに行きます。このページの”Get Started”を押して、先に進みます。
ラズパイにAssitant SDKをインストールする方法には、大きく分けて以下のようなステップがあります。
- マイクとスピーカーのセットアップ
- Google Projectとデバイス・モデルの登録
- ラズパイへのAssistant SDKのインストール
一つづつ見ていきましょう。
マイクとスピーカーのセットアップ
まずラズパイ400で使えるマイクとスピーカーを用意します。ラズパイ400には音声出力のラジオジャックがないので、このようなUSB接続ができるマイクとスピーカーを使いました。
ラズパイ400のUSB端子に、マイク・アダプターを接続します。そこにミニスピーカーも差し込みます。キーボードの左側に黒いマイク、右側に白いミニ・スピーカーをセットしています。あまり近くに配置するとハウリングしてしまうので注意して下さい。
接続したら、ラズパイのコマンドを使って、マイクとスピーカーの確認を行います。スピーカーとマイクのCard情報がチェックできます。またAlsamixerというコマンドで音量などが調節できます。一番最後のコマンドで、マイクで拾った音をスピーカーからそのまま出す事ができます。自分でしゃべった声が聞こえたら、マイクとスピーカーの設定はOKです。
$ aplay -l # スピーカーの確認。止めるときは、Ctrl + c。
$ arecord -l # マイクの確認。止めるときは、Ctrl + c。
$ alsamixer # 音量の調整など。抜けるときは、Esc。
$ arecord -f cd -Dhw:2 | aplay -Dhw:2 # マイクのCard 2、スピーカーのCard 2の時
この接続では、スピーカー(赤枠内)はCard 2、Device 0となっていて、マイク(青枠内)はCard 2、Device 0でした。
Google Projectとデバイス・モデルの登録
Googleでデバイスを登録するために、Actions on Googleという設定画面に行きます。ここで”New Project”から新しいプロジェクトを作ります。
https://console.actions.google.com/
適当なプロジェクト名”raspi400”などと入れて、日本語での受け答えをさせるためにJapanese、Japanを選びます。
プロジェクトができたら、次の画面で適当なアクションを選びます。ここでは”Smart Home”を選んでおきます。また一番下にある”Device registration”を押して、デバイス情報を追加します。
デバイス情報画面で、デバイスの名前やモデルIDなどを入れます。先ほどのプロジェクト名とモデルIDは後で使うので、メモしておいて下さい。
“Register Model”を押した後に、認証ファイルをダウンロードする画面が出てくるので、それを自分のパソコンなどに保存します。
ダウンロードしたJsonファイルをパソコンからRaspberry Piの方に、SCPコマンドを使って転送します。説明の2番目に書いてあるような方法で、ラズパイ400に転送しておきます。
ラズパイ400側に入り直して、ホームにclient_secretファイルが確認できれば、転送は完了です。
(PC側) $ scp ~/Downloads/client_secret_xxx.json pi@<raspi400-host-name>.local:
Warning: Permanently added the ECDSA host key for IP address ‘aaaa’ to the list of known hosts.
pi@<raspi400-host-name>.local’s password: client_secret_xxx 100% 346 40.5KB/s 00:00
その後、再度SDKインストールのページに戻って、”Enable API”ボタンを押して、Assistant APIを有効化します。
Assistant SDKのインストール
それではGoogle Console上のセットアップが済んだので、ラズパイ400にログインして、Assistant SDK自身をインストールしていきます。ラズパイのPythonで使えるSDKは、こちらのGithubに詳しく載っているので適宜参照して下さいね。
https://github.com/googlesamples/assistant-sdk-python
このGithub上の説明に従って、以下のコマンドによりAssistant SDKをインストールしていきます。
pi@raspi400:~ $ sudo apt-get install python3-dev python3-venv
pi@raspi400:~ $ python3 -m venv env
pi@raspi400:~ $ env/bin/python -m pip install –upgrade pip setuptools wheel
pi@raspi400:~ $ source env/bin/activate
(env) pi@raspi400:~ $ sudo apt-get install portaudio19-dev libffi-dev libssl-dev
(env) pi@raspi400:~ $ sudo python3 -m pip install –upgrade google-assistant-sdk[samples] (env)
pi@raspi400:~ $ python -m pip install –upgrade google-auth-oauthlib[tool]
(env) pi@raspi400:~ $ google-oauthlib-tool –scope https://www.googleapis.com/auth/assistant-sdk-prototype –save –headless –client-secrets ~/client_secret_xxxx.json
Please visit this URL to authorize this application: https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=xxxx&redirect_uri=yyyy&state=zzzz&prompt=consent&access_type=offlineEnter the authorization code:
一番最後の認証ファイルを適用するところでは、先ほどダウンロードしてラズパイに転送しておいたJsonファイルを指定します。最後のコマンドを流すとPlease visitとURLが表示されるので、ブラウザからそのURLを開きます。その後以下のステップに従います。
1.URLをブラウザで開くと、Googleアカウント画面が開くのでログイン
2.今回作ったプロジェクト、アプリへの権限付与を求められるので、それに許可を与える
3.最後にコードが表示されるので、それをコピーし、ラズパイに戻って、それを”Enter the authorization code:”に貼り付ける
コードをペーストして、認証情報が保存されたら、Assistant SDKのインストール、セットアップは完了!早速使ってみましょう。
キーボードとスマートスピーカーを使ってみよう!
ちょっと長かったSDKのインストールが終わったので、スマートスピーカーとして使ってみましょう。
マイクとスピーカーの接続を確認して、googlesamples-assitant-pushtotalkのコマンドを入力します。これには先ほどのプロジェクトIDとモデルIDを指定します。
上手くいくと“Press Enter to send a new request…”というメッセージが出るので、キーボードのエンター・キーを押します。その後日本語で呼びかけると、Google Homeのように日本語で応えてくれます!
pi@raspi400:~ $ source env/bin/activate(env)
pi@raspi400:~ $ googlesamples-assistant-pushtotalk –project-id raspi400 –device-model-id raspi400-prod-speaker
…
Press Enter to send a new request…
INFO:root:Recording audio request.
WARNING:root:SoundDeviceStream read overflow (3200,6400)
INFO:root:Transcript of user request: “ハロー”.
INFO:root:End of audio request detected.
INFO:root:Stopping recording.
INFO:root:Transcript of user request: “ハロー”.
INFO:root:Playing assistant response.
INFO:root:Finished playing assistant response.
Press Enter to send a new request…
INFO:root:Recording audio request.
INFO:root:Transcript of user request: “今日の”.
INFO:root:Transcript of user request: “今日の天気は”.
INFO:root:Transcript of user request: “今日の天気は 何で”.
INFO:root:End of audio request detected.
INFO:root:Stopping recording.
INFO:root:Transcript of user request: “今日の天気は何ですか”.
INFO:root:Playing assistant response.
INFO:root:Finished playing assistant response.
Press Enter to send a new request…
INFO:root:Recording audio request.
INFO:root:Transcript of user request: “さようなら”.
INFO:root:End of audio request detected.
INFO:root:Stopping recording.
INFO:root:Transcript of user request: “さようなら”.
INFO:root:Playing assistant response.
INFO:root:Finished playing assistant response.
どうでしょうか?見事キーボードに話しかけて、天気や今日のジョークなど応えてくれたでしょうか?マイクやスピーカーの設定が上手くいっていない時は、こちらを見てハードウェアの確認をしてみて下さい。
音声付きの動画はこちらです。参考にしてみて下さい!
キーボードに話しかけるのは、なかなか面白い経験ではないでしょうか?
これ以外にもGoogleとの会話に自分独自のコマンド(他のアプリとつないだり、ハードウェアと連動させたりする事)もできるので、Assistant SDKのNext Stepsページを参照して、カスタマイズしてみて下さい。
今後もラズパイ400に色々な機器をつないで、面白い電子工作していきたいと思います。お楽しみに!
(吉田 顕一)
]]>