Posted at

Raspberry Pi2 で Alexaに話してみる

More than 3 years have passed since last update.


はじめに

Amazon Echoが気になって、「Amazon Echo Alexa」とかで検索してると

たまたま、Raspberry Pi2でも作れるということで、せっかくなので、作ってみたいと思い、

マイクとスピーカーを買って作ってみました。

実は、これを書くまでに1度失敗してます。何が失敗だったのか分からないくらいいじりすぎたので、

もう一度、さらからやりなおすことに。

そこで、メモしたので、ログ残しします。


参考文献

参考にしたのは、ここここ


今回準備したもの


  • Raspberry Pi2(Model B)

  • TaoTronics Bluetooth 4.0 ポータブルスピーカー A2DP対応 (ブラック)TT-SK05

  • iBUFFALO マイクロフォン USB音源 ブラック BSHSM05BK

  • BUFFALO 11n対応 11g/b 無線LAN子機 親機-子機デュアルモード対応モデル WLI-UC-GNM2


Raspberry Pi2のイメージ


  • 2016-03-18-raspbian-jessie.zip


前提条件


  • Raspberry Pi2は起動する状態であること

  • 無線LANの設定が終わってること(通信できる状態であること、ここでは仮にIPアドレスを「192.168.0.10」とします)


ここから設定開始


SSHでログイン

次のコマンドを実行して、Raspberry Pi2にログインする。

ssh pi@<Raspberry Pi2のIPアドレス>


VNC Serverのインストール

次のコマンドを実行して、VNC Serverをインストールします。

sudo apt-get install tightvncserver


VNC Serverの設定

VNC Serverが自動起動してくるように設定します。

cd /home/pi/.config

mkdir autostart

cd autostart

vi tightvnc.desktop

でファイルを作成していきます。


[Desktop Entry]

Type=Application

Name=TightVNC

Exec=vncserver :1

StartupNotify=false


ここで、リブートします。

sudo reboot


Raspberry Pi2にVNCで接続

Finder→移動→サーバへ接続

を選択して、「vnc://192.168.0.10:5901」を入力し、「接続」ボタンをクリック


VLCのインストール

次のコマンドを実行して、VLCをインストールします。

sudo apt-get install vlc-nox vlc-data

sudo echo export LD_LIBRARY_PATH=/usr/lib/vlc > ~/.bashrc

sudo echo export VLC_PLUGIN_PATH=/usr/lib/vlc/plugins > ~/.bashrc


Node.jsインストール

次のコマンドを実行して、Node.jsをインストールします。

sudo apt-get update

sudo apt-get upgrade

curl -sL https://deb.nodesource.com/setup | sudo bash -

sudo apt-get install nodejs


Java8のインストール

※2016/06/06時点でのJavaです。

以下のURLからJava SE Development Kit 8u91をダウンロードする

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

次のコマンドを実行して、Java8をインストールします。

sudo tar zxvf jdk-8u77-linux-arm32-vfp-hflt.tar.gz -C /opt

sudo update-alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_77/bin/javac 1

sudo update-alternatives --install /usr/bin/java java /opt/jdk1.8.0_77/bin/java 1

sudo update-alternatives --config javac

sudo update-alternatives --config java


Mavenのインストール

※2016/06/06時点でのMavenです。

以下のURLからApache Maven 3.3.9をダウンロードする

https://maven.apache.org/download.cgi

次のコマンドを実行してMavenをインストールします。

sudo tar zxvf apache-maven-3.3.9-bin.tar.gz -C /opt

sudo echo export M2_HOME=/opt/apache-maven-3.3.9 > ~/.bashrc

sudo echo export PATH=$PATH:$M2_HOME/bin > ~/.bashrc


Alexa Voice Serviceの用意(その1 : Product登録とセキュリティプロファイルの作成)

ここはこのまま参考元のページの手順を実施すればOKです。

https://github.com/amzn/alexa-avs-raspberry-pi

このURLの「3 - Getting started with Alexa Voice Service」に書かれてる

以下の章を実行してください。

- Register for a free Amazon Developer Account

- Register your product and create a security profile.

注意点としては

- amazon.comにアカウントを作っておくこと

これくらいです。


