Google Home Mini を使って、声で ESP32 の LED を光らせてみた

記事公開日:2017年10月29日
最終修正日:2018年3月7日

こんばんは。

ついに、日本語の肉声で、電子工作と気軽に連携できる時代がやってまいりました。

前回の記事では、AIスピーカーの Google Home Mini をレビューしてみましたが、今回は私の本来の目的である、ESP32 ( ESP-WROOM-32 ) と連携して、LED の ON / OFF や、明るさを声の数値で喋って点灯させてみたいと思います。

早速、動画はこんな感じです。
深夜だったので、かすれ声で喋ってみました。

いかがでしょうか。
日本語でなかなかイイ反応ですね。
ちゃんと声の数字を数値としてマイコンが認識してくれています。
これはスバラシイ!!!

因みに、これを行うためには、2つのクラウドサービスに登録しなければなりません。
将来的には1つのクラウドサービスだけでいける日が来るとは思いますが、私が調べた中では2つのサービスを中継します。

それは、IFTTT と Blynk です。

Blynk については当ブログでも以下の記事で取り上げましたので、そちらを参照してください。

Blynk アプリで 遠方から スマホ とESP32 の双方向リアルタイム同時通信

Blynk というクラウド系サービスは、ESP8266 や ESP32 を 3G/4G/LTE 回線を通して遠方のスマホからコントロールできるサービスでした。

つまり、その Blynkサーバーは ESP32 からのデータを蓄積したり、送受信できるサーバーなのです。
ただ、それだけでは Google Home と連携はできません。

そこで、今回私が初めて使ったのは、IFTTT というサービスです。

この IFTTT というのは、無料で登録できて、簡単に言えば、インターネット上の様々なサービスの橋渡しをするサービスです。

Google Home は Google Assistant というサービスを介して音声をテキストデータにしています。
IFTTT は Google Assistant に対応しています。
そして、もう一つに、Webhooks というものも対応しています。
これは、正直良く分からないのですが、要するにテキストデータを利用して HTTP通信で GET や POSTリクエストをサーバーに送信できる機能です。
IFTTT内で、Google Assistant と Webhooks を連携させ、Google Assistant から得たテキストデータや数値を Webhooks で取得し、それを HTTP GET リクエストでBlynk サーバーに送信するという仕組みです。
説明が下手でスミマセン。

図で表現すると、こんな感じでしょうか

IFTTT_GoogleHome01

因みに、私は IFTTT や Google Asistant 、Webhooks については使い始めたばかりで、正直あまり知識がありません。
ただ、それを使ってやってみたらうまく動いたというだけの話です。
これからいろいろと勉強していきたいと思います。

もし、間違えていたらコメント投稿欄などでご連絡いただけると助かります。

ということで、ザッと説明しますが、2つのクラウド系サービスを登録するので、意外と面倒で小難しいことを覚悟しておいてください。
ただ、一度設定してしまえば楽です。

スポンサーリンク

使うもの

Google Home Mini

IFTTT_GoogleHome02

今現在はビックカメラや、楽天等で購入することができます。

ESP-WROOM-32 開発ボード

突入電流抑制等 USBホスト側機器の保護や、サーマルシャットダウン機能が充実したスイッチサイエンスさんの ESPr Developer 32 はお薦めです。

その他、Espressif Systems 純正の ESP32– DevKitC があります。

※2018/01/30時点で、Amazon.co.jp では Espressif system純正の ESP32-DevKitC は販売されていません。秋月電子通商さんか、マルツパーツさんで購入してください。

3.3V~5V砲弾型LED

25mA 程度流せる、一般的な LED で良いです。

電流制限抵抗または CRD ( 定電流ダイオード )

LED がちょうど良く光るように直列に固定抵抗を入れます。
抵抗値はLED によって異なりますので、各自丁度良いものを選んでください。
一般的に、1kΩ~10kΩ程度だと思います。
ESP32 の GPIO 端子に 12mA 以上流すと故障する可能性が高くなりますので、電流制限抵抗は必ず入れましょう。

その他、10mA 以下のCRD ( 定電流ダイオード )でも良いです。

その他、ブレッドボード、ジャンパーワイヤー等

(事前準備)Arduino core for ESP32 のインストールを済ませておく

パソコンに Arduino core for ESP32 のインストールを事前に済ませておいてください。
インストール方法は以下の記事を参照してください。

Arduino core for the ESP32 のインストール方法

Arduino IDE は 1.8.5 で動作確認済んでおります。

