M5Stack Atom Echo にNetatmoの二酸化炭素濃度をしゃべらせる

Netatmo APIを利用して二酸化炭素濃度を取得する」に続いて、取得した二酸化炭素濃度の値を基に M5Stack の ATOM Echo にしゃべらせることを試した。

考え方

M5Stack ATOM Echo で URL を指定して再生することは ESP8266Audio を利用した次のサンプルプログラムが示されている。(ESP8266Audio という名前であるが、ESP32にも対応している)。

また、Google 翻訳を使ってText To Speech (TTS)するライブラリとして、次の esp8266-google-tts が利用できる (esp8266-google-ttsも、ESP32に対応している)。

上記を組み合わせる形で、以下の記事などで ATOM Echo にTTS で変換した音声を再生するプログラムが紹介されている。

作成したプログラムは、基本的に上記に基づいている。

修正点

基本的に上記で紹介されたものを使っているだけであるが、「How to play mp3 file from a website #113」にあるように、StreamHttpClient_ECHO よりも単純になるように、AudioFileSourceHTTPStream を使うようにしてみた。

また、手元のWiFiの環境が悪いせいかもしれないが、esp8266-google-tts で音声のURLを取得することに失敗し、タイムアウトもうまく働かない場合が結構あるので、タイムアウトを働かせるように少し修正してみた。

備忘録として記録を残しておく。

esp8266-google-tts のタイムアウト修正

esp8266-google-ttssrc/google-tts.cppの中でtkk の取得の際にはタイムアウト処理がなされていない。tkkの取得の際にもタイムアウト処理が行われるように以下のコードの31行から38行の部分を54行から61行の部分にコピーした。

開発環境

M5Stack Atom Echo

PlatformIO IDE for VSCode

ライブラリのバージョン

プログラム

m5atom-netatmo-echo.cpp

メインプログラムである。

Netatmo APIを利用して二酸化炭素濃度を取得する」と基本的な部分は同じである。二酸化炭素濃度を取得して、一定の基準を超えていたら、それを知らせる文字列を生成し、音声合成したファイルへのURLに変換し、M5Stack Atom Echo のスピーカーから再生する。一定時間毎に二酸化炭素濃度の取得から繰り返す。

Atom Echo のボタンを押せば基準を超えていない場合も二酸化炭素濃度を音声で知らせる。

String getGoogleSpeechUrl(String text) は、esp8266-google-tts を利用して、引数のtext を音声合成したファイルへの URL を戻す。変換に失敗する場合があるので、失敗した場合には繰り返すようにしている。上記の esp8266-google-ttsのタイムアウト修正をしていないと、ずっと待ち続け、リセットするまで回復しないことがある。

output-url-to-speaker.cpp

int outputUrlToSpeaker(String url) で引数に与えられたURLの音を M5Stack Atmo Echo のスピーカーから出力する。

ソースコードの2行目の #include <SD.h>  がないと、fatal error: vfs_api.h: No such file or directory になる。

netatmo-access.cpp

Netatmo APIを利用して二酸化炭素濃度を取得する」と同じであるが、composeMessage と cleanupClient を m5atom-netatmo-echo.cpp に移動した。

netatmo-access.h

Netatmo APIを利用して二酸化炭素濃度を取得する」と同じであるが、composeMessage と cleanupClient を削除した。