Alexa Voice Serviceの用意(その2 : Raspberry Pi2 へのプログラム展開

以下のURLからAlexa Voice ServiceのサンプルアプリZIPをダウンロードします。

https://github.com/amzn/alexa-avs-raspberry-pi/archive/master.zip

ZIPを解凍し、/opt配下にコピーする

(以降、/opt/alexa-avs-raspberry-pi*フォルダを<< REFERENCE_IMPLEMENTATION >>とします)


OpenSSLのインストール

次のコマンドを実行して、OpenSSLをインストールします。

sudo apt-get install openssl


オレオレ証明書作成準備

次のコマンドを実行して、ファイルを開きます。

vi << REFERENCE_IMPLEMENTATION >>/samples/javaclient/ssl.cnf

で以下の内容のように修正してください。


commonName = $ENV::COMMON_NAME

countryName = JP

stateOrProvinceName = Osaka

localityName = OsakaCity

organizationName = raspi

organizationalUnitName = alexa


※「countryName」は「JP」にしてください。


オレオレ証明書の作成

次のコマンドを実行して、オレオレ証明書を作成します。



cd << REFERENCE_IMPLEMENTATION >>/samples/javaclient

chmod +x generate.sh

./generate.sh

実行してる時に、いくつか入力待ちになるので、以下を入力します。

「Product ID」には、「3.4」で入力した「Device Type ID」を入れる

「Serial Number」には、「123456」と固定で入れてください(もし入力を変えた場合は、ちゃんと覚えておいてください)

「Password for Keystores」には何も入れずにEnterキーを押してください(もし入力を変えた場合は、ちゃんと覚えておいてください)


config.jsの更新

<< REFERENCE_IMPLEMENTATION >>/samples/companionService/config.jsを開いて、以下を更新してください。


sslKey: '/opt/alexa-avs-raspberry-pi/samples/javaclient/certs/server/node.key',

sslCert: '/opt/alexa-avs-raspberry-pi/samples/javaclient/certs/server/node.crt',

sslCaCert: '/opt/alexa-avs-raspberry-pi/samples/javaclient/certs/ca/ca.crt',



config.jsonの更新

<< REFERENCE_IMPLEMENTATION >>/samples/javaclient/config.jsonを開いて、以下を更新してください。

{

"productId":"",
"dsn":"",
"provisioningMethod":"",
"companionApp":{
"localPort":8443,
"sslKeyStore":"<< REFERENCE_IMPLEMENTATION >>/samples/javaclient/certs/server/jetty.pkcs12",
"sslKeyStorePassphrase":"",
"lwaUrl":"https://api.amazon.com"
},
"companionService":{
"serviceUrl":"https://localhost:3000",
"sslClientKeyStore":"<< REFERENCE_IMPLEMENTATION >>/samples/javaclient/certs/client/client.pkcs12",
"sslClientKeyStorePassphrase":"",
"sslCaCert":"<< REFERENCE_IMPLEMENTATION >>/samples/javaclient/certs/ca/ca.crt"
}
}

※「sslKeyStorePassphrase」は「オレオレ証明書の作成」の「Password for Keystores」と同じ


依存関係のインストール

以下のコマンドを実行して、依存関係のインストールをします。

cd << REFERENCE_IMPLEMENTATION >>/samples/companionService

npm install


セキュリティファイルの有効

ここはこのまま参考元のページの手順を実施すればOKです。

https://github.com/amzn/alexa-avs-raspberry-pi

このURLの「6 - Enable Security Profile」に書かれてる


コンフィグファイルの更新

ここはこのまま参考元のページの手順を実施すればOKです。

https://github.com/amzn/alexa-avs-raspberry-pi

このURLの「7 - Updating the config files」に書かれてる


サーバの起動

Terminalを起動し、次のコマンドを実行し、サーバを起動します

cd << REFERENCE_IMPLEMENTATION >>/samples/companionService

npm start


クライアントの起動

Terminalを起動し、次のコマンドを実行し、クライアントを起動します。

cd <REFERENCE_IMPLEMENTATION>/samples/javaclient 

mvn validate
mvn install
mvn exec:exec


Amazon.comへのログインと承認

ここはこのまま参考元のページの手順を実施すればOKです。

https://github.com/amzn/alexa-avs-raspberry-pi

このURLの「10 - Obtain Authorization from Login with Amazon」に書かれてる


Alexaとお話し。

「Start Listening」ボタンを押して、話してみてください。

いいお友達になれると思います。

僕はいろいろ話してみました。が、ご理解いただけないこともしばしば。

発音が悪かったんですね。精進します。