フリープロジェクト始動!!

フリープロジェクト始動!!

2018年11月22日, コラム 開発部

〜『第一弾』Raspberry PIでAmazon Alexaを動かしてみた 〜

 

1.はじめに

「小さなものでいいから、自分たちで企画から考えて何か作ってみよう!」という方針のもと、開発部でフリープロジェクトを始動しました。

みんなであれこれと案を出し合った結果、全員一致でIoTをやってみようということになりました。と、いうのも、開発部はみんなソフトウェアエンジニアだったので、ハードウェアに関心を持つスタート地点としては良い題材だと思ったからです。

具体的に何をするのか、いくつか候補があがりましたが、最終的には、「Raspberry PIでAmazon Alexaと繋げて何か喋らせてみよう!」という内容に決まりました。

今回は、大雑把ではありますが、どんなことをしたのか振り返りたいと思います。

 

2.必要なもの

  • Raspberry PI(Raspbian OSインストール済みのもの)
  • スピーカー
  • マイク
  • Amazon Developerのアカウント

必要機材はそれほど多くないので、プロジェクトを始めるのはとても簡単でした。

Raspberry PI(ちなみにRaspberry PI 3のモデルBです)とスピーカーは、以前社内で使用していたものがありましたし、Amazon Developerのアカウントも簡単に取得できました。問題はマイクがないことでした。

幸い、Skypeで使うようなヘッドホンマイクが社内にあったので、それを使用していましたが、やはり不便だったのでUSBマイクを購入しました。マイクと聞くと高価なイメージですけど、実はコレは300円ほどで買えます。

 

3.Raspberry PIのセットアップ

Raspberry PIのセットアップはとても簡単でした。 ダウンロードしたRaspbian OSをRaspberry PIのメモリカードに書き込むだけです。

最初は、モニターは必要ないと思っていたので、Raspberry PI Stretch Liteを使用しました。

そして、マイクロSDカードをPIに差し込んで、Raspberry PIを起動します。

次に、以下のコマンドで、Alexa Voice Service(AVS)SDKをダウンロードしました。

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/config.txt &&
wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Inst all/pi.sh

次に、Raspberry PIのhome/config.txtにデバイスの情報を記述します。(デバイスの情報とは、AmazonのDeveloper consoleから確認できる、デバイスのIDなどです。)

DEVICE_SERIAL_NUMBER=”123456″
CLIENT_ID=”NNNNNN”
PRODUCT_ID=”MMMMMM”

次に、SDKを以下のコマンドでビルドしようとしました。

sudo bash setup.sh config.txt

表示されたEULAのプロンプトにAGREEと入力します。

インストールが終わったので、次にstartsample.shを試しました。

sudo bash startsample.sh

 

順調にいくかと思ったのですが、ここでMediaPlayerに関する問題が発生してしまいました。

いくつかのアプローチを試しましたが、最終的には、Raspbian Stretch Liteのインストールでパッケージが見つからないことが原因であることがわかりました。

問題は判明したものの、修復することは難しく、もう一度最初からやり直すことにしました。Raspbian OSをSDカードに書き込み、同じ手順をやり直しました。

 

4. アプリが起動するまで

次の目的は、1回目で失敗してしまった startsample.sh の実行を成功させることです。

この時点では、リフレッシュトークンを取得しようとgetを試みるも、サーバレスポンスが401を返してきます。

request 情報に誤りがありそうだったので調べてみると、config.txtに情報が足りないことがわかりました。

config.txtを修正し、もう一度getをしてみると、リフレッシュトークンを取得し、Amazonに設定情報が反映されました。

これでRaspberry PIでAmazon Alexaを喋らせる準備が整いました!

 

5. Amazon AlexaをRaspberry PIの起動と同時に自動起動させる

喋らせることは成功しましたが、Amazon Alexaの起動を毎回手動(startsample.shをコマンドで実行する)で行うのは少々手間です。なので、Raspberry PIの電源ON時に、Amazon Alexaも同時に起動するようにしました。

まず、alexa.shという名称でスクリプトを作成しました。スクリプトは以下のようになっています。

#!bin/bash
LOG_FOLDER=”/home/pi/startsample”
ALEXA_FOLDER=”/home/pi”
_psName2Ids(){
    ps -aux |grep -i “$1” | awk ‘{print $2}’

psKill() {
    _psName2Ids $1 | xargs kill -9 > dev/null 2>&1;
}
findError() {
    cat ${LOG_FOLDER}/$(ls ${LOG_FOLDER} | tail -1) | grep “$1” | wc | awk ‘{print $1}’
}
# check for errors
error1=${findError “AbstractKeywordDetector”}
error2=${findError “RequiresShutdown”}
error3=${findError “Alexa is currently idle”}
processes=($(_psName2Ids “startsample.sh”))
if [ ${#processes[@]} -le 1 || [error1 -gt 10] || [error2 -gt 0] || [error3 -lt 2] ; then
    now=$(date -u +”%Y-%m-%fT%H:%M:%SZ”)
    sudo touch “$LOG_FOLDER/$now.log”
    cd “$ALEXA_FOLDER”
psKill “startsample.sh” screen -L “$LOG/FOLDER/$now.log” -dm sudo bash startsample.sh

fi;

次に、作成したスクリプトを実行可能ファイルにします。

sudo chmod +x /home/pi/alexa.sh

そして、Alexaのスタートアップサービス(alexa.serviceという名称のファイル)を作成しました。

sudo nano /lib/systemd/system/alexa.service

alexa.serviceの中身は以下のようになっています。

[Unit] Description=Amazon Alexa
After=network.target network-online.target

[Service] Type=idle
ExecStart=/home/pi/alexa.sh
WorkingDirectory=/home/pi/build/SampleApp/src
User=pi

[Install]
WantedBy=multi-user.target

次に、ファイルの権限を変更します。

sudo chmod 644 /lib/systemd/system/alexa.service

すると、daemonがリロードされ、サービスが使用可能となり、サービスがスタートします。

sudo systemctl daemon-reload
sudo systemctl enable alexa.service
sudo systemctl start alexa.service
sudo systemctl status alexa.service

 

6. 日本語に対応させる

Alexaアプリはデフォルトで英語になっているので、日本語に対応させたいところです。

難しいのかなと思いきや、とても簡単でした。画面にしたがって、まずCを押して、次に1、次に6とキーボードを押すだけで日本語化できました。

実際に動いているRaspberry PI Alexaはこんな感じです。とりあえず東京の天気を聞いてみました。

…デフォルトだと摂氏ではなく華氏で教えてくれるので、ちょっとわかりづらいですね…。

他にもなぞなぞを出してくれたりします。

 

7. 今後の計画

こうして、無事に第1目標のAmazon Alexaの起動までできました!

今後の目標としては、Raspberry PIから電子部品に信号を送ったり、Alexaのスキル開発を視野に入れていますが、それはまたメンバーで話し合っていきたいと思います。

 

ここまで読んでくださってありがとうございました!

 

By開発部

エンケラドス・テクノロジーズ開発部です。 開発に関する情報をお届けします。