M5Stack Atom を使ってNetatmo のCO2濃度をGoogle Home にしゃべらせる

M5Stack Atom Echo にNetatmoの二酸化炭素濃度をしゃべらせる」に続いて、M5Stack Atom を使ってNetatmo weather station で計測した二酸化炭素濃度をGoogle Home Miniにしゃべらせるようにしてみた。

作成する前は、Google Home のNotification を利用してしゃべらせることが可能かと思っていたが、そのような機能は一般には開放されていないということがわかった。ただ、Google HomeのスマートスピーカーにChromecastで接続させることで音声を出すことが可能であることがわかった。これを利用してしゃべらせることにした。

Google Home Mini にしゃべらせる部分は、/esp8266-google-home-notifier を使わせていただいたので、ほとんど何もしていない。ファイル output-url-to-google-home.cppの関数 int outputUrlToGoogleHome(String url, String googleHomeName) で、スマートスピーカーを探して、playで音声合成したしゃべりのURLを渡しているだけである。

M5Stack Atom Echo にNetatmoの二酸化炭素濃度をしゃべらせる」の関数 outputUrlToSpeaker を呼び出している部分を outputUrlToGoogleHome に変更した。

開発環境

PlatformIO IDE for VSCode を利用して Arduino プラットフォームで開発を行った。

M5Stack Atom Echo

PlatformIO IDE for VSCode Core 5.0.3 Home 3.3.1

ライブラリのバージョン

ソースコード

GitHub にソースコードや platformio.iniなどを置いた。

m5atom-netatmo-google-home

Visual Studio Code で、Control-Shift-P もしくは「View」→「Command Palette…」からコマンドパレットを開き、「git:clone」を入力して、Gitのクローンを行うようにする。cloneするリポジトリの URLを入力するように促されるので、上記の「https://github.com/kunsen-an/m5atom-netatmo-google-home.git」を入力する。ローカルのディレクトリを指定するように求められるので、適切なディレクトリを選択する。

 

ビルドの準備

リポジトリをクローンしただけではビルドできない。 include/mysettings.h.sample を基に、利用する環境に合わせて include/mysettings.h を作成する必要がある。

また、esp8266-google-tts の tkk部分にtimeout処理を加えたものを利用する場合には、後で示す リポジトリを lib の下に clone する必要がある。オリジナルのままでよければ、platformio.ini に horihiro/esp8266-google-tts を加える。

lib/esp8266-google-tts

先に説明した m5atom-netatmo-google-home をクローンしたローカルの lib の下に esp8266-google-tts ができるようにする。

動作が不安定

WiFiの環境が悪いのか、通信がらみのエラーが多発している。Netatmoへのアクセスでも、Google TTS へのアクセスでもタイムアウトや connection refused などがしばしば発生している。

また、Google Home にしゃべらせる際も、mDNSでスマートスピーカーは見つかっても接続がうまくできないことがある。さらに、プログラムではスマートスピーカーにしゃべらせる処理が正常終了しているが、Chromecast接続時のキャストセッションの開始を示す効果音はスマートスピーカーから聞こえても、音声合成したしゃべりが聞こえない場合がある。

何かプログラムに不十分な点や問題があるような気がするが、原因が良くわかっていない。Netatmo や Google TTS のサーバーの問題があるかもしれないが、Google Homeのスマートスピーカ関連のエラーは外部サービスは関係ないはずである。