【Google Home】Google Homeに喋らせたい(Google Homeに喋らせる)
概要
前回,Raspberry PiがRaspbianで利用可能になりました.今回,やっとGoogle Homeに喋らせるところまでいきます. なお,今回の作業はRaspberry PiにSSHで接続していることが前提です.
手順
Google Homeを喋らせるための構成要素
まずGoogle Homeを喋らせるための構成要素を確認しておきます.
- google-home-notifier
node.jsをベースに作られたGoogle Homeにnotificationを送信して喋らせるソフトウェア.このソフトウェアが色々難しいことを肩代わりしてくれているので,簡単な入力でGoogle Homeを喋らせることが可能になる. - Raspberry Pi
google-home-notifierを常時起動させておくためのサーバとして利用する.PCとかAWSとかでもできないことは無いと思うけど,コスト的なメリットが大きい. - ngrok
ローカルネットワークのサーバをインターネット環境から簡単にアクセスすることができるようにするツール&サービス.Raspberry Piをgoogle-home-notifierのサーバとして利用するので,そのサーバにインターネットからGoogle Homeが喋る内容を送信可能にすることが利用目的になります.今のところ,ルータの設定とか面倒なことをせずに使えるのがメリットかと思っています. - IFTTT
様々なトリガー(イベント発生条件)を基にアクションを設定可能なWebサービス.今回の目標で言うと,GPSの位置情報をトリガーとして,Google Homeに喋らせる内容を送信するアクションを行なう.IFTTTについては次回使うことになります.
ngrokについては,利用せずとも目標を達成する方法はあると思いますが,せっかくgoogle-home-notifierのサイトにもIFTTTとの連携ができていると書いてあるので使ってみたいと思います.
node.jsのインストール
google-home-notifierのサイトに記載されている"Raspberry Pi"の項目と同様に下記のコマンドでnode.jsをRaspberry Piにインストールします.curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - sudo apt-get install nodejs
google-home-notifierのサイトの方では上記"setup_7.x"になっていたけど,それだとうまくいかなかったので"setup_8.x"に変更しています.
下記はその他の依存パッケージっぽいです.sudo apt-get install git-core libnss-mdns libavahi-compat-libdnssd-dev
加えて,google-home-notifierのサイトではインストールされている前提になっていますが,npm(node.jsのパッケージ管理ツール)を使うので下記コマンドでインストールしておきます.sudo apt-get install npm
google-home-notifierのインストール
google-home-notifierのサイトの記載に従って下記コマンドでインストールを行ないます.npm init
はサイトには書いてないけれどやって方がいいみたい.npm init npm install google-home-notifier git clone https://github.com/noelportugal/google-home-notifier cd google-home-notifier npm install
google-home-notifierのサイトの情報に従って,
npm install
後のプログラムの変更を行なっておきます.nanoかなにかのテキストエディタでbrowser.js
を書き換えます.nano node_modules/mdns/lib/browser.js
変更箇所は下記の通り.最後の方にあります.
この部分を変更する. Browser.defaultResolverSequence = [ rst.DNSServiceResolve(), 'DNSServiceGetAddrInfo' in dns_sd ? rst.DNSServiceGetAddrInfo() : rst.getaddrinfo(), rst.makeAddressesUnique()];
以下のように変更
Browser.defaultResolverSequence = [ rst.DNSServiceResolve(), 'DNSServiceGetAddrInfo' in dns_sd ? rst.DNSServiceGetAddrInfo() : rst.getaddrinfo({families:[4]}), rst.makeAddressesUnique()];
正常に動作するかexample.js
を動かして試してみます.下記コマンドでexample.js
を実行してみて,google-home-notifierのサイトのような実行例が表示されればOKです.node example.js
以下が実行例.WARNINGが何行か表示されていましたが,割愛しています.また,XXXX部分は適当な文字列が入っています.
Endpoints: http://192.168.1.20:8091/google-home-notifier https://XXXX.ngrok.io/google-home-notifier GET example: curl -X GET https://XXXX.ngrok.io/google-home-notifier?text=Hello+Google+Home POST example: curl -X POST -d "text=Hello Google Home" https://XXXX.ngrok.io/google-home-notifier
ngrokは自分で設定しないと行けないのかと思ったら同時に動くようになっているんですね.CURLでGoogle Homeに喋らせてみる
google-home-notifierが正常に動作しているかGoogle Homeに任意のテキストを喋らせてみて確認してみます.上記実行例の中に,curlコマンドでnotificationを送る方法が書いてあるので,実際に試してみます.
とりあえずはngrokは使用せず.ローカルのアドレスでnotificationを送ってみます.Google HomeのIPアドレスは,iOSだと"Google Home"アプリのデバイス設定から確認することができます.このIPアドレス(うちの環境では192.168.1.5)にnotificationが送られるようにexample.js
を書き換えます.nano example.js
コード中のdeviceName
とip
を自身の環境に合せて変更して下さい.例えば下記のような感じで,ip
にはGoogle HomeのIPアドレスを設定して下さい.var deviceName = `Google Home mini`; var ip = `192.168.1.5`; `pl` を `ja`に置換
そして,example.js
を再度実行します.別のSSHセッション等で下記コマンドを実行することで任意のテキストをnotificationとしてexample.js
に送信します.当然ですが別PCからexample.js
にコマンドを送信する場合はlocalhostではなくexample.js
を動かしている環境のIPアドレスを指定して下さい.curl -X POST -d "text=こんにちは Google Home" http://localhost:8091/google-home-notifier
次回
CURLでgoogle-home-notifierに任意のテキストをPOSTすることでGoogle Homeを喋らせることが可能になりました.次回はIFTTTとの連携を行なってみようと思います.
【Google Home】Google Homeに喋らせたい(Raspbianインストール)
概要
前回,Raspberry PiのマザーボードにHDMIモニタとケースを取付けました.次はOSとしてRaspbianをインストールします.
Raspbianインストール手順
Raspbianのダウンロード
Raspberry Piの公式サイトのdownloadページから「RASPBIAN STRETCH WITH DESKTOP」をダウンロード.1.6GBあり時間がかかるのでゆっくり待つ.ダウンロードしたファイルは「2018-06-27-raspbian-stretch.zip」で解凍後,「2018-06-27-raspbian-stretch.img」というファイル名で約4.7GBのOSイメージが入っています.microSDカードのフォーマット
Raspberry PiのブートローダがFAT16かFAT32しか対応してないということなのでFAT32でフォーマット.ちなみにFAT32だと1パーティションで32GBが最大.
購入したmicroSDカードをPCで読ませると既にFAT32でフォーマットされていました.このまま使ってもいいとは思いますが,念のため自身でフォーマットします.フォーマッタはSD Associationのソフトウェアを利用します.
↓購入時の段階でFAT32でフォーマット済み
↓フォーマット完了画面
サンディスク ( SANDISK ) 32GB microSD Extreme PRO R=100MB/s W=90MB/s SDアダプタ付き [海外パッケージ] SDSQXCG-032G-GN6MA
- 出版社/メーカー: SanDisk
- メディア: Personal Computers
- この商品を含むブログを見る
OSイメージをmicroSDカードに書き込む
OSイメージの書き込みにはDD for Windowsを利用します.ダウンロードしたDD for Windows(DDWin.exe)を管理者権限で起動し,下図のように対象ディスクに手順2でフォーマットしたmicroSDカードを指定,対象ファイルに手順1でダウンロードしたOSイメージファイルを指定します.書き込みを開始しようとすると下図のような警告が出ますが,「はい」で進めます.
書き込み終了後,下図のようなファイル構成になっていました.
Raspberry Pi起動
OSイメージを書き込んだmicroSDカードをRaspberry Piのマザーボードに挿入,マウス・キーボード・有線LANケーブルを接続して,最後に電源ケーブルとなるUSBケーブルを接続します.そうすると無事起動.起動後,初期設定のウィザードが勝手に動くので指示に従って設定を進めていきます.ここでWiFiの設定も可能.それにしてもHDMIモニタが小さくてギリギリ文字が読めるレベルです.たぶん解像度の設定を適切にすれば読みやすくなるはず...
↓microSDカード挿入後
↓USBケーブル接続後起動画面
↓いくつか設定があるよ画面
↓国・言語・タイムゾーン設定
↓'pi'アカウントのパスワード設定
↓WiFi設定
↓アップデートをチェックして更新作業,結構待たされます.
↓Rebootして利用開始
VNCとSSHの有効化
RaspbianのGUIメニューの「設定」⇒「Raspberry Piの設定」⇒「インターフェイス」タブにて,VNCとSSHを有効化します.これでVNCやSSHでWindowsPCから接続可能になったはず.
IPアドレスの確認
VNCやSSHで接続するためにRaspberry PiのIPアドレスを知る必要があります.GUIではIPアドレスが確認出来なかったのでターミナルを起動して下記コマンドで確認.
ifconfig
WindowsPCからVNCでRaspberry Piに接続
RealVNCをWindowsPCにインストールしてRaspberry Piに接続します.なんだか暫く見ないうちにRealVNCが近代的なGUIになってた...IPアドレスの固定
現在Raspberry PiのIPアドレスはDHCPで取得されており,今後VNCで接続する際にIPアドレスが度々変わっていると面倒なのでIPアドレスを固定化しておきます.
ターミナルにて下記コマンドでnanoというテキストエディタでdhcpcd.confファイルを開きます.
nano /etc/dhcpcd.conf
下図のようにテキストを追記し,WiFi接続のIPアドレスを固定しました.
(おまけ)Raspberry PiにWindowsPCからSSHで接続
VNCからターミナルを触っていればそれでいい気もしたのですが,念のためSSHで接続可能か確認しておきます.WindowsPCにSSHクライアントを入れておけば下記コマンドで接続出来ます.
ssh [ユーザ名]@192.168.XXX.XXX
SSHクライアントはTeratermとかOpenSSHとか色々選択肢はあると思います.私の場合はたまたまインストール済みだったOpenSSHを利用しました.ユーザ名は特に設定していなければ「pi」でパスワードは初期設定のウィザードで設定したものです.
次回
Raspberry Piの初期セットアップが終りました.これからGoogle Homeを喋らせるために必要なソフトウェア等をインストールしていこうと思います.
【Google Home】Google Homeに喋らせたい(HDMIモニタ+ケース組立て)
概要
先日Amazonで購入したRaspberry Pi一式(前回参照)が届いたのでHDMIモニタや付属のケースを組立てます.
Raspberry Pi 一式確認
Raspberry Pi 3 B +マザーボード
小さな箱にまさにマザーボードだけ入っていました.OSが入ったCDとか,せめてRaspberry PiのOSの入手先くらい書いてある紙くらい入っているのかと思っていました.必要なモノは勝手に探せってことですね.RSコンポーネントRaspberry Pi 3 B +マザーボード
- 出版社/メーカー: ケイエスワイ
- メディア: 付属品
- この商品を含むブログを見る
3.5インチタッチスクリーン HDMIモニタTFT LCDディスプレイ
今回の組み立てのメインになるHDMIモニタとスケルトン的なケースのセット.こちらにはドライバCDらしきCDが入っていました.モニタが小さくてカワイイ.ケースの各部材に保護フィルムが貼ってあって一見してクリアじゃないなと勘違いしました.フィルムを剥がすのを忘れないようにしましょう.3ピースのヒートシンクセット
高負荷計算用に放熱するためのヒートシンクを用意.簡素な封筒に入っていました.ラズベリーパイ3やパイ2、パイモデルB+のためのEnokay3ピースのヒートシンクセット(三つのヒートシンクセット)
- 出版社/メーカー: Shen Zhen Eno Electronic Co.,Ltd
- メディア: Personal Computers
- この商品を含むブログを見る
32GB microSDカード
そこそこ高速大容量なmicroSDカード.これにOSを入れて起動するようですが,OSのインストールは次回になりそう.サンディスク ( SANDISK ) 32GB microSD Extreme PRO R=100MB/s W=90MB/s SDアダプタ付き [海外パッケージ] SDSQXCG-032G-GN6MA
- 出版社/メーカー: SanDisk
- メディア: Personal Computers
- この商品を含むブログを見る
組み立ての流れ
マザーボードにヒートシンク貼付
ヒートシンクセットをマザーボードに貼付けます.背が高いヒートシンクが2つあり,これらをマザーボードの表面の2つのチップの上に貼付けます.もう1つの背の低いヒートシンクは裏面のチップの上に貼付けます.ヒートシンクには両面テープのような感じで粘着質になっています.タダの両面テープには見えないので熱伝導率の高い物質なのかも知れません.マザーボードをケースの底面部に固定
マザーボード4隅のネジ穴に合うサイズの穴が空いたパーツがケース底面部のパーツになります.このパーツにマザーボードを固定します.固定には4つのナットと長めのネジ,透明なスペーサーを使います. マザーボードと底面部パーツの間には透明なスペーサーを挟むことを忘れないようにします.HDMIモニタとマザーボードを接続
ケース側面部のパーツとHDMIコネクタ部の位置が適切になっていることを確認し,問題なさそうならHDMIモニタをマザーボードに接続します.ケース上部の取付け
ケース上部パーツをHDMIモニタの位置を確認しつつ取付けます.底面部パーツと上部パーツを長いスペーサーとネジで固定します.
小さくていいですねー.OSを入れて動かすのが楽しみです.次回はOSをインストールしてVNC等でWindowsPCから操作できるようにしようと思います.
【Google Home】Google Homeに喋らせたい(物品購入)
概要
Nature Remoを使ったりして声で家電をコントロールして遊んでみたりしたものの,その後イマイチ利用の機会がなくなっていたGoogle Home.下記記事に触発されてうちのGoogle Homeくんにも何か喋らせたくなったので,早速必要なモノを購入しました. chasuke.com
目標
Google Homeに何か喋らせたいと言っても,何を喋らせるのか? 真っ先に思いついたのは職場からの帰宅タイミングや最寄り駅に到着したタイミングで「職場を出たよー」とか「○○駅に着いたよー」と喋らせること.自動的にそんな感じで家族に伝えてくれればショートメールで連絡する必要がなくなって便利になりそうと思ったわけです.
上記の実現を下記の2ステップで行なう予定です.
基本的に先人達の追試をしていけば実現可能とは思っていますが,躓きどころなどがあればメモとして書いておこうと思います.
購入した物
Google Homeやスマホ,ネットワーク環境は既にあるので,それ以外でGoogle Homeに喋らせるのに必要な下記のモノを購入しました.なお,衝動的に購入しているため足りないモノや理解不足があるかも知れません.
Raspberry Pi3 B+
- 2018年になって発売された新しいモデルでスペックはRaspberry Piシリーズの中では高いということで選定
RSコンポーネントRaspberry Pi 3 B +マザーボード
- 出版社/メーカー: ケイエスワイ
- メディア: 付属品
- この商品を含むブログを見る
- 2018年になって発売された新しいモデルでスペックはRaspberry Piシリーズの中では高いということで選定
microSDカード
- Raspberry Pi3 B+では32GBより大容量のmicroSDカードは認識しないらしい(未確認)
- 目標実現でだけを考えれば32GBも必要ないかも知れないが,大した価格差でないので容量が大きい&高速なモノを選定
サンディスク ( SANDISK ) 32GB microSD Extreme PRO R=100MB/s W=90MB/s SDアダプタ付き [海外パッケージ] SDSQXCG-032G-GN6MA
- 出版社/メーカー: SanDisk
- メディア: Personal Computers
- この商品を含むブログを見る
(option) Raspberry Pi用ヒートシンク
- もしかしたら高負荷の計算(DNNとか)をさせるかもしれないので冷却のために購入
ラズベリーパイ3やパイ2、パイモデルB+のためのEnokay3ピースのヒートシンクセット(三つのヒートシンクセット)
- 出版社/メーカー: Shen Zhen Eno Electronic Co.,Ltd
- メディア: Personal Computers
- この商品を含むブログを見る
- もしかしたら高負荷の計算(DNNとか)をさせるかもしれないので冷却のために購入
(option) Raspberry Pi用ディスプレイ
電源はUSBケーブルから取ることになりますが,AnkerのUSB電源アダプタが既にあるのでこれで事足りると判断.もしこれの出力不足なら専用のアダプタを購入予定.
明日,2018/08/25,一式届くのでRaspberry Piのセットアップ等進めてみたいと思います.