生成AI、何から始める?はじめての方へ

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

当ページのリンクには広告が含まれています。
「Raspberry Pi(ラズパイ)を使ってGoogle Homeをしゃべらせてみた」の記事のアイキャッチ

この記事は2019年に書いた記録です。商品やサービスの情報は当時のものなので、今の状況は公式のページで確かめてください。

Raspberry Pi(ラズパイ)を使ってGoogle Homeをしゃべらせてみました! みなさん、Raspberry Pi(ラズパイ)楽しんでますか? ラズパイのセットアップが終わり、さて何をしようか考えました。 前回の記事がこちらです。 https://rikei-life.com/raspberry-pi-setup/ たとえば、普段はこちらから明日の天気を聞いたらGoogle Homeが教えてくれます。
ヨシタカ
O.K. Google、明日の天気は?
Google Home
明日の○○は最高気温13度、最低気温1度、晴れときどき曇りでしょう
という感じです。 その他には、Google HomeとChromecastを使って、テレビをつけたり消したりしてます。 https://rikei-life.com/chromecast-google-home/ 主に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
コンニチハ、グーグルホームデス、ヨロシクネ
うまくいきました \(^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をお持ちの方は、ぜひためしてみてはいかがでしょう? ラズパイの取り組みはこちらでまとめていますので、よろしければ御覧ください♪ https://rikei-life.com/raspberry-pi/
ヨシタカ
引き続き、素敵なラズパイライフをお送りくださいね♪
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次