ラズパイ の 簡易スマート・スピーカー Google AIY の 初期セットアップ

Google AIY Voice Kit を 組み立てた ので、さっそく OS の イメージを焼き、初期設定をしたいと思います.

なお 前半 の “OS イメージ の 用意” と “SSH の 有効化 と Wi-Fi の 接続設定”、”スピーカー と マイク の 確認” 以外は、Google AIY Voice Kit とは、直接の関係はありません. ラズパイの基本的な設定をまとめたものになります.

今回は ディスプレイ や キーボード、マウス などが無い環境なので、SSH で セットアップしていきます.
ドキュメントによると カッコいいデスクトップが立ち上がるようですが見れないです. 残念.

ディスプレイなしなので CUI モードにすれば ラズパイ Zero W で も いけるかと思って1台組んでみたのですが、箱の切り欠きと配置が合わないのでケーブル類をちゃんと選ばないと収まらないのと、SD カード は 箱を開けないと抜き差しできなそうで、結局断念してラズパイ3を持ってかれました…

作業環境

  • Raspberry Pi 3 Model B
  • Google AIY Voice Kit

主な作業内容

これまで書いてきた記事から必要なものを集めて設定します. 関連する記事は下記になります.

OS イメージ の 用意

Google AIY プロジェクト の Voice Kit の ウェブサイトGet the Voice Kit SD Image から OS イメージをダウンロードします. ダウンロードしたファイルは aiyprojects-2017-09-11.img.xz でした.
※ 同梱の説明書には Get the Voice Kit SD Image への 短縮 URL https://magpi.cc/2x7JQfS が 記載されてました

.xz 形式は Windows の 標準装備では解凍できませんが、こちら ラズパイ の OS イメージを焼くときは Etcher が 便利 & UI カッコいい で 書きました Etcher は 解凍する必要なく直接 SD カード へ 書き込んでくれます. 便利だ!

ということで、Etcher を 起動し、上記ファイルを指定して、Flash します.

SSH の 有効化 と Wi-Fi の 接続設定

SD カード を 取り出す前に、SSH と Wi-Fi の 設定をしておきます.

エクスプローラー で SD カード の ドライブを表示し ssh ファイルを作成します. 空のファイルで大丈夫です.

同じく SD カードのドライブに wpa_supplicant.conf ファイルを作成します.

wpa_supplicant.conf ファイルの内容は以下で、 ssid と psk に 接続する Wi-Fi の 設定を記述します.
ファイルの改行コードは Windows の CRLF ではなく LF のため、メモ帳ではなく改行コードが設定できるエディタを使います.

1
2
3
4
5
6
7
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="----Your-WiFi-SSID----"
psk="----PLAIN-PASSPHRASE----"
}

※ ここでは psk が 平文となっていますが、起動後に接続して wpa_passphrase [SSID] [PASSPHRASE] コマンドを実行した結果の暗号化された psk に 置き換えておくとよいです.
またラズパイを よくセットアップする場合は 暗号化された psk で 作ったファイルをコピーしておいて、OS イメージを作った際にコピーできるようにしておくと便利です.

起動!

Google AIY Voice Kit の Raspberry Pi 3 に SD カードを差し、電源を投入します.

SSH で 接続

上記の Wi-Fi 設定ができていたら Wi-Fi 経由で SSH が つながるはずです. つながらなかったら 有線 LAN を つなぐか、ディスプレイ&キーボード…

Windows 10 は mDNS が 入っていて ホスト名.local で 接続を受け付けることはできるが、接続にはいけないらしい. なんでやねん!ってところですが、仕方がないので iTunesBonjour Print Services を インストールするか、頑張って IP アドレスから探しましょう.

SSH クライアント は Microsoft さん が 開発している Win32-OpenSSH を 使いました.

接続すると、ホスト鍵の確認があるので yes を 入力します.
続いてパスワードを聞かれるので、初期パスワード の raspberry を 入力します.

