プログラミング系ブログ

プログラミング系ブログ

プログラムやパソコンパーツ関連のことを、まったりと解説したり、しなかったりするブログです。

Raspberry Pi 4 を Alexa に

皆さんお久しぶりです。いかがお過ごしでしょうか?
筆者は 6 月に入ってから忙しくなり、ちょっぴり更新をさぼって??いましたが、 以前の記事で NAS として購入した raspi4 に Alexa を入れてみたので記事にします。
raspi4 をお持ちでない方も、読み物としてお楽しみください。

はじめに

raspi に Alexa を入れるためには、Alexa Voice Service というサービスを利用する必要があります。なので、

  1. Amazon での利用登録
  2. raspi へのインストール

の 2 つのステップをクリアする必要があります。
ちょっと面倒ですが、さっそく手順に移りましょう~。
ちなみに、raspberry pi は raspi4 でなくとも動きます。お持ちの raspi でお試しください。

Amazon での Alexa 利用登録

まずは、Amazon での利用登録をしましょう。
Amazon Developer Services and Technologies
にアクセスし、右上の「ログイン」からAmazonのアカウントでログインしてください。

f:id:dpcblog:20200624083531j:plain

アカウントを持っていないという方は新しくアカウントを作ってください。
下の「Amazon Developerアカウントを作成」からアカウントが作れます。

f:id:dpcblog:20200624083551j:plain

この画面の後、筆者の場合は「Amazon開発者ポータルへの登録」という入力フォームが表示されました。 必要事項を入力して、登録をしましょう。
なお、今回はスキル公開等は関係ないですが、 開発者名はスキル(Alexaのアプリのようなもの)を公開した際、Alexaストア上に表示されるものらしいので、 本名でなくとも構わないと思います。実際筆者はニックネームにしました。ちなみに後から変更できないようなので注意です。
入力出来たら、「送信」を押して、「コンソールの利用を開始」を押せばOKです。

初期画面に戻るので、「Amazon alexa」を選択してください。

f:id:dpcblog:20200624084254j:plain

次に「Alexa Voice Service(AVS)」をクリックです。

f:id:dpcblog:20200624084030j:plain

次は、「AVSコンソール」です。

f:id:dpcblog:20200624084325j:plain

「製品」です。

f:id:dpcblog:20200624084349j:plain

「新しい商品を追加」です。

f:id:dpcblog:20200624084408j:plain

この次、Raspi4 の設定情報を入力します。

f:id:dpcblog:20200624084523j:plain

「プロフィールを新規作成する」を選び、セキュリティプロファイルを新規作成します。

f:id:dpcblog:20200624084705j:plain

「セキュリティプロファイル名」と「セキュリティプロファイル記述」を入力したら、「次へ」 を押してください。
利用規約に同意して、「完了する」をクリックです。
「商品が作成されました。」と表示されたらOKです。

f:id:dpcblog:20200624084808j:plain

次に、Alexa Voice Serviceのセットアップを行います。登録した製品をクリックです。

f:id:dpcblog:20200624084925j:plain

「セキュリティプロファイル」 → 「他のデバイスやプラットフォーム」を選択です。

f:id:dpcblog:20200624084848j:plain

「クライアントID名」をてきとうに記入したら、「一般ID」をクリックすれば、「クライアントID」が表示されます。

f:id:dpcblog:20200624085032j:plain

「ダウンロード」を押して設定ファイルをダウンロードしましょう!

f:id:dpcblog:20200624085644j:plain

"config.json" という名前のファイルがダウンロードされます。 これは raspi4 の設定に必要なので以前設定したように NAS 経由で raspi4 の中に放り込んでください。
もちろん、ssh 接続等で、scp コマンドなど使ってもらっても大丈夫ですよ~。

Amazonでログイン