Arduino core for ESP32 は最新版をインストールしておいてください。

(事前準備)Blynk をスマホとArduino IDE にインストールしておく

Blynk は数種類のアイテムまでは無料ですが、それを超えると有料になるサービスです。
以下の記事を参照して、Blynk に登録してインストールしておいてください。

Blynk アプリで 遠方から スマホ とESP32 の双方向リアルタイム同時通信

そして、Blynk サーバーと ESP32 がちゃんと通信できることを予め確認しておいてください。

これで使用している、auth コードが今後必要になります

IFTTT の登録

IFTTT を初めて使う方は以下のリンクを開いて下さい。

https://ifttt.com/

すると、下図の様な画面が開きますので、ご自分のメールアドレスを入力して登録していきます。

IFTTT_GoogleHome10

次に、パスワード設定を求められるので、好きなパスワードを入力します。

IFTTT_GoogleHome11

すると、下図の様な画面が出てきます。
これは、IFTTT 最新版アップデートが行われたら通知をメールで受け取るかどうかの設定です。
この画面はしばらくすると消えるので、そのまま待ちます。
この設定は後で変えられます。

IFTTT_GoogleHome12

すると、下図の様な画面になりますので、登録完了です。

IFTTT_GoogleHome13

次では、Applet の作成方法を説明します。

スポンサーリンク


mgo-tec電子工作 関連コンテンツ ( 広告含む )

投稿者:

mgo-tec

Arduino , ESP32 ( ESP-WROOM-32 ) , ESP8266 ( ESP-WROOM-02 )等を使って、主にスマホと連携した電子工作やプログラミング記事を書いてます。ライブラリも作ったりしてます。趣味、独学でやってますので、動作保証はしません。 電子回路やプログラミングの専門家ではありません。 畑違いの仕事をしていて、介護にドップリ浸かりそうな年配者です。 少しだけ電気の知識が必要な仕事なので、電気工事士や工事担任者等の資格は持っています。