1
2
3
4
5
6
c:\> ssh pi@raspberrypi.local
The authenticity of host 'raspberrypi.local (fd91::3f13:2b1:fa24:XXXX)' can't be established.
ECDSA key fingerprint is SHA256:HDYEUoWS6x4RsD63mQgqbEdFsvnKyPBhT4forJCXXXX.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'raspberrypi.local,fd91::3f13:2b1:fa24:XXXX' (ECDSA) to the list of known hosts.
pi@raspberrypi.local's password: [raspberry]

ログインできるとデフォルト・パスワードを変更するように警告が表示されます.
こちらは後に 公開鍵認証に変えておく と よいでしょう.

1
2
3
4
5
6
7
8
9
10
11
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Build info: Tue Sep 12 00:36:20 UTC 2017 @ 3955cac
Last login: Mon Mar 19 14:40:39 2018 from 10.1.0.105

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.

OS の バージョンなどを確認すると、Raspbian 8、Debian Jessie ベース であることが分かります.

1
2
3
4
5
pi@raspberrypi:~ $ cat /etc/issue
Raspbian GNU/Linux 8 \n \l

pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.9.35-v7+ #1014 SMP Fri Jun 30 14:47:43 BST 2017 armv7l GNU/Linux

スピーカー と マイク の 確認

説明書 P.38, 39 の STEP 09 Check speaker と STEP 10 check microphone では、デスクトップに配置されたアプリケーションを使って確認をしています.
※ オンライン・ドキュメントでは Verify it works

今回は SSH で 接続しているのでダブルクリックで実行できませんが、ホームディレクトリ の Desktop ディレクトリにあるアプリのファイルを確認すると Python スクリプトを実行していることがわかります. SSH から Python スクリプトを実行することで、同じことが確認できます.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
pi@raspberrypi:~ $ ls -l /home/pi/Desktop/
合計 16
-rw-r--r-- 1 pi pi 214 9月 12 09:36 check_audio.desktop
-rw-r--r-- 1 pi pi 194 9月 12 09:36 check_cloud.desktop
-rw-r--r-- 1 pi pi 179 9月 12 09:36 check_wifi.desktop
-rw-r--r-- 1 pi pi 217 9月 12 05:50 dev_terminal.desktop

