20
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Raspberry Pi 3 Model BとReSpeaker 2-Mics Pi HATでGoogle Assistant SDKを活用する

Last updated at Posted at 2017-10-31

イントロダクション

2017年10月にGoogleから日本語に対応したスマートスピーカー「Google Home」「Google Home Mini」が発売され、2017年3月に雑誌「The MagPi」第57号の付録として配布されて大きな話題になったAIY Projects voice kitが単体で入手できるようになるなど、Google Assistantを利用できるハードウェアデバイスはどんどん増えつつあります。

ここでは、Raspberry PiとReSpeaker 2-Mics Pi HATを組み合わせてGoogle Assistant SDKを活用する方法を紹介します。ReSpeaker 2-Mics Pi HATはSeeed Studioが開発したRaspberry Pi用拡張ボードで、$9.90という低価格にも関わらず、2つのマイクと1つのスピーカー出力、1つのヘッドフォン出力、2つのGroveコネクタ、1つのボタン、3つのRGB LEDを搭載しています。ReSpeaker 2-Mics Pi HATにより、柔軟に拡張でき、かつコンパクトなスマートスピーカーを実現できます。

IMG_5036.JPG

準備

必要なもの

セットアップ

  1. 公式ウェブサイトよりRaspbianのイメージファイルをダウンロードする(例:RASPBIAN STRETCH WITH DESKTOP September 2017)
  2. Etcherをダウンロードして解凍する
  3. Etcherを起動して画面右上の歯車アイコンをクリックし「Auto-unmount on success」のチェックを外す etcher-settings.png
  4. 画面右上のBackをクリックして本の画面に戻り、ダウンロードしたイメージファイルとSDカードリーダーを指定してFlash!をクリックしてイメージを書き込む etcher-main.png
  5. 書き込みと検証が終わるまで10分間程度待つ
  6. ウェブブラウザでhttps://mascii.github.io/wpa-supplicant-conf-tool/にアクセスし、アクセスするWi−Fiアクセスポイントの情報を入力して追加ボタンを押し、wpa_supplicant.conf作成ssh.txt作成をクリックする
  7. ダウンロードされた2つのファイルを書き込みが終わったマイクロSDカードの最上位階層(/boot/)にコピーし、マウントを解除してマイクロSDカードを取り出す
  8. 取り出したマイクロSDカードをRaspberry Piボードに挿入してマイクロUSB端子に電源を接続し、起動する
  9. ターミナルでarp -an | grep b8:27:ebと入力してRaspberry Piが取得しているIPアドレスを見つける(例:192.168.1.123)2
  10. ターミナルでssh pi@192.168.1.123と入力し、ユーザーpiに対して初期設定されているパスワードraspberryを入力してログインする
  11. SSH is enabled and the default password for the 'pi' user has not been changed. This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.(SSHが有効で、'pi'ユーザーのデフォルトパスワードは変更されていません。これはセキュリティ上のリスクです。新しいパスワードを設定するには、'pi'ユーザーとしてログインし、'passwd'と入力してください。)という警告が表示されるので、警告に従ってpasswdコマンドを入力し、パスワードを初期値から別のものに変更する
  12. sudo apt-get updateに続けてsudo apt-get upgradeを実行して最新版へ更新する
  13. sudo raspi-configRaspberry Pi Software Configuration Toolを起動し、4 Localisation OptionsI2 Change TimezoneAsiaTokyoを選択し、exitキーを押してツールを終了する

ReSpeaker 2-Mics Pi HATのセットアップ

まず、ReSpeaker 2-Mics Pi HATに搭載されているコーデックチップ「WM8960」を使用できるようにするため、カーネルを再ビルドし、再起動します。

$ git clone https://github.com/respeaker/seeed-voicecard.git
$ cd seeed-voicecard
$ sudo ./install.sh 2mic
$ sudo reboot

再起動後にaplay -larecord -lで再生と録音、それぞれにseeed2micvoicecが追加されていることを確認します。

再生に対応したハードウェアデバイスのリストを出力する
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
  Subdevices: 8/8
  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
  Subdevice #7: subdevice #7
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
録音に対応したハードウェアデバイスのリストを出力する
$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: seeed2micvoicec [seeed-2mic-voicecard], device 0: bcm2835-i2s-wm8960-hifi wm8960-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0

確認できたら、seeed2micvoicecをデフォルトの入出力デバイスとして使用するよう、/home/pi/nano .asoundrcを実行し、以下の内容を入力します。

/home/pi/.asoundrc
pcm.!default {
  type asym
  capture.pcm "mic"
  playback.pcm "speaker"
}
pcm.mic {
  type plug
  slave {
    pcm "hw:1,0"
  }
}
pcm.speaker {
  type plug
  slave {
    pcm "hw:1,0"
  }
}

/home/pi/.asoundrcの設定を済ませたら、Google Assistant SDKサイトでの説明Configure and Test the Audioのステップ1で説明されているテストを順に実行します。

スピーカーから音声を再生できることを確認する
$ 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 128 to 131072
Period size range from 64 to 65536
Using max buffer size 131072
Periods = 4
was set period_size = 32768
was set buffer_size = 131072
 0 - Front Left
Time per period = 0.032640
マイクから音声を録音しスピーカーから再生できることを確認する
$ 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

これでReSpeaker 2-Mics Pi HATのサウンド入出力に関する一通りの動作確認ができましたので、alsamixerコマンドでAlsaMixerを起動し、F6キーを押してサウンドカードを選択し、ボリュームを適切に変更します。

alsamixer-select.png

alsamixer-playback.png

alsamixer-capture.png

以上でReSpeaker 2-Mics Pi HATのセットアップと動作確認は全て完了しましたので、Google Assistant Libraryのセットアップと動作確認へと進みます。

Google Assistant Libraryのセットアップと動作確認

  1. Configure a Developer Project and Account Settingsの説明に従ってプロジェクトを作成し、そのプロジェクトに対してGoogle Assistant APIを有効化し、OAuth Client IDを作成してダウンロードする
  2. 作成したclient_secret_<client-id>.jsonファイルをRaspberryPiの/home/pi/にアップロードする(例:~/Downloadsにダウンロードしたファイルを192.168.1.123のRaspberry Piにアップするのであればscp ~/Downloads/client_secret_<client-id>.json pi@192.168.1.123:/home/pi/
  3. Activity controlsページで自分のGoogleアカウントのアクティビティコントロールを確認し、Web & App Activity(ウェブとアプリのアクティビティ)Device Information(端末情報)Voice & Audio Activity(音声アクティビティ)の3つが有効(青色)になっていることを確認する
  4. Download the Library and Run the Sampleで説明されている手順に従ってPythonの仮想環境を準備し、Google Assistant Libraryをインストールする
  5. google-assistant-demoを実行して動作確認を行う

参照

  1. ReSpeaker 2-Mics Pi HATに搭載されているコーデックチップ「WM8960」がサポートするのが8Ω負荷の1Wであるため、これに合ったものを選択します。

  2. b8:27:ebはRaspberry Pi FoundationのベンダーIDなので、arp -anの出力からこのIDを含む行だけを抽出することで、同じネットワークに接続されている全ての機器の中からRaspberry PiボードのIPアドレスだけを抽出できる。もし、複数のボードを接続する場合には順に接続することで混乱を避けられる。

20
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?