作業日記@HatenaBlog

各種の作業メモ

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 のセットアップ

ドライバのセットアップ

$ 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 タブをクリックし、製品一覧を表示する

クイックセットアップ

参考サイト を元に作業を進める。 - フォルダ作成

$ 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 とウェイクワードエンジンのクローン

  • sdk-source フォルダに 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

認証

$ 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

参考サイト

購入先

ReSpeaker 2-Mics HAT for Raspberry Pi