ラズパイ関連本の比較(2018/09)
Raspberry Pi(以下、ラズパイ)の関連書籍の紹介です。 数が多いので2017年以降のものを中心にレビューします。
おすすめは『みんなのRaspberry Pi入門 第4版』。電子工作をがっつりやりたいならブルーバックスの本。
前置き
ラズパイ関連書において重要なのは、Raspberry Pi固有のノウハウ、Linuxの基本操作、電子工作、プログラミング(ほぼPython)の3つのどれに重点をおくか、その配分。またはラズパイを何に使うか(用途)。
ページ数という制約があるのでどこかでトレードオフが発生します。そのため想定読者からマッチしているかが本を選ぶ上での最重要ポイント。
本を書いている人の経歴によって得意分野が違うので本によっては説明に問題があるケースがあります。
ハードよりの人はどうもLinuxのお作法*1やセオリーを知らずに書いているケースがあります。非常に残念です*2。
ブルーバックス
内容はいいが新書サイズなので開いたまま固定しにくいのが難点。新書サイズでブックスタンドに固定しにくいのでKindle版か洗濯ばさみで固定するとか。
『カラー図解 最新 Raspberry Piで学ぶ電子工作 作って動かしてしくみがわかる 』
カラー図解 最新 Raspberry Piで学ぶ電子工作 作って動かしてしくみがわかる (ブルーバックス)
- 作者: 金丸隆志
- 出版社/メーカー: 講談社
- 発売日: 2016/07/20
- メディア: 新書
- この商品を含むブログ (1件) を見る
- 出版社による補足情報:カラー図解 最新 Raspberry Piで学ぶ電子工作 作って動かしてしくみがわかる - ブルーバックスシリーズの特設ページ
- 著者によるサポート情報:「カラー図解 最新 Raspberry Piで学ぶ電子工作」補足情報
評判の良かったRaspberry Piで学ぶ電子工作 超小型コンピュータで電子回路を制御する (ブルーバックス)(モノクロ版)の改訂版+カラー化したもの。
面白いのはタミヤの工作キット+WebIOPiを使ったキャタピラ式のラジコン製作記事など。
回路図、配線図がしっかりしていて丁寧。
あえてモノクロの方を買う必要はまったくないです(内容が古いので)。
かなり丁寧で初心者向け。発売時期の関係で新しいモデルについて記載がありません。
『実例で学ぶRaspberry Pi電子工作 作りながら応用力を身につける』
実例で学ぶRaspberry Pi電子工作 作りながら応用力を身につける (ブルーバックス)
- 作者: 金丸隆志
- 出版社/メーカー: 講談社
- 発売日: 2015/12/18
- メディア: 新書
- この商品を含むブログを見る
- 出版社による補足情報:実例で学ぶRaspberry Pi電子工作 作りながら応用力を身につける - ブルーバックスシリーズの特設ページ
- 著者によるサポート情報:「実例で学ぶRaspberry Pi電子工作」補足情報
上記の応用編的な位置づけ。他のシリーズ本と違ってカラーではない点に注意。
『カラー図解 Raspberry Piではじめる機械学習』
カラー図解 Raspberry Piではじめる機械学習 基礎からディープラーニングまで (ブルーバックス)
- 作者: 金丸隆志
- 出版社/メーカー: 講談社
- 発売日: 2018/03/15
- メディア: 新書
- この商品を含むブログ (1件) を見る
Tensorflowについては記載されてない(Kerasは紹介している)。 前半はちょっと退屈かも。
『みんなのRaspberry Pi入門』
- 作者: 石井モルナ,江崎徳秀
- 出版社/メーカー: リックテレコム
- 発売日: 2017/11/11
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
出版社サイト:リックテレコム、「みんなのRaspberry Pi入門 第4版」発刊——Python 3に対応 | fabcross
書店の店頭に古い版が置いてあることがあるので購入時は注意。
Pythonの解説とRaspbianのセットアップに重点を置いている。 LED、モーター、カメラモジュール、センサなど基本は押さえている。
良書。一番バランスがいい本。
『Raspberry Piで遊ぼう! 改訂第2版 』
- 作者: 林和孝
- 出版社/メーカー: ラトルズ
- 発売日: 2014/01/25
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
2017年発行の版が最新です。改訂第4版というのが存在しますが、内容が古いです。購入時は発行年を確認して下さい。
どういう経緯なのかさっぱりですが、改定第2版をリニューアルして2017年に発行しており、こちらが最新です*3。
他とはちょっとタイプが違う本。ラズパイをデスクトップPCのように使ったり小型サーバーとして使うノウハウなど何でもあり。
装丁が非常にいい。
- 実用性はともかく、帯の折返しにgpioのピン配置図がある(表紙側と裏表紙側)。
- 章ごとに見出しの色とサンプルコードの背景色が違うようになっている
- Raspberry Pi 3 model B+についての補足のチラシがはさまっている
- PythonだけでなくJavascriptを使用したサンプルあり(逆に言うとPythonの解説はほとんど無い)
- WebIOPi *4
- radikoや動画再生、Webカメラなど
- ラジコン戦車
サポートページのURLが不明です。
『これ1冊でできる! ラズベリー・パイ 超入門 改訂第4版』
これ1冊でできる! ラズベリー・パイ 超入門 改訂第4版 Raspberry Pi 1+/2/3/Zero/Zero W対応
- 作者: 福田和宏
- 出版社/メーカー: ソーテック社
- 発売日: 2017/06/03
- メディア: 単行本
- この商品を含むブログを見る
サポートページ:これ1冊でできる!ラズベリー・パイ 超入門 改訂第4版 サポートページ
総論賛成各論反対という感じ。ちょっとどうかと思う。正直微妙。
なぜかslogin
コマンドを使用している。とっても不思議。ssh
なにか恨みでもあるのか?
素直にssh
コマンドを使うべき。
本文のコマンド紹介でkill
コマンドをー9
オプション付きで載せている。むやみに使うコマンドではないのですけど。
また巻末のコマンド解説は順序がちょっと変。いきなりリダイレクトの説明とか。
ちょっと偏った知識で書いているようにと思います。
同じ著者の他の本はともかくこの本はおすすめしない。
『電子部品ごとの制御を学べる! Raspberry Pi 電子工作実践講座』
電子部品ごとの制御を学べる! Raspberry Pi 電子工作実践講座
- 作者: 福田和宏
- 出版社/メーカー: ソーテック社
- 発売日: 2017/12/21
- メディア: 単行本
- この商品を含むブログ (1件) を見る
- 部品の仕組みや構造の解説は有意義
- Python3
- 個別の部品をつかうサンプル付き
- RaspbianのインストールはNOOBS
- Raspbianの解説はイマイチ
- Wringpi
- 索引が貧弱
- 巻末付録の部品リストはなかなか良い(特に通販の商品コード)
見開き2ページの右ページ右下にPythonのコードが掲載されている。しかし掲載エリアの比率としてはページの6分の1〜2分の1ぐらい。
Pythonのコードがいわゆるラムネ付きの食玩のラムネみたい。
センサやモーターの解説書と電子工作の本とラズパイについての解説を足して2.5ぐらいで割ったような本。
子供の好奇心を満たすという上ではいい本だけど、人によっては中途半端。コンセプトは悪くないが索引がしょぼくて本としてのつくりに疑問。
『ここまで作れる! Raspberry Pi 実践サンプル集』
- 作者: 太田一穂,岡嶋和弘,西村良太,樋山淳
- 出版社/メーカー: マイナビ出版
- 発売日: 2017/07/14
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
確かにAmazonのレビューどおり、あまり読みやすい文章という感じではない。
なぜか日本語フォントとしてkochi-gothic
パッケージをインストール……。他に利用できる日本語フォントがあるのに東風ゴシックは選ぶ必要性がわからない*5。
2017年7月発行の本でIPAフォントのパッケージがあるのにわざわざ古いフォントをインストールする理由はない。ラズパイの日本語フォントが問題になることはまずない。その点では細かいことを気にする必要はどこにもない。書くならちゃんと調べてほしいという話。
また冒頭部で唐突にswapを無効化する手順を説明しているけどswapの仕組みの説明はなく、ちょっと不親切。
作例サンプル集としては有意義だと思う。ただし目次をよく見て自分がつくりたいものと類似しているサンプルがあるか要チェック。
なお、日本語フォントとしてはfonts-ipafont-gothic
やfonts-noto-cjk
というパッケージがあり、コマンド一発でインストールできます。
まとめ
本を買わなくてもネット情報で十分なことも多いですが、電子工作にガッツリ取り組みたいならラズパイ関連の本を1冊、ラズパイ関連ではない電子工作系の本を1冊でやっぱり2冊は買う必要があると思います。
ラズパイの初期設定に関してはどの本もちょっと中途半端な印象です。ラズパイで何をするか、はっきり目的を決めないと、どの本も中途半端だと思います。
Voice Kit とサーボモーター その1
最終的な目標は音声でVoice Kit につないだカメラの首振りなどの制御。
まずは下準備としてラズパイからサーボをコントロールする。
やりたいこと
- Voice HAT (Voice Kitの拡張ボード)のカメラマウント用のサーボモーターをつなぐ
- Pythonからサーボモーターの制御
用意するもの
- ラズパイ本体(Raspberry Pi model 3B)
- microSD
- Google AIY Voice Kit
- サーボモーター制御のカメラマウント
【国内代理店版】Google AIY Voice Kit & Raspberry Pi 3 入門セット - 日本語「組み立てガイド」付属
- 出版社/メーカー: ケイエスワイ
- メディア: エレクトロニクス
- この商品を含むブログを見る
SG90サーボ用 2軸 カメラマウント 2軸アングル FPV 空撮にも (マウント+2個SG90)
- 出版社/メーカー: サンクスワールド
- メディア: おもちゃ&ホビー
- この商品を含むブログを見る
※ マーケットプレイス注意
なお、Voice Kit付属のプラスチックスペーサーは取り外しが不便なので下記で代用しています。
サンハヤト Raspberry Pi用スペーサー 黄銅製 MPS-M2611
- 出版社/メーカー: サンハヤト
- メディア: Tools & Hardware
- この商品を含むブログを見る
ピンヘッダの取り付け
Voice HAT accessory board(Voice Kit付属のメイン拡張基盤)にはサーボモーターやDCモーター、ステレオスピーカー化するためのはんだ付け用のパターンが用意されています。逆いうと自分でピンヘッダなり必要な端子をはんだ付けする必要があるということ……。
今回はサーボモーターを2個つなげることができれば良いので、3ピンのピンヘッダを2つ取り付けることにします。
電子部品ショップにレッツゴーするか秋葉原詣でに行くか、あるいは通販でピンヘッダを入手します。
寺町通のマルツに行って確保してきました*1。10個入りで21円(税抜き)。交通費に比較してなんと微妙な価格でしょう……。
配線
取り付けたピンヘッダにつなぐ。オレンジ色の線が制御信号で、Voice Hat の端側に来るように接続する。
内部でどのGPIOピンにつながっているかは付属の冊子の最後の方の配線図で判断できる。
動作テスト
Voice Kit付属の小冊子に記載されているコードをちょっとだけ改造。
from gpiozero import Servo from time import sleep servo_0 = Servo(26) servo_1 = Servo(6) #servo_1.mid() servo_1.max() while True: servo_0.min() servo_1.max() sleep(1) servo_0.mid() servo_1.mid() sleep(1) servo_0.max() servo_1.min() sleep(1) servo_0.mid() servo_1.mid() sleep(1)
Servo()
関数に、サーボモーターの信号線のつながっているGPIO番号を指定する。
一番上側がGPIO 26、その下がGPIO 06。
停止させるときはCtrl-C。
動作の様子
gif にしたらファイルサイズがちょっと残念な感じだったので省略。ちゃんと動きました。
まとめ
次はカメラマウントにセットして、任意の角度で可動させたい。
流石にそろそろ出発準備しないとまずいのでどこまでいけるかちょっと微妙だけど。
*1:Pi Zero Wと一緒に……
Raspberry Pi Zero W のセットアップ
初詣のついでに買った*1ヤツをセットアップしたのでメモ。
概要
公式:Raspberry Pi Zero W - Raspberry Pi
購入したのはマルツで販売されていたセット商品。
不満な点としてはmicroSDが8GBなのと、インストールされているのが2017年7月のイメージだったところ(NOOBS 2.4.2)。
別に上書きしちゃえばいいんだけどさ。
はんだ付けしたのはいいけれど……
純正ケースのフタは3種類ありますが、GPIO用の40ピンのピンヘッダを取り付けると干渉してしまうので1種に限定されます。皆さんご注意を。
用途を検討の上ではんだ付けするのがいいと思います。というか、普通はそうしますよね……。
導通確認はしていませんが、どうにかこうにかはんだ付けできたっぽいです。
はんだ付けの手順については下記を参考にさせていただきました。
Raspberry Pi ZeroのGPIOピンをはんだ付けする(Rev.C) | 電子工作の環境向上
- 出版社/メーカー: 太洋電機産業
- メディア: Tools & Hardware
- 購入: 7人 クリック: 9回
- この商品を含むブログ (1件) を見る
公式の動画チュートリアルもいいと思います。
Getting started with soldering - Video tutorial | Raspberry Pi Projects
なお、拡大鏡の類がないとつらいです。 私は手元にあった拡大鏡をどっちもクリップという製品で保持して作業してました。
長さ的に微妙だったのでロングタイプの方がいいかも。
YAZAWA(ヤザワ) どっちもクリップ ロングタイプ CLW5
- 出版社/メーカー: ヤザワコーポレーション
- メディア: オフィス用品
- この商品を含むブログを見る
純正ケースの脱着
4カ所のピンと赤い出っ張り部分で固定しているので、長辺側をたわませるとスムーズにケースから本体を取り外すことができます。
ちょっとコツがありますが、慣れればどうということはない、かな。
OSのインストール
セット商品なのでOSインストール済みのmicroSDが付属するわけですが、どうもNOOBSを使ってインストールされているようです(マルツの場合)。
これでは/boot
にファイルを置くことによるギミックが機能しないのでインストールし直します。
公式サイトから"Raspbian Stretch Lite"の方をダウンロードする。
Download Raspbian for Raspberry Pi
イメージファイルの書き込みはEtcher。
セットアップ
下準備
microSDの/boot
パーティション直下にファイルを作成し、Wifiの設定を書き込む。
$ vim /Volumes/boot/wpa_supplicant.conf
下記の内容を入力。
country=JP ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="your-SSID" psk="your-passphrase" }
内容は環境に応じて修正する。
起動時にsshを有効化するために、同じ要領で空のファイルを作成。
$ touch /Volumes/boot/ssh
/Volumes
というのはmacOSにおけるデバイスのマウントポイント。Windowsのドライブレター(D:
とかE:
みたいなもの)だと思えばいい。
sshでログインする
$ ssh pi@raspberrypi.local
初期設定
まずはパッケージのアップデート。
$ sudo apt update $ sudo apt upgrade
Wifi の確実化
rfkill
フラグのリセット問題が発動すると面倒なので、念のため。
$ sudo apt install rfkill $ sudo vi /etc/rc.local
適当な場所に下記を追加。
$ sudo vi /etc/rc.local
参考:Raspbian Stretch Lite で突然無線LANに接続不能になったとき - ながいものには、まかれたくない
パッケージの追加
ひとまず最低限。
$ sudo apt install tmux vim
ホスト名の変更
$ sudo vi /etc/hostname
任意で書き換える。
$ sudo vi /etc/hosts
raspberrypi
という箇所を上記と同じホスト名になるように書き換え。
パスワード変更
$ passwd Changing password for pi. (current) UNIX password: Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
雑多な設定
$ sudo raspi-config
"4. Localization Options"から"11. Change Locale"を選択して、"ja_JP.UTF-8"を有効に。
同様に"4. Localization Options"から"12 Change Timezone"。"Asia"、"Tokyo"と順にたどっていく。
感想
まあ、スペック通りに小さくて……、遅い。これはOpenCV3系列入れるならクロスコンパイル環境の作り方を調べないとダメか。
ラズパイ3Bの2台目とどっちが良かったのかちょっと微妙な感じ。
まとめ
特別なことは基本的に何もしていないです。何より用途を決めずに勢いで購入してしまったので。
純正のカメラモジュールをつなごうかと思いましたが、それだとなおさらGPIOピンヘッダをつないだ意味がないのでLEDで遊ぼうかどうするか。
それではまた。
参考URL
ラズパイマガジン 2018年2月号 (日経BPパソコンベストムック)
- 作者: 日経Linux
- 出版社/メーカー: 日経BP社
- 発売日: 2018/01/05
- メディア: ムック
- この商品を含むブログ (1件) を見る
*1:買ってしまった
Raspbian Stretch Lite で突然無線LANに接続不能になったとき
引き続きラズパイ関連ネタで。無線LANのトラブルに関して(Voice Kitは無関係です)。
問題なく無線LANに接続できていたのに突然接続できなくなってしまった場合の話。
Qiitaに書こうと思ったが、唐突に買収されたらしいのでちょっと様子見。
非常に冗長な記事なので結論を先に書いておくと、rfkill
コマンドがポイント。インストールして/etc/rc.local
にrfkill unblock wif
と1行入れれば解決。
その場しのぎの解決策ではあるけど。
環境
- ブロードバンドルーター: NEC WX01 (WiMAX2+)
- Raspbian Stretch Lite (2017/11/29 ver. )
- Raspberry Pi model 3B
環境要因ではなさそう。
現象
初回セットアップ直後は問題はなく、普通に無線LANに接続できていた(はず)。
接続が不安定とかそういうのではなく、特定のタイミングからさっぱりつながらなくなってしまった。
パッケージを追加後の後処理が実行されている最中(systemd 関係のフック処理?)で通信が途切れて再起動しても接続できず。
$ sudo ip link set wlan0 up RTNETLINK answers: Operation not possible due to RF-kill
"RF-kill"に関してはArch LinuxのWikiが参考になった。無線LANデバイスをソフトウェア側で無効化するスイッチがあり、これを"RF-kill"と呼ぶらしい。
理由はわからないが、無線LANデバイスを無効化するための内部ロックがセットしたまま解除されてない状態。
ソフトウェア的に無線LANが無効化されているので接続処理が実行されない。
対処
無線LANデバイスの内部ロックを外すためにrfkill
コマンドが必要だがRaspbian Liteではインストールされていない。
有線ネットワークにつないでrfkill
パッケージをapt
でインストールする。
$ sudo apt install rfkill
以下のコマンドでロックを外すことができる。
$ rfkill unblock wifi
この状態で、再度ip
コマンドでデバイスを有効化する。
$ sudo ip link set wlan0 up
成功していれば、無事にIPアドレスを取得できるはず。
その他
rfkill
コマンドの他のオプションとして、list
で現在のデバイスのブロック状態を確認できる。
$ rfkill list 0: phy0: Wireless LAN Soft blocked: no Hard blocked: no 1: hci0: Bluetooth Soft blocked: yes Hard blocked: no
ラズパイの無線LANモジュール用のカーネルモジュール名はbrcmfmac
なので、以下のようにしてカーネルのログを絞り込んだりできる。
$ dmesg | grep brcm
あとはjournalctl -l
でログを見る。
再起動のたびに接続不能になる場合
上記で問題が解決するかと思いきや、手元の環境では解決せず。とりあえずudev
かsystemd
が容疑者。
systemd-udevd[169]: Process '/usr/lib/raspberrypi-sys-mods/rfkill-persist' failed with exit code 1
頑張って調べていくと、udevは/lib/udev/rules.d/15-rfkill.rules
というルールにより、/usr/lib/raspberrypi-sys-mods/rfkill-persist
というスクリプトを実行している。
このスクリプトはどういうスクリプトかというと、/dev/rfkill
の状態が変化した時にudev経由で実行されるもの。
こいつは何をしているかというと、/lib/systemd/systemd-rfkill
というコマンドを引数付きで実行するのだが……。
ところがこのsystemd-rfkill
コマンドは引数を要求しない。よって必然的にエラーになる。
$ /lib/systemd/systemd-rfkill save wifi This program requires no arguments.
このコマンドは何をするかというと、ソースを見る限り、udev
イベントの状態をチェックして、/var/lib/systemd/rfkill/
ディレクトリ配下のファイルに状態を記録あるいは読み出すコマンド。
マニュアルによるとカーネルのコマンドラインオプションをチェックするので無効化自体はできるみたいだけど、そもそも状態の保存に失敗しているので、オプションに関係なくうまく動いていないのでは……。
試行錯誤のメモ
とりあえず問題のあるスクリプトを修正してみた。
$ sudo vi /usr/lib/raspberrypi-sys-mods/rfkill-persist
要するに引数なしで実行すればいいので、3行目のコマンドの引数2つを削除。
#!/bin/sh #RFKID=`basename $DEVPATH` #/lib/systemd/systemd-rfkill save $RFKID /lib/systemd/systemd-rfkill
2行目をコメントアウト。3行目をコピーして元の行をコメントアウト。コピーした行は引数を除去。
もう一度、sudo rfkill unblock wifi
を実行して再起動。やはり解決せず。
結論
仕方がないので、/etc/rc.local
でお茶を濁す。まあその場しのぎなんだけど。
以下の1行を/etc/rc.local
の、# By default this script does nothing.
という行の下に追加。
/usr/sbin/rfkill unblock wifi
systemd
、バグってんじゃないのかと思いつつ、ググってもそれらしいバグは上がってない。それとRaspbianのGUIなしを使うユーザはあまり無線LANは使わないのかな……。
適切かどうか断言できないけど、udev
ルールのうち、/lib/udev/rules.d/15-rfkill.rules
というのは無駄ではないかと思う。理由としては"systemd-rfkill"というサービスが存在しており起動時と終了時に実行されるはずなので*1。
参考情報
古いバージョンのRaspbian向けの情報だと、/etc/network/interfaces
を編集しろと書いてあるけどこれは不要。
同時に、/etc/network/interfaces.d
も空で問題なく無線LANは接続できる(前述のRF Kill問題さえなければ)。
pi@raspberrypi:~ $ cat /etc/network/interfaces # interfaces(5) file used by ifup(8) and ifdown(8) # Please note that this file is written to be used with dhcpcd # For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf' # Include files from /etc/network/interfaces.d: source-directory /etc/network/interfaces.d
上記の設定ファイルでインクルードしているディレクトリは空。
pi@raspberrypi:~ $ ls /etc/network/interfaces.d pi@raspberrypi:~ $
なお、天下無双の嫌われ者?、systemd様がよろしくやってくれるので、wpa_supplicant.service
も無効のままで問題ない。
$ systemctl is-enabled wpa_supplicant.service disabled
IPアドレスを固定したいとかそう言うのはdhcpcd
でやるか、systemd-networkdにやらせろということらしい。
なお、ifup
およびifdown
コマンドの応答を見ると、デバイスがみつからないように見えるが、この状態でも正常につながるので気にしなくていい。
$ ifup wlan0 ifup: unknown interface wlan0
まとめ
ちゃんとRaspbianのネットワークまわりの初期化処理の流れを把握していないので勉強しないとまずそう。
良くも悪くもハードウェアの知識が知らずと身につくのがLinux系のいいところ。Windows にrfkill
相当のコマンドがあるのか知りませんが。
トラブルの度に今まで知らなかった知識が増えるんでこういうのも(たまには)悪くない*2。
関連リンク
- systemd/rfkill.c at master · systemd/systemd
- Arch Linux のライブラリアップデート後に Wifi に接続できなくなった場合 › なんか書いていこうぜー.com
- ワイヤレス設定 - ArchWiki
- [ubuntu] I have to issue "rfkill unblock wifi" at every boot...
カラー図解 最新 Raspberry Piで学ぶ電子工作 作って動かしてしくみがわかる (ブルーバックス)
- 作者: 金丸隆志
- 出版社/メーカー: 講談社
- 発売日: 2016/07/20
- メディア: 新書
- この商品を含むブログ (1件) を見る
カラー図解 Raspberry Piではじめる機械学習 基礎からディープラーニングまで (ブルーバックス)
- 作者: 金丸隆志
- 出版社/メーカー: 講談社
- 発売日: 2018/03/15
- メディア: 新書
- この商品を含むブログを見る
Google AIY Voice Kit (Google Homeもどき)のセットアップ
月曜日に到着したGoogle AIY Voice Kitを日曜日にセットアップしているってのはどうなんでしょう。
Google AIY Voice Kit 販売開始のご案内 - Raspberry Pi Shop by KSY
国内正規品の初回ロット。最近の出荷分には日本語ガイドがついているそうです*1。
何はともあれ、セットアップ。
- Google AIY Voice Kitとは
- 開封の儀
- 用意するもの
- 準備
- セットアップ作業
- 電源投入
- ソフトウェア側の設定
- Assistant APIの動作確認
- 普通のRapsbianとの違い
- 所感など
- 入手方法について
- まとめ
Google AIY Voice Kitとは
ざっくり言うとGoogleがリリースしたスマートスピーカー(ホームスピーカー)の組み立てキットです。
発表されたのは少し前ですが、日本国内でも正式に販売が開始されたということで購入。
Google のAI Yourself プロジェクトの第一弾としてリリースされたもの。現在は第二弾のVision Kitというのもリリースされています。
このVoice KitはRaspberry Pi model 3Bと組み合わせることで、音声認識を活用した「何か」を作れますよ、というキット。
Voice Kit 自体は税抜き3,000円ですが、別途、Raspberry Pi model 3Bと電源アダプタ、microSDなどを用意する必要があります(Vision Kit の方はRaspberry Pi Zero WとPi Cameraが必要)。
Google Home もどきの自作キットという認識でよろしいかと。
Raspberry Pi mdel 3Bを組み込むので、ラズパイ関連のノウハウなり周辺機器の一部を利用できて色々と遊べる、はず……。
開封の儀
公式のページの写真と何も変わりはないですが、一応。
英語のガイド本つき。
外装のダンボールがお目見え。
部品一式。
用意するもの
- Raspberry Pi moedel 3B
- 両面テープ
- 精密ドライバー
- microSD & SDカードアダプタ
- HDMI接続のディスプレイ(VNCを使わない場合)
- キーボードおよびマウス(VNCを使わない場合)
ドライバーは"#00"のサイズのものが必要と書いてあります。ダイソーの精密ドライバーセットで全く問題ないです。
ディスプレイとキーボード、マウスは無くてもSSH+VNCで作業するので無くても問題ない、です。
準備
事前にOSのイメージファイルをダウンロード。
2017年12月23日時点でaiyprojects-2017-09-11.img.xz
というファイル名でした。
Etcherで書き込み。圧縮ファイルに対応しているので、xz
形式のファイルを直接指定してOK。
一度microSDを取り外し、ssh接続用に小細工しておきます。
$ touch /Volumes/boot/ssh
Finderからboot
というボリュームをマウント解除して取り出し。
2017年12月現在、旧式のRaspbian Jessie、つまりDebian 8ベースのRaspbianにサンプルコード一式を追加した代物のようです。
セットアップ作業
注意点
ラズパイ側に放熱用のヒートシンクを取り付けている場合、高さによっては接触するので取り外す必要あり。
基盤の取り付けと配線
それほど難しい英語ではないので、写真を見ながらゆっくり作業して行けば問題ないです。ドライバーはちゃんと寸法のあったものを使う、ぐらいでしょうか。
ちょっと拍子抜けするレベル。スペーサーの取り付けがちょっと力がいるので手こずるかも。
一通り取り付けて、配線を確認したら外装に組み込み。
片方の側面にだけ穴があるのはやはり内部からケーブルを取り出せということ?
分解はできなくはないですが、ラジオペンチでスペーサーの頭をつまむ必要があります。
電源投入
microSDをセットして電源ケーブルを接続。 無線は面倒なのでネットは有線に逃げました。
説明書にLEDの状態をチェックしろと書いてありますが、、本体上部の赤いボタンのLEDはプログラムを動かさない限り光らないようです。説明書の記述が間違っているとか。
ソフトウェア側の設定
前述のとおり、公式ページで提供されているOSはRaspbianそのものなので基本的にRaspbian Jessieのセットアップと同じ。まずはsshでログインしてVNCを有効化。
VNC
$ sudo raspi-config
VNCを有効化する。
過去記事を同じなので省略。
Raspbian Stretch Lite とVNC - ながいものには、まかれたくない
$ sudo vi /boot/config.txt
以下の2行の行頭のコメント記号を外す。
framebuffer_width=1280 framebuffer_height=720
スピーカーとマイクの動作チェック
とりあえずVNCで接続する。
警告が出るのでパスワードは変更しておく。
ログインするとデスクトップに"Check audio"というアイコンがあるのでおもむろにダブルクリックすると、端末エミュレータのウィンドウが開いていきなりスピーカーから音声が聞こえる。
テキストメッセージの指示に従ってEnterを押してから"Testing 1,2,3"と読み上げるとスピーカーから自分が読み上げた音声が再生される。
なぜか音量でかいので注意。
Assistant APIの動作確認
APIの有効化
https://console.cloud.google.com
にアクセスする。ラズパイ上でアクセスしてもいいし、普段使いのマシンで作業してJSONを転送してもいい。
- プロジェクトを作成
- Assistant APIを有効化
- OAutuの認証キーを作成してJSONファイルをダウンロード
別のマシンからVoice Kit内部のラズパイに送る場合は、以下のようにする。
$ scp Downloads/client_secret_*.json pi@raspberrypi.local://home/pi/
ラズパイ側で、ファイル名をassistant.jsonにリネームする。
$ mv client_secret_*.json assistant.json
`https://myaccount.google.com/activitycontrols'にアクセス。
- ウェブとアプリのアクティビティ
- 端末情報
- 音声アクティビティ
の3つを有効化する。
[2017/12/27 追記]
「ウェブとアプリのアクティビティ」という項目に関しては、以下のチェックボックスをオンにしないと定形応答しか帰ってきません。チェックしなくても音声認識は動作するようです。
Chrome の閲覧履歴と Google サービスを使用するウェブサイトやアプリでのアクティビティを含める
何を話しかけても同じ応答メッセージが帰ってくる場合はアクティビティの設定を確認。
権限不足の場合は何かが足りないのでGoogleのページを参照しろ、という応答が返ってきます。
"Actually? There are silence? XXX your development? Going to Google web site your phone? for more detail."(イマイチ聞き取れず)。
参考:Configure a Developer Project and Account Settings | Google Assistant SDK | Google Developers
[追記ここまで]
デモプログラムの実行
デスクトップ上にある、"Start dev terminal"をダブルクリック。端末エミュレータのウィンドウが起動するので、``と入力してEnterキーを押す。
デモプログラもの動作が始まると、赤いボタンの内蔵LEDが点滅する。
"OK, Google"と話しかけると反応がある。ただし、発音を英語っぽく”オーケイ、ゴオゥゴォ”みたいに呼びかけないと反応しない……。
なんか早口で会話が成立していない。
付属のデモプログラムについて
全部で4つデモプログラムが付属。Assistant API のAPIキーで動くのは以下の3つ。
- AIY-voice-kit-python/src/assistant_library_demo.py : "OK, google"という呼びかけに反応するサンプル
- AIY-voice-kit-python/src/assistant_library_with_button_demo.py : "OK, google"という呼びかけか、ボタンを押すと反応するサンプル
- AIY-voice-kit-python/src/assistant_grpc_demo.py : ボタンを押すと認識した音声がコンソールに表示されるサンプル
デモプログラムの返答は固定っぽい。"OK, google"ではなく"Hey, Google"でも反応する。
最後の1つはCloud Speech APIを有効化する必要があるサンプル。月1時間までは無料ですが、それ以上は課金されるので注意。
- AIY-voice-kit-python/src/cloudspeech_demo.py : ボタンを押すと音声がテキストに変換される(要カスタマイズ?)
Assistant APIと同じ要領で、Google Cloud Speech APIのAPIを有効化し、サービスアカウントのAPIキーを作成する必要あり。認証情報のJSONファイル(プロジェクト名で始まるファイル)を入手してcloud_speech.json
にリネームしてホームディレクトリに配置すると動く。
公式ドキュメント参照:Create a service account and credentials
普通のRapsbianとの違い
再配布に制限のあるパッケージを除去して拡張基板(VoiceHat)用のドライバ類がインストールされただけ?
dmesg
コマンドの出力を見ると、voicehat-code
というのが認識されています。
$ dmesg | grep voicehat [ 2.687675] voicehat-codec voicehat-codec: property 'voicehat_sdmode_delay' not found default 5 mS [ 3.880121] snd-googlevoicehat-soundcard soc:sound: voicehat-hifi <-> 3f203000.i2s mapping ok [ 18.092070] voicehat-codec voicehat-codec: Enabling audio amp... [ 19.201221] voicehat-codec voicehat-codec: Disabling audio amp... [ 34.730969] voicehat-codec voicehat-codec: Enabling audio amp... [ 34.737530] voicehat-codec voicehat-codec: Enabling audio amp... [ 37.056762] voicehat-codec voicehat-codec: Disabling audio amp...
カーネルまわりは普通っぽいし。
uname -a Linux raspberrypi 4.9.35-v7+ #1014 SMP Fri Jun 30 14:47:43 BST 2017 armv7l GNU/Linux
いまいちよくわかりませんでした。
所感など
どこからどこまでラズパイ側で処理しているのかちょっと不明です。"OK, Google"だけラズパイ側でTensorflowでやってるとか?
構造上、Pi Camera は使えないです。それとヒートシンクが干渉するというのはちょっと盲点でした。いわゆるHATシリーズは今まで試したことがなかったので気づきませんでしたよ。
ダンボール筐体にボタンというのも趣があります。
問題は自宅に赤外線リモコン対応機器がロクにないとか、遠隔操作可能な家電がないってことですかね。
はんだ付けしてやればスピーカーをモノラルからステレオに拡張できるみたいですし、付属の冊子を読む限りサーボモータをつないだり色々できるようです。
入手方法について
KSYから買うのが確実ですが、、入門セットがamazonでも購入できる状態になっているようです。
- メディア:
- この商品を含むブログを見る
はてなのAmazon商品紹介、検索にヒットしてもうまくリンクされないのはちょっと困るんですが。
まとめ
なんだかんだで遊べそうです。基本的にスピーカーとマイクとプラスアルファなのに。
次の目標は日本語の呼びかけに反応させることと、USBのカメラの制御ぐらいはやらせたい。
*1:別にいらないけど