プログラミング

Raspberry Pi(ラズパイ)を使ってGoogle Homeをしゃべらせてみた

グーグルホーム

Raspberry Pi(ラズパイ)を使ってGoogle Homeをしゃべらせてみました!

みなさん、Raspberry Pi(ラズパイ)楽しんでますか?

ラズパイのセットアップが終わり、さて何をしようか考えました。

前回の記事がこちらです。

ラズパイセットアップ
Raspberry Pi(ラズパイ)初心者のためのかんたんセットアップ手順(ABOX Raspberry Pi 3 Model b+)Raspberry Pi(ラズベリーパイ)って興味あるけどセットアップって難しそう・・・。 ラズパイって周辺機器と相性があるんだっ...

たとえば、普段はこちらから明日の天気を聞いたらGoogle Homeが教えてくれます。

ヨシタカ
ヨシタカ
O.K. Google、明日の天気は?
Google Home
Google Home
明日の○○は最高気温13度、最低気温1度、晴れときどき曇りでしょう

という感じです。

その他には、Google HomeとChromecastを使って、テレビをつけたり消したりしてます。

chromecast
【Chromecast Ultraレビュー】Google Homeと連携してテレビでYouTubeがはかどる!? 「Chromecast(クロムキャスト)ってどう使うの?」 「Google Homeをもっと活用したい!」 Ch...

主にGoogle Homeの役割はこの3つ。

  1. 天気を聞く
  2. ChromecastでYoutubeを見る
  3. Chromecastでテレビを消す

でも、これってこちらからGoogle Homeに話しかけてお願いしてるんですよね。

ヨシタカ
ヨシタカ
もしGoogle Homeから何か話してくれたら、面白いよなぁ

というわけで、ラズパイを使ってGoogle Homeを喋らせてみました

ラズパイでGoogle Homeを喋らせる

今回の目的:Raspberry PiとGoogle-home-notifierを使って、Google Homeにメッセージをプッシュする。

【2020.1.12更新】

使用機材

  • Google Home
  • Raspberry Pi 3B+

ざっくりとした流れ

Node.js(サーバサイドで動くJavaScript)にgoogle-home-notifierというAPI(プログラムからソフトウェアを操作するためのインターフェイス)があり、Google Homeに任意の言葉を喋らせることができます。

・・・専門用語が多くて良く分からないですね。

流れは以下のようになります。

  1. ラズパイにGoogle Homeを操作するためのファイル(google-home-notifier.js)を導入
  2. ラズパイからGoogleHomeにしゃべらせたいことを実行
  3. GoogleHomeがしゃべります

手順

それでは、ラズパイの設定をしていきましょう。

古いNode.jsのアンインストール

まずは、古いNode.jsをアンインストールします。

$ sudo apt-get autoremove nodejs

nvmのインストール

そして、nvmのディレクトリを作成し、git cloneでnvmをもってきてnvm.shを読み込ませます。
nvm とは Node Version Manager の略で, Node.js をかんたんにバージョン管理できるツールです。

$ sudo apt-get update
$ sudo mkdir ~/.nvm
$ sudo chmod 777 ~/.nvm
$ git clone https://github.com/creationix/nvm.git ~/.nvm
$ source  ~/.nvm/nvm.sh
$ nvm --version
0.33.11

これで、nvmがインストールできました!

新しいNode.jsのインストール

次に、Node.jsのバージョンのリストを確認します。

$ nvm ls-remote
       v10.13.0   (LTS: Dubnium)
       v10.14.0   (LTS: Dubnium)
       v10.14.1   (LTS: Dubnium)
       v10.14.2   (LTS: Dubnium)
->     v10.15.0   (Latest LTS: Dubnium)
        v11.0.0
        v11.1.0
        v11.2.0
        v11.3.0
        v11.4.0
        v11.5.0
        v11.6.0
        v11.7.0

LTSの最新版であるv10.15.0をインストールします。

$ sudo apt-get update
$ nvm install v10.15.0
$ node --version
v10.15.0
$ npm --version
6.4.1

これでNode.jsとnpmがインストールできました!

google-home-notifierのインストール

Google Homeのための作業用ディレクトリを作成します。

$ mkdir googlehome
$ cd ./googlehome