のページにて、セキュリティプロファイル名を選んで「確認する」をクリックします。
スキルのためのプライバシー規約同意書のURLを求められますが、自分用で作っていないので、 ダミーURLとして「https://example.com」を入力します。このhttps://example.comのサイトに飛んでみればわかりますが、「このドメインは、ドキュメントの例で使用するためのものです。事前の調整や許可を求めることなく、このドメインを文献で使用できます。」とのことです。
「セキュリティプロファイルで「Amazonでログイン」が正常に有効化されました。」と表示されれば、Amazon側の設定は終了です。

Raspi4 利用設定

次は、raspi の設定に移ります。
Raspi4 には、マイクとスピーカーが付いてないので、 筆者は、Logicool(ロジクール) の C270n と BUFFALO の BSSP29UWH を使っています。

他の製品のマイクやスピーカーでも普通に使えると思います。たぶん...。
(あらかじめ使えるかどうかネットでリサーチした方がいいかも...??)

usb に差して、raspi 4 で

 arecord -l 

とコマンドを打つと何か表示されるはずです。なにも表示されないならマイクを認識してないので再度差し直ししてください。

画像のように右上のスピーカーマークを右クリックして、マイクとスピーカーを設定します。

f:id:dpcblog:20200624091258j:plain
f:id:dpcblog:20200624091315j:plain

output を Analog に、input を USB デバイス にしてください。
「Input Device Settings」で Mic をマックスまで上げておくとよいかも? (任意)

Alexa をダウンロードするにあたり、まずインストール先ディレクトリを作ります。

mkdir alexa

筆者は alexa としました。
こうしてディレクトリを作ってその中で作業すれば、失敗した時もディレクトリを削除すれば最初からやり直せます。

cd ./alexa

で移動しましょう。

wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Install/setup.sh
wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Install/genConfig.sh
wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Install/pi.sh

とコマンドを 3 つ打ちます。これで Alexa のダウンロードに必要なスクリプトがダウンロードできます。 この後、/home/pi/alexa フォルダに、先ほどダウンロードした "config.json" を移動させてください。

bash setup.sh config.json

でダウンロードしたスクリプトを実行しましょう。

f:id:dpcblog:20200624091939j:plain

実行の同意を求められるので、AGREE と入力した後、エンターキーです。

f:id:dpcblog:20200624092118j:plain

ちょっぴり時間かかるので待ちましょう。

f:id:dpcblog:20200624092141j:plain

上の画像のようになったら、ライセンスの条文が表示されます。Enter キーを押しましょう。何度か押すと全文表示されます。
全部表示されたら、yes で同意すれば build が始まりますが、ここからもそこそこ時間 (15分~) かかるので気長に待ちましょう。
Completed Configuration/Build 」と表示されたら終わりです。

bash startsample.sh

と打つと、Alexa が動きますが、初回は認証が必要です。

################################################################################################
#       To authorize, browse to: 'https://amazon.com/us/code' and enter the code: 「コード番号」       #
################################################################################################

と表示されますので、(時間が経つと画面から流れていってしまうのでスクロールして探してください)
https://amazon.com/us/code へ行き、ログインしてからコード番号を入力します。
この時、startsample.sh を止めないでくださいね。
コードを入力したら、下の写真のように Allow で、同意します。

f:id:dpcblog:20200624092444j:plain

写真のように成功がでたら終了です。

startsample.sh が止まっていたら、いったん、コンソールに ”c” を入力して Enter 押しましょう。 すると設定が開きます。
f:id:dpcblog:20200624092502j:plain

"Press '1' followed by Enter to see language options. " となっていると思うので、"1" を入力しましょう。 続けて言語選択画面がでるので、"14" が 日本語なので、"14" を入力します。

Time zone の変更は、どうもコンソールからはできないみたいなので、 https://alexa.amazon.co.jp/spa/index.html へ行き、ログインしてください。
「設定」→「デバイス (自分のデバイス名のところ)」→「デバイスタイムゾーン」の順にクリックしていけば出て来るので、 「アジア」「日本標準時」に変更してください。


ここで、一度、Ctrl + c で startsample.sh を終了し、マイクとスピーカーの動作を確認します。

 aplay /usr/share/sounds/alsa/Rear_Center.wav 

と入力すれば、先ほどマイクとスピーカーを設定したので、 「Rear_Center」 としゃべるはずです。音が大きい時は音量調節してください。