「Google Home Mini を使って、声で ESP32 の LED を光らせてみた」への12件のフィードバック

  1. 興味深く記事拝見しました。
    昨日、別記事に投稿したものです。(記名を忘れていました)
    google homeからesp32使ってLEDをON/OFFやらする!夢が広がりますね。
    IoT対応の家電じゃなくても、照明の点灯消灯とかできないかなとか考えちゃいます。
    ただ、私の場合ほとんど何もわかってないのでこれから勉強ですが。

    これからのご活躍もお祈りいたします。

    1. まめさん

      無記名でも全然大丈夫ですよ!

      強電100V を電子工作と連携させることは、この技術の延長なので、リレー機器を使えば実現可能です。
      ただ、、電気工事士資格保有者が施工する方が良いと思います。
      そうでなければ、既製品のIoT 機器を使った方が良いかも知れませんね。

      いろいろコメントありがとうございました。
      m(_ _)m
      ブログ更新は割に合わない辛い作業ですが、何とか維持していきたいと思ってまーす。

  2. mgo-tec 様

    お忙しいところ、いつもお手数をお掛けし申し訳ありません。
    どうしても Webhooks 設定の画面に移れません。
    「上記の Google Assistant 設定で Create trigger ボタンを押すと…」とありますが、Create trigger ボタンが見つかりません。
    ご教示の程お願いいたします。

    1. juchangさん

      たびたび当ブログにお越しいただき、ありがとうございます。

      Create triggerボタンが見つからないのは謎ですね。
      因みに、「上図の~」というところの文言は誤りで、「前項の図の」が正しいです。
      すみませんでした。
      早速訂正します。

      でもおかしいですね~。
      Say a phrase with a number欄の一番下にCreate triggerボタンがあるはずですが・・。

      他者のWEB記事で調べて見てください。
      私が調べたところ、そういうトラブルが見つかりませんでしたが・・。

  3. mgo-tec 様

    お手数をお掛けします、解決しました。
    Say a phrase with a number欄の入力を終え、Create triggerボタンを押したところで一旦画面を閉じてしまったため、次の設定画面が表示されていたことを忘れていました。
    お陰様で、Webhooks の設定も終え次のステップへ進む段階となりました。
    今後ともご指導の程よろしくお願い致します。

    1. あー、なるほど。
      それは良かったですね (^^)
      こちらこそ、今後とも当ブログをよろしくお願いいたします。
      m(_ _)m

  4. この記事のとおりに進めていって
    「IFTTT Google Assistant Applet の Choose trigger について」の項で
    「3) Say a phrase with a text ingredient」を選択して、
    数値ではなくテキストをESPに送るのって可能ですかね?
    とりあえず以下のようなプログラムで自分なりにやってみました。

    String text = param[0].asString();
    Serial.printf("%s\r\n", text);
    

    実際にGoogleHomeに「こんにちは」とか「さよなら」「2.1(にーてんいち)」と話しかけましたが、全部「????□」と返って来ます。(単なる文字化けではない?)
    IFTTT(日本語) → Blynk(日本語未対応?) → ESP32(日本語未対応) のやり取りのどこかで(あるいは両方で)テキストがおかしなことになっているんですかね?

    このあたりのことで何かご存知でしたらアドバイスいただけると幸いです。

    1. たいさん

      記事をご覧いただき、ありがとうございます。

      まず、結論から言いますと、Blynk は日本語非対応のようです。
      たいさんのように、IFTTT の
      3) Say a phrase with a text ingredient
      で作成して、Google Home に 「かきくけこ」というメッセージを送信してみました。
      Arduino IDE 側に以下のように、送られてきたデータを16進数でシリアルモニターに表示させてみました。

      String text = param[0].asString();
      
      for(int i=0; i<text.length(); i++){
        Serial.println(text[i],HEX);
      }
      

      すると、結果はこんな感じで表示されます。

      20
      4B
      4D
      20
      4F
      51
      20
      53

      これは、どうやら UTF-16コードの末尾バイトのみ合っていて、UTF-16コードの先頭バイトがカットされているっぽいです。
      「かきくけこ」のUTF-16は、16進数で以下のようになります。

      0x304B
      0x304D
      0x304F
      0x3051
      0x3053

      本来、WEB上では、UTF-16 の場合、「¥u304B」のような文字で返って来るので、最初の文字列はカットされてしまう可能性が高いです。
      ついでに 30 もカットされてしまうかもしれません。

      因みに、「ABCDEFG 12345678910」とGoogle Home で喋ると、半角英数値は問題無く表示できます。
      ですから、Blynk は半角英数値のみの対応と思われます。

      もし、日本語文字列を取得したいのであれば、Google Cloud Platform , Dialogflow , Firebase を使えば良いと思います。
      ただし、ハードルは劇的に高くなり、うまく動作しないこともしばしばです。
      これはあくまでテストバージョンでしか動作しません。
      そのかわり、かなり自由度が高く、Google Home との連携は殆ど何でもできそうな感じです。
      以下の記事を参照してみてください。

      Google Home と ESP32 で、音声をテキスト表示させた WiFi 電光掲示板を作ってみた

      ESP32 単独で センサー値 を Google Home に喋らせる実験( Google Cloud Platform 設定編 )
      ESP32 単独で センサー値 を Google Home に喋らせる実験( Dialogflow , Firebase , Actions on Google 設定編 )

  5. mgo-tec 様

    すごく丁寧なご返事ありがとうございます。
    Blynk経由では日本語文字列のやり取りは難しいみたいですね。
    別記事で紹介なさっているGoogleCloudPlatformを使う方法なら、日本語も対応してESP32→GoogleHomeでしゃべらせることもできるようなので、少々敷居は高そうですがチャレンジしてみようと思います。
    アドバイスすごく参考になりました。ありがとうございました!

    1. いえいえ。
      こちらこそ、ブログをご覧いただいただけでも感謝です。

      Google Cloud Platform かなり難解なので、がんばってください。

  6. mgo-tec様
    記事を参考にBlynkからeps32を操作することができました。
    丁寧な解説どうもありがとうございます。大変感謝しております。
    なんとかあと少しでGoogle homeからエアコン、TV、照明の操作ができそうです。
    blog界隈も最近はなかなか目に見える形のフィードバックが得られにくいですね。
    せめてアマゾンの商品クリックしまくっておきます。

    1. 匿名さん

      記事をご覧いただき、ありがとうございます。

      動いて良かったです。
      こういうのって日進月歩ですから、来年はこの記事通りでは動かなくなっているでしょうね。
      なかなか辛いものがあります。

      自分もフィードバックは正直言って辛いので、BLOG界隈が衰退していくのは良く分かります。
      でも、こういう声を頂くとすごく励みになるので、何とか続けていけそうです。
      こちらこそ、嬉しいコメントありがとうございました。
      m(_ _)m

コメントを残す

メールアドレスが公開されることはありません。

*画像の文字を入力してください。(スパム防止の為)

This site uses Akismet to reduce spam. Learn how your comment data is processed.