googlehomeディレクトリでnpmを実行できるようにします。npmとはNode.jsのライブラリやパッケージを管理することができるツールです。 いろいろ聞かれますがEnterで進み、最後にIs this OK? (yes)でyesです。

$ npm init

avahiの開発用パッケージをインストールし、いよいよgoogle-home-notifierのインストールです。

$ sudo apt-get install libavahi-compat-libdnssd-dev
$ npm install google-home-notifier

これでようやく準備完了です。

Google Homeをしゃべらせてみよう

では、Google Homeをしゃべらせてみましょう!わたしの環境では、ラズパイとGoogle Homeは同じ無線LANにつながっています。

sample.jsを作成します。sample.jsのIPアドレスの部分は自分のGoogle HomeのIPアドレスに変更してくださいね。

Google HomeのIPアドレスの確認するにはスマホのGoogle Homeアプリから「デバイス」→IPアドレスを知りたいGoogle Home→「設定」の一番下にIPアドレスが記載されています。sample.jsは以下のようになります。

// ライブラリ参照
var googlehome = require('./google-home-notifier');
// 言語設定
var language = 'ja';
// GoogleHomeのIPアドレスに書き換えてくださいね
googlehome.ip('192.168.xxx.xxx');
// 第一引数を自分のもっているGoogleHomeの名前に書き換えてくださいね
googlehome.device('googlehome', language);
// Google Homeにしゃべって欲しい文章をここに記入してくださいね
var text = 'こんにちは、グーグルホームです。よろしくね。';
// メイン処理
try {
// 実行
googlehome.notify(text, function(notifyRes) {
// ログ出力
console.log(notifyRes);
});
// エラー処理
} catch(err) {
// ログ出力
console.log(err);
}

では、さっそく、実行してみましょう!

$ cd googlehome
$ node sample.js

ドュルン!!

Google Home
Google Home
コンニチハ、グーグルホームデス、ヨロシクネ

うまくいきました \(^o^)/

ヨシタカ
ヨシタカ
いつもよりなんだか棒読みな感じがしますが・・・。

バグを直しましょう!

【2020.1.12追記】

その後、APIのバージョンの不整合により、Google Homeへのプッシュ動作がうまく動かなくなりました。

下記によりまた動くようになりました。

google-tts-apiのバージョンアップ

package.jsonのgoogle-tts-api を 0.0.4 に設定します。

フォルダは下記を参照。

node_modules/google-home-notifier/package.json

   "bundleDependencies": false,
   "dependencies": {
     "body-parser": "^1.15.2",
     "castv2-client": "^1.1.2",
     "express": "^4.14.0",
     "google-tts-api": "0.0.4",
     "mdns": "^2.3.3",
     "ngrok": "^2.2.4"
   },

修正したpackage.jsonを更新します。

$ cd node_modules/google-home-notifier/
$ npm update google-tts-api

browser.js の修正

もう1つ。

browser.jsを修正します。

フォルダは下記を参照。

node_modules/mdns/lib/browser.js

rst.getaddrinfo に引数 {families:[4]} を追加します。

 Browser.defaultResolverSequence = [
 rst.DNSServiceResolve(), 'DNSServiceGetAddrInfo' in dns_sd ? rst.DNSServiceGetAddrInfo() : rst.getaddrinfo({families:[4]})
 , rst.makeAddressesUnique()
 ];
ヨシタカ
ヨシタカ
以上により、また正常に動作するようになりました。

ラズパイでGoogle Homeをしゃべらせてみた:まとめ

ラズパイを使ってGoogle Homeに好きな文章をしゃべってもらいました。

普段こちらの問いかけに答えてくれるGoogle Homeでしたが、棒読みでも向こうから話してくれるのは新鮮で面白かったです。ラズパイとGoogle Homeをお持ちの方は、ぜひためしてみてはいかがでしょう?

ラズパイの取り組みはこちらでまとめていますので、よろしければ御覧ください♪

ラズパイTOP
Raspberry Pi(ラズパイ)初心者のおすすめ活用方法をご紹介!Raspberry Pi(ラズベリーパイ、通称ラズパイ)で色々と遊んでます^^ ラズベリーパイは、英ラズベリーパイ財団が開発した超...
ヨシタカ
ヨシタカ
引き続き、素敵なラズパイライフをお送りくださいね♪

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です