Raspberry Pi zero wh のセットアップ
SD カードのフォーマット
- 新しい SD カードを用意する
- ここ から SD カードメモリフォーマッターをダウンロードする
- SD カードをフォーマットする
OS のセットアップ
- Download NOOBS for Raspberry Pi から NOOBS Lite をダウンロードする
- zip ファイルを展開して SD カードにコピーする
- Raspberry Pi zero wh に SD カードを挿入して電源オン
- 画面の指示に従い Raspbian Lite をインストールする
apt-get の実行
$ sudo apt-get update $ sudo apt-get upgrade
キーボードレイアウト変更
sudo vi /etc/default/keyboard XKBMODEL="jp106" XKBLAYOUT="jp" XKBVARIANT="OADG109A" XKBOPTIONS="" BACKSPACE="guess"
time zone の変更
- sudo raspi-config を実行
- 4 Localisation Options を選択
- I2 Change Timezone を選択
- Asia を選択
- Tokyo を選択
- Finish を選択
git のインストール
$ sudo apt-get install git
ReSpeaker 2-Mics HAT のセットアップ
- Raspberry Pi zero wh の電源オフ
- ReSpeaker 2-Mics HAT を装着する
- Raspberry Pi zero wh を電源オン
ドライバのセットアップ
$ pwd /home/pi $ sudo git clone https://github.com/respeaker/seeed-voicecard $ cd seeed-voicecard $ sudo ./install.sh $ reboot
デバイスを確認
$ aplay -l **** List of PLAYBACK Hardware Devices **** card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA] Subdevices: 7/7 Subdevice #0: subdevice #0 Subdevice #1: subdevice #1 Subdevice #2: subdevice #2 Subdevice #3: subdevice #3 Subdevice #4: subdevice #4 Subdevice #5: subdevice #5 Subdevice #6: subdevice #6 card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: seeed2micvoicec [seeed-2mic-voicecard], device 0: bcm2835-i2s-wm8960-hifi wm8960-hifi-0 [] Subdevices: 1/1 Subdevice #0: subdevice #0
ALSA コントロール設定
$ sudo alsactl --file=asound.state restore alsactl: load_state:1683: Cannot open asound.state for reading: No such file or directory Found hardware: "bcm2835_alsa" "Broadcom Mixer" "" "" "" Hardware is initialized using a generic method Found haedware: "seeed-2mic-voic" "" "" "" "" Hardware is initialized using a generic method
$ sudo alsactl --file=asound.state store $ pwd /home/pi $ ls asound.state seeed-voicecard
入出力テスト
- スピーカーテスト テスト音声が再生される。
$ speaker-test -t wav speaker-test 1.1.3 Playback device is default Stream parameters are 48000Hz, S16_LE, 1 channels WAV file(s) Rate set to 48000Hz (requested 48000Hz) Buffer size range from 12000 to 18000 Period size range from 6000 to 6000 Using max buffer size 18000 Periods = 4 was set period_size = 6000 was set buffer_size = 18000 0 - Front Left Time per period = 1.234349
- マイク録音テスト areord で out.raw に録音データを保存し aplay で再生する。
$ arecord --format=S16_LE --duration=5 --rate=16000 --file-type=raw out.raw Recording raw data 'out.raw' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono $ aplay --format=S16_LE --rate=16000 out.raw Playing raw data 'out.raw' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono
- マイク入力テスト マイクから拾った音声がただちにスピーカーから聞こえる。
arecord -f cd -Dhw:1 | aplay -Dhw:1
Amazon alexa のセットアップ
Amazon Developer アカウント
- ここ を参考に Amazon Developer アカウントを登録する
製品登録
- Amazon 開発者コンソールへアクセスし ALEXA VOICE SERVICE のタブをクリックする
- ここ を参考にセキュリティプロファイルを作成する
- 登録例
- 製品名:hogefuga
- 製品ID:hogefuga
- 製品タイプ:Alexa内蔵の端末
- コンパニオンアプリの使用:はい
- 商品カテゴリ:その他(スマートスピーカー)
- 製品概要:alexa voice service on raspberry pi zero
- エンドユーザーは、商品とどうやり取りするか?:「タッチで開始される」「ハンズフリー」にチェックを入れる
- この製品を商品として配信する予定ですか?:いいえ
- これは子供向け商品、それ以外は13歳以下の子供向けですか?:いいえ
- LWA セキュリティプロファイル
- セキュリティプロファイル(プロフィールを新規作成する)
- セキュリティプロファイル名:Alexa Voice Service on Raspberry Pi Zero W
- セキュリティプロファイル記述:Alexa Voice Service on Raspberry Pi Zero W
- 各種IDの作成
- セキュリティプロファイルID:amzn1.application.xxxxx...
- クライアントID:amzn1.application-oa2-client.xxxxx...
- クライアントのシークレット:xxxxx...
- これらの書面に合意しますにチェックを入れ、[完了する] をクリック
- 商品が作成されました。[OK]をクリックする
- ALEXA VOICE SERVICE タブをクリックし、製品一覧を表示する
- 登録した製品名をクリックする
- 商品の詳細 → セキュリティプロファイル へ移動
- 許可された出荷地:
- http://localhost:3000 [追加]ボタンを押す
- https://localhost:3000 [追加]ボタンを押す
- 許可された返品 URL:
- http://localhost:3000/authresponse [追加]ボタンを押す
- https://localhost:3000/authresponse [追加]ボタンを押す
- [更新] ボタンを押す
クイックセットアップ
参考サイト を元に作業を進める。 - フォルダ作成
$ cd /home/pi/ $ mkdir sdk-folder $ cd sdk-folder $ mkdir sdk-build sdk-source third-party application-necessities $ cd application-necessities $ mkdir sound-files
$ sudo apt-get update $ sudo apt-get -y install git gcc cmake build-essential libsqlite3-dev libcurl4-openssl-dev libfaad-dev libsoup2.4-dev libgcrypt20-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-good libasound2-dev doxygen
- PortAudio 設定
$ cd /home/pi/sdk-folder/third-party && wget -c http://www.portaudio.com/archives/pa_stable_v190600_20161030.tgz && tar zxf pa_stable_v190600_20161030.tgz && cd portaudio && ./configure --without-jack && make
- commentjson のインストール
$ sudo apt-get install python-pip $ pip install commentjson Collecting commentjson Installing collected packages: commentjson Successfully installed commentjson-0.7.1
サウンドファイルのダウンロード
- (タイマーとアラーム音をアマゾンのサイトからダウンロード)
$ cd /home/pi/sdk-folder/application-necessities/sound-files/ $ wget -c https://images-na.ssl-images-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-voice-service/docs/audio/states/med_system_alerts_melodic_02._TTH_.mp3 $ wget -c https://images-na.ssl-images-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-voice-service/docs/audio/states/med_system_alerts_melodic_02_short._TTH_.wav $ wget -c https://images-na.ssl-images-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-voice-service/docs/audio/states/med_system_alerts_melodic_01._TTH_.mp3 $ wget -c https://images-na.ssl-images-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-voice-service/docs/audio/states/med_system_alerts_melodic_01_short._TTH_.wav
AVS デバイス SDK とウェイクワードエンジンのクローン
$ cd /home/pi/sdk-folder/sdk-source $ git clone git://github.com/alexa/avs-device-sdk.git
- 次に third-party ディレクトリにウェイクワードエンジンをクローンする
$ cd /home/pi/sdk-folder/third-party $ git clone git://github.com/Sensory/alexa-rpi.git (ライセンス認証) $ cd ./alexa-rpi/bin/ && ./license.sh
- SDK のビルド
$ cd /home/pi/sdk-folder/sdk-build && cmake /home/pi/sdk-folder/sdk-source/avs-device-sdk -DSENSORY_KEY_WORD_DETECTOR=ON -DSENSORY_KEY_WORD_DETECTOR_LIB_PATH=/home/pi/sdk-folder/third-party/alexa-rpi/lib/libsnsr.a -DSENSORY_KEY_WORD_DETECTOR_INCLUDE_DIR=/home/pi/sdk-folder/third-party/alexa-rpi/include -DGSTREAMER_MEDIA_PLAYER=ON -DPORTAUDIO=ON -DPORTAUDIO_LIB_PATH=/home/pi/sdk-folder/third-party/portaudio/lib/.libs/libportaudio.a -DPORTAUDIO_INCLUDE_DIR=/home/pi/sdk-folder/third-party/portaudio/include $ pwd /home/pi/sdk-folder/sdk-build $ sudo make SampleApp -j2
- 設定ファイルの編集
$ vi ~/sdk-folder/sdk-build/Integration/AlexaClientSDKConfig.json "deviceInfo":{ // Unique device serial number. e.g. 123456 "deviceSerialNumber":"123456", // The Client ID of the Product from developer.amazon.com "clientId":"amzn1.application-oa2-client.xxxxx...", // Product ID from developer.amazon.com "productId":"(製品ID)" },
- ファイルパスを以下のとおり指定する
(ロケールも ja-JP にする)
$ vi ~/sdk-folder/sdk-build/Integration/AlexaClientSDKConfig.json "cblAuthDelegate":{ "databaseFilePath":"/home/pi/sdk-folder/application-necessities/cblAuthDelegate.db" }, "miscDatabase":{ "databaseFilePath":"/home/pi/sdk-folder/application-necessities/miscDatabase.db" }, "alertsCapabilityAgent":{ "databaseFilePath":"/home/pi/sdk-folder/application-necessities/alerts.db", "alarmSoundFilePath":"/home/pi/sdk-folder/application-necessities/sound-files/med_system_alerts_melodic_01._TTH_.mp3", "alarmShortSoundFilePath":"/home/pi/sdk-folder/application-necessities/sound-files/med_system_alerts_melodic_01_short._TTH_.wav", "timerSoundFilePath":"/home/pi/sdk-folder/application-necessities/sound-files/med_system_alerts_melodic_02._TTH_.mp3", "timerShortSoundFilePath":"/home/pi/sdk-folder/application-necessities/sound-files/med_system_alerts_melodic_02_short._TTH_.wav" }, "settings":{ "databaseFilePath":"/home/pi/sdk-folder/application-necessities/settings.db", "defaultAVSClientSettings":{ "locale":"ja-JP" } }, "bluetooth" : { "databaseFilePath":"/home/pi/sdk-folder/application-necessities/bluetooth.db" }, "certifiedSender":{ "databaseFilePath":"/home/pi/sdk-folder/application-necessities/certifiedsender.db" }, "notifications":{ "databaseFilePath":"/home/pi/sdk-folder/application-necessities/notifications.db" },
マイクテスト
- 次のドットファイルを記述
$ vi ~/.asoundrc pcm.!default { type asym playback.pcm { type plug slave.pcm "hw:1,0" } capture.pcm { type plug slave.pcm "hw:1,0" } }
- SoX のインストール
$ sudo apt-get install sox -y
- マイク録音テスト
(Ctrl + Cで中止)
$ rec test.wav $ play test.wav
サウンドデバイスの無効化
$ cd /etc/modprobe.d/ $ sudo vi alsa-blacklist.conf blacklist snd_bcm2835 $ sudo amixer cset numid=3 1 numid=3,iface=MIXER,name='PCM Playback Route' ; type=INTEGER,access=rw------,values=1,min=0,max=2,step=0 ; values=1
- dirmngr の導入
$ sudo apt-get install dirmngr
認証
- SampleApp スクリプトで認証させる
$ cd ~/sdk-folder/sdk-build/ $ pwd /home/pi/sdk-folder/sdk-build $ ./SampleApp/src/SampleApp ./Integration/AlexaClientSDKConfig.json /home/pi/sdk-folder/third-party/alexa-rpi/models
参考サイト
- Build Your Own Amazon Echo Using a RPI and ReSpeaker HAT - Hackster.io
Raspberry Pi Quick Start Guide · alexa/avs-device-sdk Wiki · GitHub
- Raspberry PiでAlexaを動かそう! - slideship.com
- ラズパイでスマートスピーカーを自作(stretch)
- Raspberry Pi 3 Model BとReSpeaker 2-Mics Pi HATでGoogle Assistant SDKを活用する
- Dependencies · alexa/avs-device-sdk Wiki · GitHub
- ラズパイで自作Amazon Echo | yagitsawa's Tech Blog
- 上野家のホームページ - PC/RaspberryPi/スマートスピーカー/alexaAVS Device SDKを動かしてみる - 資料室
- audio output on Pi Zero W with seeedcard mic2 · Issue #1057 · alexa/alexa-avs-sample-app · GitHub