pi@raspberrypi:~ $ cat /home/pi/Desktop/check_audio.desktop
[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=Check audio
Comment=Check that the voiceHAT audio input and output are both working.
Exec=/home/pi/AIY-voice-kit-python/checkpoints/check_audio.py
Terminal=true

check_audio.py スクリプトを実行します.
実行パーミッションも立っていますし、スクリプト・ファイルの先頭行に #!/usr/bin/env python3 とあり Python で 実行できるようになっています. (そういえば この先頭行、 シバン って いうんですね)

1
pi@raspberrypi:~ $ /home/pi/AIY-voice-kit-python/checkpoints/check_audio.py

実行すると、正しくスピーカー が 接続できていると スピーカー から “Front, Center” と 音声が流れます.
正しく聞こえたら、 y を 入力して次へ進めます.

1
2
Playing a test sound...
Did you hear the test sound? (y/n) y

続いて、 When you're ready, press enter and say 'Testing, 1 2 3'... と 表示されるので、Enter キーを押してから “てすてぃんぐ わん、つー、すりー” って 話しかけます. いや、なんでも大丈夫ですが…
マイクを正しく接続できていれば、話しかけ時間3秒ぐらいで、すぐにスピーカーから話した内容が再生されます.
正しく聞こえたら、 y を 入力して次へ進めます.

1
2
3
4
When you're ready, press enter and say 'Testing, 1 2 3'...
Recording...
Playing back recorded audio...
Did you hear your own voice? (y/n) y

2回とも y でしたら、たぶん正しく動いているでしょうってことで、 Enter キー を 押下して終了します.

1
2
The audio seems to be working.
Press Enter to close...

ということで、初期セットアップ 完了です!


以下、Google AIY Voice Kit に直接は関係ないのですが、設定のまとめとして載せておきます. (主に自分用)

ホスト名 と ロケール&タイムゾーン を 設定

デフォルトのホスト名 raspberrypi は 他のラズパイを起動した際に被ると困るので必要に応じて変更しておきます. またロケールとタイムゾーンも併せておきます.
設定は sudo raspi-config コマンドを実行します.

ホスト名

  • 2 Hostname を 選択
  • 設定したいホスト名を入力し、 <Ok> を 選択

ロケール

  • 4 Localisation Options を 選択
  • I1 Change Locale を 選択
  • [*] en_GB.UTF-8 UTF-8 で スペースを押して * を 外す
  • [ ] ja_JP.UTF-8 UTF-8 で スペースを押して * を 付ける
  • <Ok> を 選択
  • Default locale for the system environment: と 聞かれるので、ja_JP.UTF-8 を 選択し <Ok>

タイムゾーン

  • 4 Localisation Options を 選択
  • I2 Change Timezone を 選択
  • AsiaTokyo と 選択

Wi-Fi の 国コード

  • 4 Localisation Options を 選択
  • I4 Change Wi-Fi Country を 選択
  • <Select> を 選択
  • JP Japan を 選択
  • <Ok> を 選択

最後に Finish を 選択し、再起動します.

パッケージ の アップデート

1
2
pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ $ sudo apt-get dist-upgrade -y

※ あまりに遅かったり、接続が悪いようでしたらミラー・サイトを設定します.
ミラー・サイトは こちら RaspbianMirrors - Raspbian から確認できます. JAIST を 例に以下のように設定します.

1
2
3
pi@raspberrypi:~ $ sudo nano /etc/apt/sources.list
# deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi
deb http://ftp.jaist.ac.jp/raspbian/ jessie main contrib non-free rpi

SSH と 公開鍵認証 の 設定

ざっと抜粋になります. 詳しくは Raspbian Jessie Lite の SSH/公開鍵認証 設定 を ご参照ください.

まずは Windows 側でキー・ペアを生成します.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
c:\> ssh-keygen -t ed25519 -C ""
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\[username]/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\[username]/.ssh/id_ed25519.
Your public key has been saved in C:\Users\[username]/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:T69X1O58qiKv7Sp/aPJTI+PpzUdOZDO+EcD5ldc8ON8
The key's randomart image is:
+--[ED25519 256]--+
| . . .o.|
| + oo.+|
| o .ooo|
| B ..E|
| S .+ = . |
| ooo.= . .|
| . *.=.+ o |
| o B+o.= +|
| B*OB+...XX|
+----[SHA256]-----+

続いて公開鍵を Raspberry Pi へ 送ります.

1
2
3
c:\> scp %USERPROFILE%\.ssh\id_ed25519.pub pi@raspberrypi.local:~
pi@raspberrypi.local's password: [PASSWORD]
id_ed25519.pub 100% 83 0.1KB/s 00:00

Raspberry Pi 側で、ホーム・ディレクトリに所定のディレクトリとファイル配置をします.

1
2
3
4
5
pi@raspberrypi:~ $ mkdir ~/.ssh
pi@raspberrypi:~ $ chmod 700 ~/.ssh
pi@raspberrypi:~ $ cat ~/id_ed25519.pub >> ~/.ssh/authorized_keys
pi@raspberrypi:~ $ chmod 600 ~/.ssh/authorized_keys
pi@raspberrypi:~ $ rm -f ~/id_ed25519.pub

SSH サーバ で 公開鍵認証だけの設定にし、パスワード認証を禁止します.
sudo systemctl reload ssh した時の SSH 接続は残しておき、新しい SSH 接続で公開鍵認証が通ることを確認しておきます. 失敗すると作り直し or ディスプレイ/キーボードが必要 になるため注意が必要です.

1
2
3
4
5
6
7
8
9
pi@raspberrypi:~ $ sudo nano /etc/ssh/sshd_config
# Authentication:
PermitRootLogin no
RSAAuthentication no

# Change to no to disable tunnelled clear text passwords
PasswordAuthentication no

pi@raspberrypi:~ $ sudo systemctl reload ssh

最後に pi ユーザ の パスワードを削除します.

1
pi@raspberrypi:~ $ sudo passwd -d pi

Wi-Fi パワーマネジメント の 設定

Wi-Fi の パワーマネージメントによってネットワークアクセスが不安定になったり、遅延が生じるケースがあります. その場合は /etc/network/interfacesiface wlan0wireless-power off を 追加しておきます.

1
2
3
4
5
pi@raspberrypi:~ $ sudo nano /etc/network/interfaces
allow-hotplug wlan0
iface wlan0 inet manual
wireless-power off
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

※ IP アドレスの固定化については、こちら 固定 IP アドレス を 設定する を ご参照ください.

SDカード の 延命化

あまり気にすることないとの情報もありますが、手間がかけられるようでしたらやっておいてもいいかもしれません.
やることがいろいろあるので、ここでは まとめた手順で記載します. 詳細は こちら Raspbian Jessie Lite の SDカード 延命化 を ご参照いただければ幸いです.

Swap 領域を削除し、テンポラリ領域 を RAM へ 配置します.

1
2
3
4
5
6
pi@raspberrypi:~ $ sudo apt-get purge -y --auto-remove dphys-swapfile

pi@raspberrypi:~ $ sudo nano /etc/fstab
tmpfs /tmp tmpfs defaults,size=32m,noatime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,size=16m,noatime,mode=1777 0 0
tmpfs /var/log tmpfs defaults,size=32m,noatime,mode=0755 0 0

起動時に /var/log の ディレクトリ構成を復元するようにスクリプトを配置します.
/etc/rc.localexit 0 の 前に 下記を追記します.

1
2
3
4
5
6
7
8
pi@raspberrypi:~ $ sudo nano /etc/rc.local
mkdir -p /var/log/apt
mkdir -p /var/log/fsck
mkdir -p /var/log/ntpstats
mkdir -p /var/log/samba
chmod 750 /var/log/samba
chown ntp:ntp /var/log/ntpstats
chown root:adm /var/log/samba

rsyslog の ログ出力を抑制します. 以下の部分をコメントアウトします.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
pi@raspberrypi:~ $ sudo nano /etc/rsyslog.conf
#daemon.* -/var/log/daemon.log
#kern.* -/var/log/kern.log
#lpr.* -/var/log/lpr.log
#mail.* -/var/log/mail.log
#user.* -/var/log/user.log
#mail.info -/var/log/mail.info
#mail.warn -/var/log/mail.warn
#mail.err /var/log/mail.err
#news.crit /var/log/news/news.crit
#news.err /var/log/news/news.err
#news.notice -/var/log/news/news.notice
#*.=debug;\
# auth,authpriv.none;\
# news.none;mail.none -/var/log/debug

RAM へ 配置したディレクトリを削除し、再起動します.

1
2
3
4
pi@raspberrypi:~ $ sudo rm -fr /tmp
pi@raspberrypi:~ $ sudo rm -fr /var/tmp
pi@raspberrypi:~ $ sudo rm -fr /var/swap
pi@raspberrypi:~ $ sudo reboot

ext4 ファイルシステム の ジャーナル を 無効化します.

1
2
3
4
5
6
7
pi@raspberrypi:~ $ sudo umount /dev/mmcblk0p2
pi@raspberrypi:~ $ sudo tune2fs -O ^has_journal /dev/mmcblk0p2
tune2fs 1.43.3 (04-Sep-2016)
The has_journal feature may only be cleared when the filesystem is
unmounted or mounted read-only.

pi@raspberrypi:~ $ sudo reboot

NTP に 日本のサーバを設定

1
2
3
4
5
6
7
8
9
10
11
pi@raspberrypi:~ $ sudo nano /etc/ntp.conf
#server 0.debian.pool.ntp.org iburst
#server 1.debian.pool.ntp.org iburst
#server 2.debian.pool.ntp.org iburst
#server 3.debian.pool.ntp.org iburst
server 0.jp.pool.ntp.org iburst
server 1.jp.pool.ntp.org iburst
server 2.jp.pool.ntp.org iburst
server 3.jp.pool.ntp.org iburst

pi@raspberrypi:~ $ sudo systemctl restart ntp

CPU の 動作クロック設定

通常は問題ないですが、常にハイ・パフォーマンスで動作させたり、省エネで動かす場合に設定します.
下記は常にハイ・パフォーマンスの例です. 詳しくは こちら CPU の 動作クロック設定 を ご参照ください.

1
2
3
4
5
6
7
8
9
pi@raspberrypi:~ $ sudo apt-get install cpufrequtils -y --no-install-recommends
pi@raspberrypi ~ $ sudo cpufreq-set -g performance

pi@raspberrypi:~ $ sudo cp /usr/share/doc/cpufrequtils/examples/cpufrequtils.sample /etc/default/cpufrequtils
pi@raspberrypi:~ $ sudo nano /etc/default/cpufrequtils
ENABLE="true"
GOVERNOR="performance"
MAX_SPEED=1200000
MIN_SPEED=600000

MAX_SPEEDMIN_SPEEDcat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies から出てきた数字を設定します. 上記は Raspberry Pi 3 の ものになります.

.bashrc の 設定

ここは完全にお好みなので、ご参考までに. (最小限の設定ですが)

1
2
3
4
5
6
7
8
9
10
11
pi@raspberrypi:~ $ nano ~/.bashrc
alias ls='ls --color=auto'
alias ll='ls --color=auto --format=verbose'
alias la='ls --color=auto --format=verbose --all'
alias cp='cp --interactive'
alias mv='mv --interactive'
alias rm='rm --interactive'
alias free='free -h'
alias grep='grep --color=auto'

pi@raspberrypi:~ $ source ~/.bashrc

基盤 の LED を 消灯する

基板上の ACT 緑 と PWR 赤 の LED が 気になる場合は消すことができます. 消してしまうと通電しているのかわからないという欠点もありますが、夜に赤く光らないので目に優しいかもしれません. led0 PWR で、led1 が ACT です.

1
2
3
4
5
pi@raspberrypi:~ $ echo 0 | sudo tee /sys/class/leds/led0/brightness
pi@raspberrypi:~ $ echo 0 | sudo tee /sys/class/leds/led1/brightness

pi@raspberrypi:~ $ echo "dtparam=act_led_trigger=none,act_led_activelow=on" | sudo tee -a /boot/config.txt
pi@raspberrypi:~ $ echo "dtparam=pwr_led_trigger=none,pwr_led_activelow=on" | sudo tee -a /boot/config.txt

最後にリブートしておく

必要はないと思いますが、いろいろ設定したのでリブートしておきます.

1
pi@raspberrypi:~ $ sudo reboot

Google AIY Voice Kit に 必要なもの

Raspberry Pi 3

ラズパイがないと始められないので必要になります. 箱の中に入れてしまうので、ほぼ占有されます.

Raspberry Pi 3 の 電源

Raspberry Pi 3 は 5V/3A の 電源が必要になります. スマホの充電アダプタでは出力が足りない場合もあるので確認が必要です.

マイクロ SD カード

ラズパイ の OS や ストレージに必要です. 16GB あれば十分だと思いますが、用途次第なので お好みのサイズで用意します.

ドライバーセット

スピーカー配線のコネクタをしめるのに使います. 細いドライバーであればなんでも大丈夫です.

両面テープ

マイクを箱の天板に貼り付けるのに使います. 持っていそうで意外となかったりも. (今回は無かった…)

Google AIY

Google AIY Voice Kit そのもの. 一応載せておきますが 出始めなので Amazon.co.jp さん だと、高いですね. KSY さん 待ちでしょうか. Pimoroni さん は 2017年11月現在 入荷待ちで £20.83 + 送料 £5.50 = 約4,000円です.
Pimoroni さん での お買い物方法は、こちら「Raspberry Pi Zero の 購入」も ご参照いただければ幸いです.


セットアップ系はコツコツ積み重ねてきたので記事が分散してしまったので、どこかで整理したいなぁ.