マイクは録音で確かめます。

 arecord -f cd test.wav 

で録音できるので、マイクに向かって何か喋って下さい。Ctrl + c で録音を終了できます。

 aplay test.wav 

で再生した音声が聞こえるかを確認して下さい。
聞こえればばっちりです。聞こえなければ設定を見直してください。

ここで注意なのですが、筆者の環境ですと、VNC などで接続していると録音した音が聞こえても、 Alexa の音声がスピーカーから聞こえないことがありました。

ふと試しに hdmi で音を出すと Alexa の応答がテレビから聞こえたので、

 sudo raspi-config 

で設定を開き、「Advanced Options」→「Audio」→「Headphones」を選択して設定すると、Alexa からの応答が聞こえました。
f:id:dpcblog:20200624094738j:plain f:id:dpcblog:20200624094750j:plain f:id:dpcblog:20200624094800j:plain

同じような症状になった方は、参考にしてください。(これで直らなかったらごめんなさい。)

あとはここまでの Alexa のインストールに関して、終始 sudo コマンドはいりません。
管理者として sudo をつけると筆者の環境ではなぜか Alexa からの音が出ませんでした。
筆者は sudo を付けている他のサイトや、AVS の github などを見て設定したので、 だいぶ悩んでいろいろ検索したのですが同じような人が結構いるものの、ネットの情報では解決には至らず何度もインストールしなおしたりして、思ったより時間を浪費しました。
たまたま気が付いたのですが sudo つけないことをお勧めします。
やはり linux は、管理者権限の扱いが難しいですね...。

自動起動

systemctl で設定しようとしたのですが上手く行かなかったので、 筆者は /home/pi/.profile に書いて起動時に自動で実行してもらうようにしました。
まず、

 cp /home/pi/alexa/startsample.sh /home/pi/alexa/startalexa.sh 

で実行用のファイルをコピーします。
次に、

 sudo nano /home/pi/alexa/startalexa.sh 

でコピーしたファイルを開き、

#変更前
PA_ALSA_PLUGHW=1 ./SampleApp "/home/pi/alexa/build/Integration/AlexaClientSDKConfig.json" "/home/pi/alexa/third-party/alexa-rpi/models" DEBUG9
#変更後
PA_ALSA_PLUGHW=1 ./SampleApp "/home/pi/alexa/build/Integration/AlexaClientSDKConfig.json" "/home/pi/alexa/third-party/alexa-rpi/models" 

debug モードでの起動ではなく、普通に起動してほしいだけですので、DEBUG9の記述を削除しておきましょう。
あとは、

 sudo nano /home/pi/.profile 

でファイルを開き、一番下に、

if [ -f /proc/$PPID/cmdline ] && [ "$(command cut -d : -f1 < "/proc/$PPID/cmdline")" != "sshd" ]; then
    bash /home/pi/alexa/startalexa.sh &
fi

を追記しておけば起動時に読み込まれますので再起動してください。
raspi4 が起動したら、

 ps -Af | grep "alexa"

と打てば alexa のプロセスが立ち上がっているはずです。
Alexa に話しかけてみましょう~!

[2020-7-26 追記]
上記コードに、if [ -f /proc/$PPID/cmdline ] && [ "$(command cut -d : -f1 < "/proc/$PPID/cmdline")" != "sshd" ]; then ~ fi の部分を追記しました。
ssh で接続したときに設定を再読み込みしないようにするために必要です。これがないと ssh 接続の際、すでに起動している Alexa を二重に起動しようとしてエラーが出てしまいます。
普段 ssh 接続をしていなかったので見落としていました。ごめんなさい。

おわりに

以上で、raspi に Alexa をインストールする手順は終わりになります。
これで、筆者は Clova と Google Nest hub に加え、 Alexa も使えるようになりました。
スマートスピーカーまみれです(笑)
Amazon の配送状況なんかを教えてくれるのは便利ですね。
皆さんも試してみてはいかがでしょうか?
最後まで読んでいただきありがとうございました!