はじめに
Raspberry Pi Zero Wを入手したので、前回記事
https://qiita.com/Satoshi_Takahama/items/797171045a1c92a891f4
のPC(windows10)を置き換えたのですが、かなり途中でつまずいたので、
参考までに書いておきます。
作業した時期は2018年8月で、使用したツールとバージョン一覧を以下に記載します。
ツール | バージョン |
---|---|
LITE版RASPBIAN | 2018-06-27 |
Etcher | 1.4.4 |
SDメモリカードフォーマッター | 5.0.0 |
git | 2.11.0 |
nvm | 0.33.11 |
Node.js | v8.11.3 |
npm | 5.6.0 |
google-home-notifier | 1.2.0 |
firebase | 5.3.1 |
つまずいたところ
OSイメージの書き込み
最初からつまずきました。
LITE版RASPBIANのOSイメージをダウンロードした後、Etcherを使用して書き込みしようとしたのですが、Startingが表示されたまま先に進みません。
これは、SDカードのフォーマットが必要でした。
以下からSDメモリカードフォーマッターをダウンロードしてフォーマットしたところ、書き込みが最後までできました。
https://www.sdcard.org/jp/downloads/formatter_4/
USB経由でのアクセス
Raspberry Pi Zero WをUSBでPCに接続し、
ssh pi@raspberrypi.local
を実行したのですが、アクセスできませんでした。
これは、インターネット共有の設定が先に必要でした。
以下記事を参考に設定したところ、アクセスできるようになりました。
https://qiita.com/Liesegang/items/dcdc669f80d1bf721c21#141-%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%81%AE%E5%85%B1%E6%9C%89
WIFI経由でのアクセス
WIFI設定を行い、PCと接続していたUSBを外して電源を入れなおした後、
ssh pi@raspberrypi.local
を実行したのですが、アクセスできませんでした。
これは、5GHzの設定(接続先SSIDを5GHzにしていた)をしていたことが原因でした。Raspberry Pi Zero Wの内蔵WIFIは2.4GHzのみしか対応しておらず、接続先SSIDを2.4GHzの設定に直したところ、問題なくアクセスできました。
Node.jsのインストール
まずはgitをインストール
sudo apt-get install -y git
その後は以下記事を参考にnvmからNode.jsをインストールしました。
https://qiita.com/ktetsuo/items/8c9cd5714e231aa6ae09
ここでは特に問題は発生しませんでした。
google-home-notifierのインストール
以下の手順でgoogle-home-notifierをインストールします。
mkdir GoogleHome
cd GoogleHome
npm init
npm install google-home-notifier
この後サンプルコードを実行すると、以下のようなエラーが発生しました。
Error: getaddrinfo -3008
at errnoException (/home/pi/GoogleHome/node_modules/mdns/lib/resolver_sequence_tasks.js:199:11)
at getaddrinfo_complete (/home/pi/GoogleHome/node_modules/mdns/lib/resolver_sequence_tasks.js:112:10)
at GetAddrInfoReqWrap.oncomplete (/home/pi/GoogleHome/node_modules/mdns/lib/resolver_sequence_tasks.js:120:9)
p
これは、以下の記事にある対処(browser.jsの修正)により解消しました。
https://qiita.com/udon242/items/fef44cec7b243f93151b
しかし、この時点で、サンプルコードで英語の文章を喋らせることはできたのですが、日本語の文章ではしゃべってくれませんでした。
さらに、以下2点の対処が必要でした。
・ロケール設定、タイムゾーン
sudo raspi-config から、ロケール設定として"en_US.UTF-8 UTF-8"、"ja_JP.EUC-JP EUC-JP"と"ja_JP.UTF-8 UTF-8"を設定、タイムゾーンとしてAsia -> Tokyoを設定しました。
・サンプルコードの文字コードをShift-JISからUTF-8に変更
これで、サンプルコードから日本語の文章を喋らせることができました。
firebaseクライアントのインストール
以下の手順でfirebaseクライアントをインストールします。
mkdir firebase-listener
cd firebase-listener
npm init
npm install firebase --save
このあと、Firebaseの更新内容を受け取るスクリプトを実行したところ、
Illegal instruction
が表示されました。
これについては、以下を参考にリビルドすることで解消しました。
https://github.com/googleapis/nodejs-logging/issues/69
npm rebuild --build-from-source grpc
しかし、この時点でまだ通知側スクリプトとの連携がうまくいっておらず、更新内容を受け取ったあと、シェルスクリプト(index.sh)を実行したところで処理が終わっていました。
これについては、シェルスクリプトの文字コードをShift-JISからUTF-8に変更し、実行権限の付加(+x)することで解消し、ようやくすべての処理を移行することができました。
おわりに
Raspberry Pi Zero Wは消費電力が小さく常時電源投入した状態で運用できるので、通知されるタイミングがずれることもなく良い感じです。